Emacs入门

来自linux中国网wiki
Evan讨论 | 贡献2021年3月2日 (二) 02:14的版本 →‎常用插件
跳到导航 跳到搜索

目录

进阶

用emacs 让你每天都有新发现和小开心

要学习的 有 calendar    git   etc 
再用上其它插件吧 比较 git 什么的 

如何用orgmode 写出blog or mediawiki

模式切换命令:M-x 模式名

    shell: 终端模式(ESC+!)
    r-mode:R语言
    org-mode:org-mode
    c++-mode:C++语言
    c-mode:C语言
    latex-mode:LaTeX文件
    perl-mode:Perl语言
    tex-mode TeX文件 


代码折叠方式
M-x hs-minor-mode
M-x hs-hide-all,
用M-x 直接敲命令更方便,不用记太多快捷键 

模式切换


ERC is a powerful, modular, and extensible IRC client for Emacs

绑定键盘

Emacs 绑定键盘的技巧

https://www.gnu.org/software/emacs/manual/html_node/elisp/Key-Binding-Commands.html


用Emacs编辑Markdown


Emacs有这些配置足矣

主题配色

https://www.cnblogs.com/eat-and-die/p/10309681.html#org8b69c89

Edit mediawiki sites from emacs

mediawiki.el -- Edit mediawiki sites from emacs

Emacs 从入门到飞天

1.Emacs Beginner's HOWTO http://jeremy.zawodny.com/emacs/

2.Learning GNU Emacs Third Edition

3.Sams Teach Yourself Emacs in 24 Hours

4.Writing GNU Emacs Extensions

5.An Introduction to Programming in Emacs Lisp

6.Gnu Emacs Lisp Reference Manual

7.GNU Emacs Manual

8.GNU Emacs Pocket Reference  

emacs用户手册


一年成为Emacs高手 (像神一样使用编辑器)

手把手教你从Vim迁移到Emacs+Evil

我来挖个坑:大家用 Emacs 来干嘛?

Emacs 有什么奇技淫巧?

Emacs相关中文问题以及解决方案

https://www.cnblogs.com/liweilijie/category/440232.html

无知和搞笑

我为什么鄙视并抵制Emacs编辑器?

markdown

org导出md

    org-mode支持markdown格式导出,而且不需要pandoc和markdown-toc。
    从操作性上来说org-mode要好一些,功能更加强大,所以我要弃markdown了。

    配置方法

    (eval-after-load "org" '(require 'ox-md nil t))

    导出md方法

    C-c C-e m

window-numbering

    简介
    快速在window间切换。

    操作

    M-number

eg  C-x 2  切出两个窗口  然后 alt-1 alt-2 两个窗口之间来回 


emacs安装配置


emacs 学习小结

以前笔记

calendar emacs日记功能

;; 设置F2快捷键指定Emacs 的日历系统,i d 新建日记,d查看日记
(global-set-key [f2] 'calendar)

q 是exit 

https://www.gnu.org/software/emacs/manual/html_node/emacs/Calendar_002fDiary.html

emacs写日记

manual Commands for Binding Keys

https://www.emacswiki.org/emacs/CalendarMode

Emacs中的日程管理

Calfw

CalendarLocalization


Emacs配置文件(非常酷的风格!)有很多calendar相关的

2021问题

现在在kali里面直接打开文件没内容显示,要先打开em  Symbol's value as variable is void ispell-menu-map-needed
我结果是从另外一个方向来处理这个问题  手工编译em 27  暂时只另外了 em 为新的emacs 其它 包括emacs-gtk还没改 /usr/bin 下的还没有改

安装emacs

How to Compile Emacs on Linux

Emacs Lisp

正文

https://www.emacswiki.org/emacs?interface=zh-cn

生活在Emacs中

https://www.emacswiki.org/emacs/InitFile

成为高手笔记 Basic Emacs survival keys

即使你不打算使用 Emacs 默认快捷键, 这步也是必须的, 不要跳过!

最起码要知道以下命令,

M-x describe-variable, 快捷键 C-h v, 查看变量的文档
M-x describe-function, 快捷键 C-h f, 查看命令的文档
M-x describe-key, 快捷键 C-h k, 查看快捷键的文档


Emacs manual       C-h r        Browse manuals     C-h i
Emacs tutorial     C-h t        Undo changes       C-x u
Buy manuals        C-h RET      Exit Emacs         C-x C-c


If an Emacs session crashed recently, type M-x recover-session RET
to recover the files you were editing.


    C-g (即同时按下Control和g键) 能够取消命令提示. 后面我们会将escape键也映射成该操作以符合Vim的操作惯例.
    C-x k 杀掉(关闭)一个buffer. 那些自动打开的windows通常可以通过按下"q"键来关闭.
    C-x o (字母"o"而不是数字零) 会在window之间循环跳转.
    C-x 2 横向分割(window)
    C-x 3 竖向分割
    M-x (M = PC上的Alt键) 会显示一个"minibuffer",在那你可以调用Emacs函数. 后面我会展示如何让它更好用.
    要切换long lines wrapping功能 (类似Vim中:set wrap/nowrap), 执行 M-x visual-line-mode RET.
    C-y: yank/paste. 粘贴,它在你开启Evil功能时依然有效.




以实际问题作为切入点

努力能很快得到回报, 你会越学越有乐趣, 进入感情上的正反馈.

要成为高手, 兴趣是最重要的.

以我为例, 我急需 GTD 的工具, 而 Emacs 的 Org-mode 是同类软件中最好的 (没有之一). 用 Org-mode 节省了时间后, 我对 Emacs 爱屋及乌, 兴趣高涨了 100 倍.

反面例子是啃Lisp教程开始Emacs之旅, 坚持下来的人寥寥无几.

待解决的问题设定优先度 关键在于理性地考虑你最迫切需要解决的一个问题.以这个问题作为出发点, 除此之外都可以妥协.

虽然 Emacs 无所不能, 但是饭也要一口一口吃. 有时退一步等于进两步.

例如, 我一直以为 Emacs 的中文显示很完美, 搞不懂为什么有人在字体配置上花那么多时间.

在接到读者反馈后, 我才明白原来我一直在终端下使用Emacs, 终端软件可以完美显示中文字体, 所以就没 Emacs 什么事了. 需要配置字体的人用的是图形界面 Emacs.

当初只在终端下使用 Emacs 是因为需连接到远程服务器. 我认为这是重点. 甚至为此放弃了漂亮的配色主题 (后来发觉此牺牲毫无必要). 塞翁失马, 由此也避免了图形界面版本的所有问题.

https://github.com/redguardtoo/mastering-emacs-in-one-year-guide/blob/master/guide-zh.org

后记

后面要把常用的这些常用快捷键写成一个短小的总结卡

模式键定义

四个模式键:C—-Ctrl;M—-Alt;s—-Super(Win);S—-Shift

比如:

C-x:表示按下ctrl键,然后按下x键。

C-x C-c:表示按下ctrl,然后按下x键,松开后再按下c键。

C-x k:表示按下ctrl,同时按下x和k键。


最常用命令 eg页开头或结尾

M-f 与 M-b   在行内, 前后大步移动光标,步进单位对于英文而言是单词的长度,对于中文而言是两个标点符号的间距。

M-{ M-}  段开头或结尾

C-x [  C-x ] or ESC < ESC > 页开头或结尾 

C-a 或 C-e  对于英文文本,若将光标快速移到行首或行尾,标准按键是 C-a 或 C-e 但是对于中文而言,这对按键有着将光标被移到段首或段尾的奇异效果……如果偶尔忘记,用 Home或End 键也未尝不可。

M-a 与 M-e 则分别可将光标移动到句首或句尾。

C-v 或 M-v 如果文档很长,用可实现向下或向上翻屏

 M-< ,移到最开始。
   然后再按几次 C-v 回到这里。

 M-> ,移到最末尾。
   然后再按几次 M-v 回到这里。

C-x 2 将屏幕划分成两个窗格。这两个窗格里显示的都是本篇快速指南,而光标则停留在上方的窗格里。

C-x o(“o”指的是“其它(other)”), 将光标转移到下方的窗格。

C-x 1  (在上方窗格里)输入 C-x 1 关掉下方窗格。

C-x C-f         寻找文件。
C-x C-s         保存文件。

打开菜单 用F10或者M-` (就是键盘输入区左上角的那个键)就可以呼出菜单了

emacs-gtk 显示菜单 etc  option -->show/hide 这样在 emacs-gtk 就有菜单了 而em还是没有的 非常 好 

Emacs的基本概念

C-x C-v	find-alternate-file	读取另一个文件来代替刚才诗篇的那一个。
C-x i		输入文件。
C-x C-f	find-file	查找文件并且打开它。
C-x C-s	save-buffer	保存文件.
C-x C-w	write-file	把缓冲区内容写入一个文件。
M-x recentf-open-files, 应该是默认绑定到C-x C-r.
C-x C-c	save-buffers-kill-emacs	退出emacs
C-h	help-command	进入emacs的在线帮助系统。

文件编辑


ESC x goto-line n RET		把光标移动到文件的第N行
ESC x goto-char n RET		把光标移动到文件的第N个字符
ESC 500 C-n		光标移动500行,ESC n 是重复执行命令的意思。
C-u		C-u 等于4, C-u C-u 等于16次重复的意思。
C-x u		撤消; 同命令还有: C-_ C-/
ESC - C-k		删除行首到光标位置之间的东西。
ESC d	kill-word	删除光标后面的单词。
ESC DEL	backward-kill-word	删除光标前面的单词。
ESC k	kill-sentence	删除光标后面的句子。
ESC y		恢复上次删除的操作内容。
C-t	transpose-chars	交换两个字符的位置。
ESC t	transpose-words	交换两个单词的位置。
C-x C-t	transpose-lines	交换两个文本行的位置。
ESC c	capitalize-word	把单词的首字母改为大写。
ESC u	upcase-word	把单词的字母全部改为大写。
ESC l	downcase-word	把单词的字母全部改为小写。
ESC - ESC c	negtive-argument; capitalize-word	把前一个单词的首字母改为大写。
ESC - ESC u	negtive-argument; upcase-word	把前一个单词的字母全部改为大写。
ESC - ESC l	negtive-argument; downcase-word	把前一个单词的字母全部改为小写。
ESC x overwirte-mode RET		文本的改写模式,再次输入则取消。实际上直接输入: ESC x ov 用TAB键可以补全。
C-x C-w		文件另存为.

使.emacs立即生效

ESC x eval-current-buffer

查找和替换操作

C-s	isearch-forward	向前递增查找
C-r	isearch-backward	向后递增查找
C-s C-w		可以把从光标位置到下一个标点符号或者空格符之间的文本都复制到查找字符串里面去。
C-s C-y		光标位置到行尾之间的文本都复制到查找字符串里面去.
C-s ESC y		可以把删除环里面的文本复制到查找字符串去。而且在用过这条命令之后,还可以用 ESC p ESC n 进来上下条目查看。
C-s RET C-w	word-search-forward	单词查找。
C-r RET C-w		单词查找。
ESC x replace-string RET recieve RET receive RET		Emacs将从光标位置开始,把文件里面所有出现查找字符串(recieve)的地方都替换掉。如果想对整个文件做替换,则使用命令之前移动 ESC < 位置即可。
查询与替换 (ESC % recieve RET receive RET)

基本查找与替换操作    2021 0228                                                                                                                                                   
                                                                                                                                                                             
  M-x replace-string RETURN                                                                                                                                                  
  输入查找字符串 回车  ,再输入替换字符串(new) 回车                                                                                                                           
  如果想整个文件 全局查找 替换  在用这个命令之前用 ESC <  or home

ESC %	开始查询-替换操作。
SPACE 或 y	用新字符串替换查询字符串searchstring, 然后前进到下一个位置。
DEL 或 n	不替换; 前进到下一个位置。
.	在当前位置做替换后退出查询-替换操作。
,	替换并显示替换情况(再按空格键或 "y" 后才移动到下一个位置。)
!	对后面的文件内容全部进行替换,不再提问是否要进行替换。
^	返回上一次进行了替换的位置。
RET 或 q	退出查询-替换操作。
C-r	进入递归编辑状态。
C-w	删除此处内容并进入递归编辑状态。
ESC C-c	退出递归编辑状态,继续完成查询-替换操作。
C-]	退出递归编辑状态和查询-替换操作。
删除命令
C-d	向前detele字符
DEL	向后detele字符
ESC d	向前delete到字首
ESC DEL	向后delete到字尾
ESC 0 C-k	向前delte到行首
C-k	向后delete到行尾
C-x DEL	向前delete到句首
ESC k	向后delete到句尾
ESC - C-M-k	向前delete到表达式首部
C-M-k	向后delete到表达式尾部
C-w	kill 区域
marking
C-SPC (C-@)	标记当前位置
C-x C-x	以字符为单位使用移动命令动态标记区域
ESC @	以字为单位使用移动命令动态标记区域
ESC h	标记一段
C-x C-p	标记一页
ESC C-@	标记一个表达式
ESC C-h	标记一个函数
C-x h	标记整个缓冲区
缩进格式
TAB	缩进当前行(与模式有关)
ESC C-\	缩进区域(与模式有关)
ESC C-q	缩进表达式(与模式有关)
C-x TAB	Indent region rigidly arg. Columns
C-o	在光标后插入一个新的行(有点像vi的'o')
ESC C-o	静态地将一行下移
C-x C-o	删除光标附近的空行(留下一行)
ESC ^	与上一行合并成一行
ESC \	删除光标附近的所有空格
ESC SPC	删除光标附近的空格(留下一格)
ESC q	Fill paragraph
C-x f	Set fill column
C-x	设置每一行开始的前缀
递增查找
   在查找过程之中想取消查找可以需要按 C-g C-g .
   用复制办法得到的查找字符串会把原文中的大写字母都转换成小写字母。

搜索

增量搜索 C-s 正向搜索

C-r 反向搜索

C-M-s使用正则表达式正向搜索

C-M-r 使用正则表达式反向搜索

M-p 选择上一个搜索结果

M-n 选择下一个搜索结果

RET 退出搜索并停留在当前搜索到的位置

C-g 中止当前搜索

save and exit

 
C-x C-c:退出Emacs

C-x C-s:保存当前buffer

C-x C-w  write-file

命令的中止和 销

C-g  keyboard-quit  放弃当前命令
C-x u  advertise-undo  undo上一次 可多次用


备份文件

想恢复到的最简单的就是直接编辑备份文件

eg emacs test~ ; C-x C-w test TETURN 把他保存为一个正式文件

选中 复制 黏贴

把光标移动到区域的首字符
键入C-@(即ctrl+shift+2),以设置标记 有时是ctrl+shife +@
把光标移动到区域的最后一个字符
键入M(alt)-w,拷贝这个选定区域到粘贴板(剪切是C-w)
用光标定位将要粘贴内容的地方,然后键入C-y ,拷贝成功。

C-@ mark --> c-f or c-n --> alt-w --> c-y

C-w	剪切标记到当前光标所在处的文本  ESC w 复制文本

C-d 删除一个字符
ESC h 选中一个段落

C-x C-x 检查一下位置                                                                 
 C-w  删除文本块  

也可以可怕的用C-k 先 剪切 然后再来两个 C-y 一个是为开始的切还原 ,另外一个是你要CP去的地方

文本块的选取和粘贴

C-w 删除文本块                                                                       
 C-y  yank 粘贴                                                                       
 ESC W   or   C-INSERT    复制文本块                                                  
 ESC h  标记段落                                                                      
 C-x C-p   标记页面  mark-page                                                        
 C-x  h 标记整个缓冲区                                                                
 ESC y   在用过C-y 命令以后粘贴更早删除的文本
 C-X u  反选 其实就是undo

交换位置

字符交换 光标在第二个字符上 C-t

文本交换 光标在两个单词之间 ESC t

交换两个文本行 光标在第二个文本行的任意位置 C-x C-t

改变大小写

第一个字母改为大写  capialize   ESC  c                                               
全部改为大写 upcase    ESC u                                                         
全改为小写  ESC  l (不是 sn 1) 如果在单词中间 可以把前半部分改为小写                 
                                                                                     
加ESC - 再加上面的命令  只对 光标之前的操作

文本改写模式

文本改写模式                                                                         
 insert  overwrite mode    不要时 为  ESC x overwrite-mode RETURN                    
可用自动补足功能啦 不用全打 tab                                                      
                                                                                     
文件内容取代缓冲区                                                                   
 ESC  x  revert-buffer RETURN

查找

搜索/替换(Seach/Replace)
C-s 向后搜索
C-r 向前搜索

GNU emacs24 中如何剪切复制多行文本

替换

按M - %启动查找替换(M is alt on debian),输入要被替换的词,回车,然后输入要替换的词,再回车。
被替换的词会高亮起来,这时,输入y替换并跳到下一个,输入n忽略并跳到下一个,输入q结束,输入!替换剩下的全部。

一些常用的选项:
  C - g 中断查找替换过程。
  ^ 返回上一个替换点,按y继续下一个,如果不想替换上一个的话,用^返回到上一个,然后按 C - r 进入编辑,修改完后按C - M - c退出继续下一个。
  C - l 使当前匹配显示在文档中间。
  C - r 进入修改。

学习Emacs系列教程(八):查找替换

emacs查找替换


书签


书签

DEL


 C-d  是对字符操作                                                  
 ESC  d  对单词操作                                                 
                                                                    
 ESC D 删除光标后面的单词; ESC DEL                                  
 C-k ;                                                              
 ESC K 删除光标后面的句子;C-k del 删除光标前面的句子                
     
从自动保存文件恢复文本
ESC  x  revover-file RETURN


对emacs 进行定制

emacs -> C-x C-f ~/.emacs -> ESC > 到文件的末尾


(setq default-major-mode 'text-mode)
(add-hook 'text-mode-hook 'turn-on-auto-fill)
;; 文本模式设置为默认的主模式; 文本模式里 启用自动换行                              $
;;  ;;设置缺省主模式是text,,并进入auto-fill次模式.而不是基本模式fundamental-mode   $
;; http://blog.chinaunix.net/uid-25830557-id-317944.html



;; 不用再烦 两个 ESC ESC  or  C-x C-u
(global-unset-key "\e\e")
(global-unset-key "\C-x\C-u")





移动


M-< 到文件开头
M->   esc ->shift+> 到文件末尾



以下命令在翻页浏览时相当有用:

	C-v     向前移动一屏
	M-v     向后移动一屏
	C-l     重绘屏幕,并将光标所在行置于屏幕的中央
		(注意是 CONTROL-L,不是 CONTROL-1)


整屏的移动很有用,但是如何在文字中精确定位呢?

有几种方式可以选择。用方向键当然可以,不过更有效率的方法是保持双手位于
主键盘区,然后使用 C-p 、 C-b 、 C-f 和 C-n 这四个命令。它们的功能和方
向键是一样的,如下图所示:

                             上一行 C-p
                                  :
                                  :
            向左移 C-b .... 目前光标位置 .... 向右移 C-f
                                  :
                                  :
                             下一行 C-n
p-previous,n-next,b-backward,f-forward。
>> 用 C-n 或 C-p 将光标移到上图的中央。
   按 C-l,整幅图会被显示在屏幕的中央。



移动的单位            向后        向前
字符                  C-b          C-f



当前行开头或结尾      C-a          C-e

 C-n

M-f 如果你嫌一个字符一个字符地挪光标太慢,你还可以一个词一个词地跳。M-f
(META-f) 可以将光标往前移动一个词,而 M-b 则是往后移。【这里的“词”指
英文单词,对中文来说,则是指移动到下一个标点符号。】

类似的惯例在“行”与“句子”之间也同样适用:C-a 和 C-e 可以将光标移动到
“一行”的头部和尾部;而 M-a(和terminator冲突) 和 M-e 则将光标移动到“一句”的头部和尾部。


这里对简单的光标移动命令做一个总结,其中也包括了整词和整句的移动:

        C-f     向右移动一个字符
        C-b     向左移动一个字符

        M-f     向右移动一个词【对中文是移动到下一个标点符号】
        M-b     向左移动一个词【对中文是移动到上一个标点符号】

        C-n     移动到下一行
        C-p     移动到上一行

        C-a     移动到行首
        C-e     移动到行尾

        M-a     移动到句首
        M-e     移动到句尾



这里还要介绍两个重要的光标移动命令:M-< (META 小于号)可以将光标移动到
所有文字的最开头;M-> (META 大于号)可以将光标移动到所有文字的最末尾。

注意,在大部分键盘上,小于号(<)需要用上档键(Shift)来输入,所以在这
些键盘上你应该用 Shift 键来输入 M-<,如果不按 Shift 键,你输入的会是
M-comma(META 逗号)。

>> 试一试 M-< ,移到本快速指南的最开始。
   然后再按几次 C-v 回到这里。

>> 试一试 M-> ,移到本快速指南的最末尾。
   然后再按几次 M-v 回到这里。


如果你的键盘上有方向键的话,也可以用它们来移动光标。不过我们有三个理由
推荐你学习 C-b 、C-f 、C-n 、和 C-p:(1)它们在任何键盘上都能用。(2)
当你熟练使用 Emacs 之后,你会发现用这些组合键比用方向键要快得多,因为你
的手不需要离开打字区。(3)一旦你习惯了使用这些组合键,你也可以很容易地
适应其它更高级的光标移动命令。

大部分的 Emacs 命令接受数字参数,并且对于多数命令而言,这些数字参数的作
用是指定命令的重复次数。为一个命令指定数字参数(也就是重复次数)的方法
是:先输入 C-u,然后输入数字作为参数,最后再输入命令。如果你有META (或
EDIT 或 ALT)键,那么还有另一种办法:按住 META 键不放,然后输入数字。不
过我们还是建议你用 C-u,因为它在任何终端机上都能用。这种数字参数也称为
“前缀参数”,意思是说这个参数是先于使用它的命令而输入的。

举例来说, C-u 8 C-f 会向前移动 8 个字符。

缓冲区、窗口与窗框


2018年 01月 23日 星期二 21:03:14 CST 学习这个  我去 过了几年了才看起这个 20210129

Emacs 启动后,窗框中默认只有一个窗口,但是使用 C-x 1 或 C-x 2 可以将其水平或竖直一分为二,这个分割过程可以无限的进行下去。每次被分割的窗口都是输入光标所在的窗口(也称为被激活的窗口)。使用 C-x o 可以在多个窗口中跳转。

由于 Emacs 在拆分窗口时,默认是水平或竖直均分,所以如果你希望将某个窗口调的宽一些,可 C-x } ;要使之窄一些,可 C-x { ;要使之高一些,可 C-x ^,但是要使之矮一些,貌似只能是激活该窗口下方的窗口,然后让下方的窗口高一些。这些窗口大小的调整方法,每次只能使得窗口的尺寸增大或减小一个字符的宽度或高度。如果你不想多次输入像 C-x ^ 这样的命令,那么可以用 C-u n C-x ^ 这样的组合键,其中 n 表示你要重复执行 C-x ^ 这样的命令 n 次。例如,要将当前窗口的高度增加 5 个字符的高度,只需 C-u 5 C-x ^ 即可。

C-u 最好要牢记,它的职能就是给某个组合键所绑定的 Emacs Lisp 函数传递一个参数值。 C-u 5 C-x ^ 表示向 C-x ^ 所绑定的 Emacs Lisp 函数传递参数值 5 ,而这个函数接受这个参数值之后,就会将窗口的高度增加 5 个字符的高度。
  要查看按键被绑定到了哪个 Emacs Lisp 函数,只需 C-h k <RET> 按下你要查询的键 。 <RET> 表示回车键

如果觉得窗口太多,想关掉一些,那么关闭被激活的窗口的组合键是 C-x 0 。如果是图形界面的 Emacs,只需要鼠标右键点击窗口的模式行即可将该窗口关闭。我的建议是:能用键盘就不要用鼠标。

要在某个窗口中打开或新建一个文件,可 C-x C-f 文件路径。

为了节省内存占用,请尽量使用 Emacs 的多窗口模式,不要打开一个又一个 Emacs


编辑缓冲区的删除

C-x k     输入缓冲区名称,默认当前缓冲区关闭  命令名是kill-buffer

ESC x kill-some-buffers 依次删除
M(alt)-x kill-some-buffers    依次列出所有缓冲区,逐个询问是否要删除

缓冲区列表,切换,关闭
C-x C-b    列出缓冲区,每个编辑中的文件都放在一个缓冲区中


缓冲区切换
C-x b     输入缓冲区名称并且切换过去

 当我们启动Emacs的时候,会产生*Messages*和*scratch*两个缓冲区。*Messages*是用来显示从Emacs启动开始的所有命令信息的缓冲区,*scratch*是草稿缓冲区,我们可以在其中乱写东西,但不会被保存,除非用户使用C-x C-W命令。

窗口和缓冲区切换

窗口

    C-x 0:关闭当前窗口
    C-x 1:关闭当前窗口以为的其他窗口
    C-x 2: 水平分割窗口(上下排列) 或者  emacs file1 file2
    C-x 3:垂直分割窗口 ,左右排列
    C-x 4 0:关闭当前窗口和缓冲 
    C-x 4 b:在另一窗口打开缓冲(如果当前只有一个窗口将分割一个新窗口)
    C-x 4 f:在另一窗口打开文件(…同上)
    C-x o:在多个窗口中循环切换  o is othre

文本向左推 C-x <
文本向右推 C-x >

模式切换

模式切换命令:M-x 模式名

    shell: 终端模式(ESC+!)
    r-mode:R语言
    org-mode:org-mode
    c++-mode:C++语言
    c-mode:C语言
    latex-mode:LaTeX文件
    perl-mode:Perl语言
    tex-mode TeX文件


C-x C-f	找不到文件时,用C-x C-v 会把查看到的文件放到当前编辑缓冲区  真
正的含义是 把真正想要的文件找出来并要它替换现在这个



调整容器的大小
C-x  ^ 加高当前窗口
C-X  } 加宽

C-x { 水平方向上收缩

C-u C-x ^ 一次4行 or 4列的扩展

C-x - 窗口收缩到非常小
C-x + 变成同样的大小


对其它窗口进行操作的快捷命令

C-x 4 f 在另外一个窗口查找并打开一个文件
C-x 4 b 在另外一个窗口里选择另一个缓冲区

em file1 file2	
M-x (ESC x) compare-windows
C-x o 看出这两个文件什么不同

C-x C-b	缓冲区清单列表	

与缓冲区清单有关的操作

与缓冲区相关速查表 p139

几个快捷键:



 
快捷键 	 命令 	功能 
C-x b  	  	创建缓冲区或者切换缓冲区(由输入的缓冲区名字是否存在决定) 
C-x f 	  	打开文件并将其读到缓冲区中 

C-x s
	  	保存缓冲区('-'存缓冲区,'n'-不保存缓冲区,'!'-保存所有缓冲区,'.'-只保存当前缓冲区缓冲区,'q'-取消保存指令,且不保存当前缓冲区。
C-x s后执行C-r 	  	只读的的方式查看缓冲区内容,按C-c返回到保存操作 
C-x k 	  	删除当前缓冲区
  	 kill-some-buffers 	 依次列出所有缓冲区,逐个询问是否要删除
  	 rename-buffer 	 修改缓冲区名字
 C-x C-v 	  	使用文件内容替换缓冲区中的内容

 C-x C-q
	  	缓冲区只读/读写模式切换

 C-x 0
	  	删除当前窗口 
 C-x 1 	  	删除当前窗口外的所有窗口 
 C-x 2 	  	当前窗口分割为上下2个 
 C-x 3 	  	当前窗口分割为左右2个 
  	 delete-windows-on 	删除某个特定编辑缓冲区上的全部窗口
 C-x o 	  	切换到下一个窗口
M-n C-x o 	  	执行切换到下一个窗口操作n次 
 C-x ^ 	  	高亮当前窗口 
 C-} 	  	水平加宽当前窗口 
 C-{ 	  	水平缩小当前窗口 
  	 shrink-window 	垂直方向上收缩窗口
 C-u 	  	一次以四倍方式执行以上扩大或者缩小、高亮等命令
 C-{ 	  	水平缩小当前窗口 
 C-{ 	  	水平缩小当前窗口 
 C-{ 	  	水平缩小当前窗口 
 C-{ 	  	水平缩小当前窗口 
 C-{ 	  	水平缩小当前窗口 
 C-{ 	  	水平缩小当前窗口 
 C-{ 	  	水平缩小当前窗口 
 C-{ 	  	水平缩小当前窗口 

关于emacs的缓冲区与窗口

emacs快捷键-缓冲区的操作

Emacs编辑缓冲区

文本编辑的正确姿势

用 Emacs 的正确姿势应该是永远保持能不用鼠标就不用鼠标的姿势!因此,你需要学会用键盘来控制光标在窗口中的位置。

最基本的光标位置控制键如下所示:

               上一行 C-p
                    :
                    :
向左移 C-b .... 目前光标位置 .... 向右移 C-f
                    :
                    :
               下一行 C-n</span>
要记忆这几个键并不困难。 p 就是 previous(在...之前), n 就是 next, b 就是 backward, f 就是 forward,而 C 就是 Control……美国人民真会玩!


上述按键虽然简单易懂,但它们只适合小范围移动光标。在行内,可以用 M-f 与 M-b 前后大步移动光标,步进单位对于英文而言是单词的长度,对于中文而言是两个标点符号的间距。

对于英文文本,若将光标快速移到行首或行尾,标准按键是 C-a 或 C-e 但是对于中文而言,这对按键有着将光标被移到段首或段尾的奇异效果……如果偶尔忘记了这对按键,用 Home 或 End 键也未尝不可。 M-a 与 M-e 则分别可将光标移动到句首或句尾。

如果文档很长,用 C-v 或 M-v 可实现向下或向上翻屏。如果偶尔忘记了这对按键,用键盘上的 PgUp 与 PgDn 翻页键也可行。

跨度最大的光标移动键是 M-< 与 M-> ,可分别将光标移动到缓冲区的首部与尾部。

一旦掌握了上述这几个控制光标位置的按键,在 Emacs 中鼠标基本上就变得不是那么不可或缺了,更重要的是,这些按键能够帮助你更快速的选择文本。对于文档中的待选文本区域,用上述按键将光标移动到该区域的起始位置,然后用 C-@ 标定选区之首,然后继续用上述按键将光标移动到选区之尾,这样就完成了文本的选取。


 你可能不知道怎么产生 C-@ 按键序列。普通键盘上,应该是摁住 Ctrl 键,然后再摁住 Shift 键,最后摁下数字 2 键,然后松开手。因为 @ 在 2 上面,需要 Shift 切换……

对于选中的文本,随后的操作无非是剪切、复制或删除。剪切,请用 C-w;复制,请用 M-w;删除,请用 Backspace。对于剪切或复制的文本,要粘帖在光标所在位置,请用 C-y……或者你也可以试着看看 C-y 之后再 M-y 有什么效果!

对文本进行了一段时间的编辑之后,要反悔的话,就用 C-_ 键执行 Undo 操作。

  要产生 C-_ 的按键序列,请参考上文所讲的 C-@ 的做法。 建议现在就立刻将上述提到的每个按键都反复试验六、七次,以后就一直坚持使用它们……用不了几天也许就变成手指的本能了。忘掉鼠标吧,键盘可以解放你的双手,可以让你从畸形的鼠标手解脱,然后变成键盘手……因为你很快就会觉得左手的小指会有点酸痛!我会在下一节中拯救你的手。

拯救你的左手小拇指

如果感到左手的小手指有点疼,就不要再去用左手去摁 C-x C-s 这样的键了,你完全可以用右手的小指去摁键盘右侧的 Ctrl 键,然后左手相应的手指去摁 x 与 s 键

将一段代码向右推

将一段代码向右推20180124pm到这里 后面的还没看完

显示行号

临时显示行号或者取消行号

在Emacs下执行 M-x linum-mode 来显示或者取消行号 M-x : Alt + x 输入: linum-mode

跳转到指定行

临时

M-x goto-line 然后回车   <line_number>
 ESC x goto-line 然后回车   <line_number>
 ESC x goto-char 然后回车  char

长期

以在.emacs文件中定制一下(添加以下一行):

(define-key ctl-x-map "l" 'goto-line) 

然后每次在emacs中按C-x再按l,输入指定的行号就可以了。

http://blog.csdn.net/grey_csdn/article/details/78905862 http://bbs.csdn.net/topics/60028785


常用插件

记笔记,安排日程,那么毫无疑问Org-Mode是首选

Emacs 入门指南:Why & How

evil

;;#添加到配置文件 例如 .emacs
  (setq package-archives '(("gnu"   . "http://elpa.emacs-china.org/gnu/")
                           ("melpa" . "http://elpa.emacs-china.org/melpa/")))


第二步安装 
M-x package-refresh-contents
M-x package-install RET evil RE


; 最后一步是配置
;Finally, add the following lines to your Emacs init file:

(require 'evil)
(evil-mode 1)

;这个是打开文件后默认进入emacs模式
;我还要在emacs和vim模式里面切换:C-z,换来换去啊 
(setq evil-default-state 'emacs)


evil install

Emacs,咱就推荐一个插件:Evil(件如其名,够邪恶)

https://www.emacswiki.org/emacs/EvilZH

Magit

Magit 为 Emacs 用户提供操作 git 的接口,是我第一个重度依赖的 Emacs 插件,也是社区内排行第二的插件。Magit 深度整合到 Emacs 的快捷键中,一切 git 操作都如流水行云般,没有它的话,我连 rebase 都不会。

https://magit.vc/

Dired

Dired 是 directory editor 的缩写,是 Emacs 内置的插件,类似 macOS 上的文件管理器 Finder


C-x d 进入Dired Mode  or emacs dirname

https://www.gnu.org/software/emacs/manual/html_node/emacs/Dired.html


Dired Mode(文件管理)


Emacs文件管理神器--dired常用操作说明

Emacs入坑之旅——用dired模式做文件管理

Markdown

Emacs Workflow - 文件管理

UndoTree


  ‘M-x package-install undo-tree’

    (global-undo-tree-mode);;To enable it

undo-tree 都是只读了 为什么 呢  
init.el 开启 

/.emacs.d/lisp$ vim init-edit.el

注释原来的   算了 我还是先关掉 undo-tree 吧 有空再看一下 这样就原来的配置用起来不错了 

undo-tree-0.7.5$ vim undo-tree.el

我的配置暂时去掉了 有空要处理完为什么 C-s 为什么不是保存而是另存为再加上 

https://www.emacswiki.org/emacs/UndoTree

https://elpa.gnu.org/packages/undo-tree.html

avy

https://github.com/abo-abo/avy 介绍

光标跳转一直是 终端编辑器 的软肋,想要把光标移动到任意指定位置,就算是用 vim,平均也需要按很多次快捷键,并且每次跳转,都需要眼睛进行大量跟踪工作,负担很大。以 vim 为例(不考虑仅使用hjkl或方向键这种最低效的方式),要把光标移动到任意指定位置,首先我们需要先确认指定位置所在行的行号,然后使用命令跳转到指定行,最后再应用w/f键若干次,把光标移动到指定列。这期间的行号确认和每次光标移动,眼睛都得一直跟踪,累人且效率低。

于是,光标跳转插件出现了,它们能让我们的眼睛只看着要跳转到的位置这一处即可,视线完全不需要移动,即可快速完成跳转,而 avy 则是 emacs 上的一个优秀的光标跳转插件。这类插件的使用方式大致为:假设当前屏幕的某处有一段文字This is a test.,要把光标移动到test单词的开头,那么我们只需要完成以下三步,并且,在这过程中我们只需要看着test的开头处,视线无需移动:

   按快捷键激活插件。
   按t键(即test的开头字母),这时候屏幕上所有的t都会高亮,并且显示它们各自对应的快捷键,这里假设test开头的t对应的快捷键为gj。
   按g键然后按j键,光标即跳转到了test的开头。

作者:gratonos


emacs效率插件推荐

大家都来说说自己常用的emacs插件有哪些?

快捷键

M-s : 新建一个buffer(缓冲区)

C-x O : 注意是大写的O,不是零,所以需要按住shift键再按o键。用于在缓冲区之间切换

C-g : 取消当前操作

C-x u : 回到上一步,相当于Undo

C-x  C-x : 变大写

C-x 3 : 把缓冲区(buffer)分为左右两个,新的一个缓冲区是复制当前的缓冲区 (可以执行多次,来分割出很多小窗口)

C-x 2 : 把缓冲区(buffer)分为上下两个,新的一个缓冲区是复制当前的缓冲区 (可以执行多次,来分割出很多小窗口)

M-w : 选中文字的情况是复制文字,而如果没有选中文字则是复制当前的一行

C-w : 选中文字的情况是剪切文字,而如果没有选中文字则是剪切当前的一行

M-x : 调出命令输入,可以在后面接命令,比如man,svn-status,等

C-y : 黏贴

C-x C-s : 保存文本

C-x C-f : 打开文件,如果文件不存在,则新建文件

C-x C-v : 打开一个文件,取代当前缓冲区

C-x k : 关闭当前缓冲区(buffer)

C-s : 向前搜索

C-r : 向后搜索

C-x h : 全选

C-v : 向下翻页

M-v : 向上翻页

C-f : 前进一个字符

C-b : 后退一个字符

M-f : 前进一个单词

M-b : 后退一个单词

C-@ : 标记开始区域

C-a : 移到行首

C-e : 移到行尾

M-a : 移到句首

M-e : 移到句尾

M-< : 缓冲区头部

M-> : 缓冲区尾部

M-g M-g,再输入数字 : 跳转到文本的第几行

C-x 0 : 关闭当前缓冲区

C-x C-c : 退出Emacs


emacs buffer read only
Ctrl-x Ctrl-q 

Emacs快捷键列表

链接:https://www.jianshu.com/p/732157b02ecc

多窗口

 首先先明确下Emacs窗口的概念,我们双击Emacs图标打开程序见到的Windows窗口叫做Frame,包含了标题栏,菜单栏,工具栏,最下面的Mode Line和回显区域,而中间一大块显示文本的区域则是Window,实际上每个窗口都有自己的Mode Line。下文中我将称Frame为框,Window为窗口,这里和我们平时理解的Windows窗口有点区别。

  在Emacs里面,一个框可以分割出多个窗口,多个窗口可以显示同一个或者不同Buffer,但是一个窗口只能属于一个Frame。一个窗口同时也只能显示一个Buffer,但是同时打开两个窗口也能显示一个Buffer的不同部分,这两个窗口是同步的,就是说如果在一个窗口中对Buffer做了修改,在另一个窗口中可以立即表现出来。但在一个窗口中移动光标之类的操作不会影响另一个窗口。多缓冲中有当前缓冲这个概念,同样对于多窗口也有当前窗口,对于当前选中的窗口其Mode Line相对于其它窗口颜色会深一些。


显示窗口

  命令C-x 2 (split-window-vertically) 垂直拆分窗口,就是把一个窗口上下等分为两个,拆分出来的窗口默认是显示当前Buffer。可以多次使用这个命令,会把一个窗口不停的两等分。

        对应也有水平拆分窗口的命令C-x 3 (split-window-horizontally),这两个命令也可以混合使用,如果你屏幕够大画个迷宫出来也不是不可能的。拆分命令还可以加参数,比如M-5 C-x 2就是说上面那个窗口只占5行,其余的位置都给下面的窗口。
  C-x o (other-window) 可以在多个窗口中切换,从上到下一个一个的来。使用参数来控制选中下面第几个窗口,想往回选的话参数设为负数。

  C-M-v (scroll-other-window),用来滚动下一个窗口。

  上一章我们看到有些命令加了C-x 4这个前缀,这一类命令都是用来操作多窗口的。

  C-x 4 b bufname (switch-to-buffer-other-window) 在另一个窗口打开缓冲。

  C-x 4 C-o bufname (display-buffer) 在另一个窗口打开缓冲,但不选中那个窗口。

  C-x 4 f filename (find-file-other-window) 在另一个窗口打开文件。

  C-x 4 d directory (dired-other-window) 在另一个窗口打开文件夹。

  C-x 4 m (mail-other-window) 在另一个窗口写邮件。

  C-x 4 r filename (find-file-read-only-other-window) 在另一个窗口以只读方式打开文件。

   这一类的命令默认是垂直拆分窗口。

重排窗口

  窗口排的密密麻麻看上去肯定不舒服,这时使用 C-x 0 (delete-window)  来关闭当前窗口,需要注意的是窗口和缓冲是两个概念,关闭一个窗口对缓冲,或者我们正在编辑的文件没有任何影响。也可以使用C-x 1 (delete-other-windows) 关闭其它所有窗口。如果想连窗口打开的缓冲一并关掉使用C-x 4 0 (kill-buffer-and-window)。

  我们还可以对窗口的大小做些改变:
        C-x ^ (enlarge-window)让窗口变得高点,
        C-x { (shrink-window-horizontally) 这个是把窗口变窄,变宽的话是C-x } (enlarge-window-horizontally) ,C-x - (shrink-window-if-larger-than-buffer)这个看字面意思就能理解,如果窗口比缓冲大就缩小点,C-x + (balance-windows)这个命令和前面那个没有任何关系是将所有窗口变得一样高。

  最后再说一个在窗口中切换的命令,有时候窗口开的太多自己也记不住顺序,使用C-x o就会很麻烦。有一类命令能让你在上下左右切换当前窗口,M-x windmove-right 就是移到右边那个窗口,对应的"left","up“, "down",向四个方向都能移。

小结




	







[1]

org mode

Emacs 的 Org-mode 在一定程度上可以替代 OneNote,有些方面甚至更好 Org-mode


配置

https://github.com/gabrielelanaro/emacs-for-python
https://github.com/jorgenschaefer/elpy
http://www.jesshamrick.com/2012/09/18/emacs-as-a-python-ide/
https://realpython.com/blog/python/emacs-the-best-python-editor

*day1
pass 20170610
有空再详细的再看

:
记得要添加在公司作的相关的emacs 笔记


=======
这几天常用的几个重要使命
  



重要快捷键(Important)
C-k 删除一行
C-g 停止当前运行/输入的命令
C-x u 撤销前一个命令

c-j 下称整个文件内容

emacs 菜单 用F10或者M-`。

ctrl+g  q 退出 快速说明

编辑器内显示行号可使用 M-x linum-mode 来开启。
M-x 然后在最下面 输入 linum-mode 
not try
q

获取帮助
ctrl+h  k  要查看的快捷键盘




学习基础 Elisp

ctrl+x  ctrl +b


C-x o:把光标在屏幕上的窗口间进行切换。记忆方法:其它(Other)窗口。

然后选择 *scratch*

运算 C-X  c - E

插件管理

c-x  o  other window  install

company 
f2 打开配置文件 

org-mode

major mode and minor mode (C-h m)




;;evan配置文件 
;;  ~/.emacs  行号什么 的 我是加到这个文件生效的
;;   ~/.emacs.d/emacs

;; 关闭工具栏,tool-bar-mode 即为一个 Minor Mode
(tool-bar-mode -1)

;; 关闭文件滑动控件
(scroll-bar-mode -1)

;; 显示行号 试过 这个一定有效果
(global-linum-mode 1)

;; 更改光标的样式(不能生效,解决方案见第二集)
(setq cursor-type 'bar)

;; 关闭启动帮助画面
(setq inhibit-splash-screen 1)

;; 关闭缩进 (第二天中被去除)
;; (electric-indent-mode -1)

;; 更改显示字体大小 16pt
;; http://stackoverflow.com/questions/294664/how-to-set-the-font-size-in-emacs
(set-face-attribute 'default nil :height 160)

;; 快速打开配置文件
(defun open-init-file()
  (interactive)
  (find-file "~/.emacs.d/init.el"))

;; 这一行代码,将函数 open-init-file 绑定到 <f2> 键上
(global-set-key (kbd "<f2>") 'open-init-file)

; 开启全局 Company 补全
(global-company-mode 1)

;; 作者用的  是t
3(global-company-mode t)


;; ~/.emacs  生效的居然是这个 2018
;; 在 mode line 上显示行列号
(setq column-number-mode 1)
(setq line-number-mode 1)

;;显示列号
(setq column-number-mode t)

;; 显示行号
(global-linum-mode 1)

;; 取消滚动栏,工具栏
(tool-bar-mode 0)
(menu-bar-mode 0)
(scroll-bar-mode 0)

;; 关闭emacs启动时的页面
(setq inhibit-startup-message 1)
(setq gnus-inhibit-startup-message 1)
;; 以 y/n代表 yes/no
(fset 'yes-or-no-p 'y-or-n-p)
;;; 设置备份策略
(setq make-backup-files t)
(setq kept-old-versions 2)
(setq kept-new-versions 2)
(setq delete-old-versions t)
(setq backup-directory-alist '(("" . "~/.emacsbackup")))

;; 公共插件配置
;; 设置 package system,这里使用 MELPA,里面的包可以说是应有尽有
(require 'package)
(add-to-list 'package-archives
             '("melpa" . "http://melpa.milkbox.net/packages/") t)
(package-initialize)

;;内置的package管理,emacs24以上的版本有用
(require 'package)
;;将melpa仓库地址加入到package-archives这个列表变量里面
(add-to-list 'package-archives
    '("melpa" . "http://melpa.org/packages/") t)
;;这个是国内一个elpa仓库镜像,速度更快一些,你懂得
(add-to-list 'package-archives
    '("popkit" . "http://elpa.popkit.org/packages/") t)
;;初始化package
(package-initialize)
;;更新仓库里面的package
(when (not package-archive-contents)
  (package-refresh-contents))
(custom-set-variables
 ;; custom-set-variables was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 '(package-selected-packages (quote (company auto-complete autopair))))
(custom-set-faces
 ;; custom-set-faces was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 )



I. 显示时间
.emacs加上:
(display-time-mode 1) ;; 常显
(setq display-time-24hr-format t) ;;格式
(setq display-time-day-and-date t) ;;显示时间、星期、日期

II. 隐藏菜单栏工具栏滚动条
.emacs加上:
(tool-bar-mode 0)
(menu-bar-mode 0)
(scroll-bar-mode 0)
;;注: 新版改成使用0,旧版使用nil的做法已失效,但 (set-scroll-bar-mode nil) 仍可使用

III. 关闭启动画面
.emacs加上:
(setq inhibit-startup-message t)

IV. highlight当前行
.emacs加上:
(global-hl-line-mode 1)
;;;; c mode ;;;;
(defvar xgp-cfsi-left-PAREN-old nil
  "Command used to input \"(\"")
(make-variable-buffer-local 'xgp-cfsi-left-PAREN-old)

(defun xgp-cfsi-modify-alist (alist term new)
  (let ((tl (assq term (symbol-value alist))))
    (if tl
        (setcdr tl new)
      (add-to-list alist (cons term new)))))

(defun xgp-cfsi (style)
  "Deciding whether using CFSI."
  (interactive "Style: ")
  (c-set-style style)
  (setq indent-tabs-mode
        nil
        c-hanging-semi&comma-criteria
        (quote (c-semi&comma-inside-parenlist)))

  (xgp-cfsi-modify-alist 'c-hanging-braces-alist 'class-open nil)
  (xgp-cfsi-modify-alist 'c-hanging-braces-alist 'class-close nil)
  (local-set-key " " 'self-insert-command))

(defun xgp-cfsi-erase-blanks ()
  "Erase all trivial blanks for CFSI."
  (interactive)
  (save-excursion
    (goto-char (point-min))
    (while (re-search-forward "[ \t]+$" nil t)
      (replace-match "" nil nil))))

(defun linux-c-mode()
  (define-key c-mode-map [return] 'newline-and-indent)
  (setq imenu-sort-function 'imenu--sort-by-name)
  (interactive)
  (imenu-add-menubar-index)
  (which-function-mode)
  (c-toggle-auto-state)
  (c-toggle-hungry-state)
  (setq indent-tabs-mode nil)
  (xgp-cfsi "linux"))
(add-hook 'c-mode-common-hook 'linux-c-mode)
;; 代码补全
(add-hook 'c-mode-hook 'company-mode)
(add-hook 'c++-mode-hook 'company-mode)


# other 
如果要一次移动若干个单位,可以给命令加上数值参数,通过C-u命令,如:C-u 8 C-n就表示往下移8行,C-u 10 M-e表示往后移10句。不过C-u的参数对C-v和M-v命令而言有特殊,它不表示上下翻多少页,而是表示上下滚动多少行。注意与C-n的区别,C-u 8 C-n表示光标下移8行,屏幕不一定会滚动,而C-u 8 C-v,表示屏幕滚动8行,如果光标没有滚到屏幕外的话,光标位置不变。
如果不给C-u带上数值,则默认的值是4。比如C-u C-n就表示下移4行。这一特性还可以重复使用C-u C-u C-p就表示上移16行,C-u C-u C-u C-f表示右移64个字符。
前面讲了用C-g可以中断当前的命令,这次再补充一点,有时候C-g不灵时,可以按三次<Esc>键达到相同的目的。

kali本本配置

;;cat ~/.emacs

;; 关闭工具栏,tool-bar-mode 即为一个 Minor Mode
(tool-bar-mode 0)
(menu-bar-mode 0)
(scroll-bar-mode 0)
(tool-bar-mode -1)



(setq column-number-mode t)
(setq column-number-mode 1)
(setq line-number-mode 1)
;; 显示行号
(global-linum-mode 1)
;; 在 mode line 上显示行列号
(setq column-number-mode 1)
(setq line-number-mode 1)

;;显示列号
(setq column-number-mode t)

;; 显示行号
(global-linum-mode 1)

;; 取消滚动栏,工具栏
(tool-bar-mode 0)
(menu-bar-mode 0)
(scroll-bar-mode 0)

;; 关闭emacs启动时的页面
(setq inhibit-startup-message 1)
(setq gnus-inhibit-startup-message 1)
;; 以 y/n代表 yes/no
(fset 'yes-or-no-p 'y-or-n-p)
;;; 设置备份策略
(setq make-backup-files t)
(setq kept-old-versions 2)
(setq kept-new-versions 2)
(setq delete-old-versions t)
(setq backup-directory-alist '(("" . "~/.emacsbackup")))

;; 公共插件配置
;; 设置 package system,这里使用 MELPA,里面的包可以说是应有尽有
(require 'package)
(add-to-list 'package-archives
             '("melpa" . "http://melpa.milkbox.net/packages/") t)
(package-initialize)

;;内置的package管理,emacs24以上的版本有用
(require 'package)
;;将melpa仓库地址加入到package-archives这个列表变量里面
(add-to-list 'package-archives
    '("melpa" . "http://melpa.org/packages/") t)
;;这个是国内一个elpa仓库镜像,速度更快一些,你懂得
(add-to-list 'package-archives
    '("popkit" . "http://elpa.popkit.org/packages/") t)
;;初始化package
(package-initialize)
;;更新仓库里面的package
(when (not package-archive-contents)
  (package-refresh-contents))
(custom-set-variables
 ;; custom-set-variables was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 '(package-selected-packages (quote (company auto-complete autopair))))
(custom-set-faces
 ;; custom-set-faces was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 )

;;;; c mode ;;;;
(defvar xgp-cfsi-left-PAREN-old nil
  "Command used to input \"(\"")
(make-variable-buffer-local 'xgp-cfsi-left-PAREN-old)

(defun xgp-cfsi-modify-alist (alist term new)
  (let ((tl (assq term (symbol-value alist))))
    (if tl
        (setcdr tl new)
      (add-to-list alist (cons term new)))))

(defun xgp-cfsi (style)
  "Deciding whether using CFSI."
  (interactive "Style: ")
  (c-set-style style)
  (setq indent-tabs-mode
        nil
        c-hanging-semi&comma-criteria
        (quote (c-semi&comma-inside-parenlist)))

  (xgp-cfsi-modify-alist 'c-hanging-braces-alist 'class-open nil)
  (xgp-cfsi-modify-alist 'c-hanging-braces-alist 'class-close nil)
  (local-set-key " " 'self-insert-command))

(defun xgp-cfsi-erase-blanks ()
  "Erase all trivial blanks for CFSI."
  (interactive)
  (save-excursion
    (goto-char (point-min))
    (while (re-search-forward "[ \t]+$" nil t)
      (replace-match "" nil nil))))

(defun linux-c-mode()
  (define-key c-mode-map [return] 'newline-and-indent)
  (setq imenu-sort-function 'imenu--sort-by-name)
  (interactive)
  (imenu-add-menubar-index)
  (which-function-mode)
  (c-toggle-auto-state)
  (c-toggle-hungry-state)
  (setq indent-tabs-mode nil)
  (xgp-cfsi "linux"))
(add-hook 'c-mode-common-hook 'linux-c-mode)
;; 代码补全
(add-hook 'c-mode-hook 'company-mode)
(add-hook 'c++-mode-hook 'company-mode)

;; py
(setq tab-width 4)
(set-variable 'python-indent-offset 4)
;;(set-variable 'python-indent-guess-indent-offset nil)

reload configfile

emacs 打开~/.emacs的时候执行命令M-x eval-buffer,就可以使配置文件立即生效。


emacs配置

我的EMACS设置

不错的配置 c什么都包括了 undo-tree暂时去掉 其它感觉不错 2021

mv ~/.emacs.d ~/.emacs.d.bak
git clone --depth 1 https://github.com/seagle0128/.emacs.d.git ~/.emacs.d

有空好好的看一下 https://github.com/seagle0128/.emacs.d


c 常用命令

emacs中很多命令都对C语言格式支持,补充几个命令M-x c-mode 当无法识别C语法格式的文件,可以强制打开C mode语法高亮C-M-p 跳转到}或)匹配的括号C-M-n 跳转到(或{匹配的括号M-x indent-region 自动缩进选定的区域C-c C-c 注释掉整个区域C-u C-c C-c 取消注释C-c C-u 跳转到前面的一个#ifdef C-c C-n 跳转到宏的开头或结尾C-c C-e 扩展宏编译排错:C-x ` (出错信息中)下一个错误,一个窗口显示错误信息,另一个显示源码的出错位置C-c C-c 转到出错位置调试:启动gdb调试器后,光标在源码文件缓冲区中时:C-x SPC 在当前行设置断点gdb在emacs中调用调试并不完美,有时候会出一些异常的情况。工作中如果emacs作为IDE用的话,一般在远程终端字符环境下更合适,如果作为专业的图形化IDE,codeblock等更合适,eclipse+CDT也是一种选择。

c 配置文件

;; 配置文件 for  c  or c ++
;; cat ~/.emacs

;; 在 mode line 上显示行列号
(setq column-number-mode 1)
(setq line-number-mode 1)

;;显示列号
(setq column-number-mode t)

;; 显示行号
(global-linum-mode 1)

;; 取消滚动栏,工具栏
;;(tool-bar-mode 0)
;;(menu-bar-mode 0)
;;(scroll-bar-mode 0)

;; 关闭emacs启动时的页面
(setq inhibit-startup-message 1)
(setq gnus-inhibit-startup-message 1)
;; 以 y/n代表 yes/no
(fset 'yes-or-no-p 'y-or-n-p)
;;; 设置备份策略
(setq make-backup-files t)
(setq kept-old-versions 2)
(setq kept-new-versions 2)
(setq delete-old-versions t)
(setq backup-directory-alist '(("" . "~/.emacsbackup")))

;; 公共插件配置
;; 设置 package system,这里使用 MELPA,里面的包可以说是应有尽有
(require 'package)
(add-to-list 'package-archives
             '("melpa" . "http://melpa.milkbox.net/packages/") t)
(package-initialize)


C/C++ Development Environment for Emacs

Emacs 中 C/C++ 编程基本环境配置2018

将Emacs配置成一个C/C++的IDE编程环境

https://wikemacs.org/wiki/C-ide

enable IDE-like features on Emacs

https://www.youtube.com/watch?v=5FQwQ0QWBTU

from tour

#这些笔记完全作到wiki么 会不会太多 而没有重点的感觉 

* 如果 EMACS 失去响应(IF EMACS STOPS RESPONDING)
-----------------------------------------------
如果 Emacs 对你的命令失去响应,你可以用 C-g 来安全地终止这条命令。C-g
也可以终止一条执行过久的命令。

C-g 还可以取消数字参数和只输入到一半的命令。

>> 输入 C-u 100 设定一个值为 100 的数字参数,然后按 C-g。
   现在再按 C-f,光标应该只会移动一个字符,因为你已经用 C-g 取消了参数。

如果你不小心按了一下 <ESC>,你也可以用 C-g 来取消它。
【这个说法似乎有问题,因为按照这个按键顺序输入的应该是 C-M-g。
取消 <ESC> 的正确做法是再连按两次 <ESC>。】


* 插入与删除(INSERTING AND DELETING)
--------------------------------------

,大部分的 Emacs 命令都可以指定重复次数,这其中也包括输入字符的
命令。重复执行输入字符的命令实际上就是输入多个相同的字符。

>>  试试 C-u 8 *,这将会插入 ********。

好,现在你应该已经掌握了最基本的的文本插入和修改功能,其实删除还可以
“以词为单位”进行,下面是一个关于“删除”操作的小结:

        <DEL>        删除光标前的一个字符
        C-d          删除光标后的一个字符

	M-<DEL>      移除光标前的一个词
        M-d          移除光标后的一个词

        C-k          移除从光标到“行尾”间的字符
        M-k          移除从光标到“句尾”间的字符

【可能你已经注意到了“删除(delete)”和“移除(kill)”的用词区别,后
文会有详细说明。】

注意“<DEL> 和 C-d”还有“M-<DEL> 和 M-d”是根据前述惯例从 C-f和 M-f 衍生的
出来的(其实<DEL>不是控制字符,我们先忽略这一点)。C-k和 M-k 的关系在
某种程度上与 C-e 和 M-e 一样――如果把“一行”和“一句”作一个类比的话。


你也可以用一种通用的办法来移除缓冲区里的任何一部分:首先把光标移动到你
想要移除的区域的一端,然后按 C-<SPC>(<SPC>指空格)【注意,C-<SPC> 往
往被中文用户设定成输入法热键,如果这样,C-<SPC> 就被系统拦截而无法传递
给 Emacs 了,在这种情况下可以使用C-@。】,然后将光标移动到你准备移除的
文字的另一端。这个时候, Emacs 会高亮光标和你按下 C-<SPC> 之间的文本。
最后,按下 C-w 。这样就可以把位于这两点之间的所有文字移除了。


注意,“移除(kill)”和“删除(delete)”的不同在于被移除的东西可以被重新
插入(在任何位置),而被删除的就不能使用相同的方法重新插入了(不过可以
通过撤销一个删除命令来做到,后文会提到)。


重新插入被移除的文字称为“召回(yank)


召回的命令是 C-y。它会在光标所在处插入你最后移除的文字。


C-y 可以召回最近一次移除的内容,那如何召回前几次移除的内容呢?它们当然
没有丢,你可以用 M-y 来召回它们。在用 C-y 召回最近移除的文字之后,紧接
着再按 M-y 就可以召回再前一次被移除的内容,再按一次 M-y 又可以召回再上
一次的……连续使用 M-y 直到找到你想要召回的东西,然后什么也不用做,继续 
编辑就行了。

如果连续按 M-y 很多次,你可能会回到起始点,也就是最近移除的文字。
【看得出这实际上是一个环。】

>> 移除一行,移动一下光标,然后再移除另外一行。
   按 C-y 将第二次移除的那行召回来。
   紧接着再按 M-y,它将会被第一次移除的那行取代。
   试着再按几下 M-y 看看会发生什么。
   再继续,直到第二行被召回来,然后再做个几次。
   如果感兴趣,你可以试着给 M-y 指定一个正的或负的参数。


* 撤销(UNDO)
--------------
如果你修改了一段文字,又觉得改得不好,可以用 undo 命令进行撤销:C-/。
另外, C-x u 和 C-/ 完全一样,但是按起来有些麻烦。

* 文件(FILE)
--------------


* 缓冲区(BUFFER)
------------------

你可以用 C-x C-f 找到并打开第二个文件,但第一个文件仍然在 Emacs 中。要
切回第一个文件,一种办法是再用一次 C-x C-f。这样,你就可以在 Emacs 中同
时打开多个文件。
不过还有一个更简单的办法,那就是用 C-x b。用这条命
令,你必须输入缓冲区的名称。(如果是返回默认的第一个不用名称)


>> 通过输入 C-x C-f foo <Return> 创建一个名为“foo”的文件。
   然后输入 C-x b TUTORIAL.cn <Return> 回到这里。



 C-x s   保存多个缓冲区


 输入 C-x 1 离开缓冲区列表
 
 
 
 * 命令集扩展(EXTENDING THE COMMAND SET)
-----------------------------------------
        C-x     字符扩展。  C-x 之后输入另一个字符或者组合键。
        M-x     命令名扩展。M-x 之后输入一个命令名。

 C-z 可以暂时离开 Emacs――当然,你还可以再回来。
 
 C-x 的扩展命令有很多,下面列出的是你已经学过的:

        C-x C-f         寻找文件。
	C-x C-s         保存文件。
        C-x C-b         列出缓冲区。
        C-x C-c         离开 Emacs。
	C-x 1           关掉其它所有窗格,只保留一个。
        C-x u           撤销。



* 自动保存(AUTO SAVE)
-----------------------

所以,假如不幸真的发生了,你大可以从容地打开原来的文件(注意不是自动保
存文件)然后输入 M-x recover file <Return> 来恢复你的自动保存文件。在
提示确认的时候,输入 yes<Return>。


* 状态栏(MODE LINE)
---------------------

“L” 和其后的数字给出了光标所在行的行号。

最开头的星号(*)表示你已经对文字做过改动。刚刚打开的文件肯定没有被改动
过,所以状态栏上显示的不是星号而是短线(-)。

状态栏上小括号里的内容告诉你当前正在使用的编辑模式。缺省的模式是
Fundamental,就是你现在正在使用的这个。它是一种“主模式”。


用 C-l C-l 将本行带到屏幕的最上方。



* 搜索(SEARCHING)
-------------------

C-s 是向前搜索,C-r 是向后搜索。不过手别这么快!别着急试。

在按下 C-s 之后,回显区里会有“I-search”字样出现,表明目前 Emacs 正处
于“渐进搜索”状态,并等待你输入搜索字串。按 <Return> 可以结束搜索。

>> 输入 C-s 开始一个搜索。注意敲慢一点,一次输入一个字符。
   慢慢输入“ccusor”这个词,每敲一个字都停顿一下并观察光标。
   现在你应该已曾经找到“ccusor”这个词了。
>> 再按一次 C-s,搜索下一个“ccusor”出现的位置。
>> 现在按四次 <DEL> ,看看光标是如何移动的。
>> 敲 <Return> 结束搜索。

看仔细了么?在一次渐进式搜索中,Emacs 会尝试跳到搜索目标出现的位置。要
跳到下一个命中位置,就再按一次 C-s。如果找不到目标,Emacs 会发出“哔”
的一声,告诉你搜索失败。在整个过程中,都可以用 C-g 来终止搜索。【你会发
现 C-g 会让光标回到搜索开始的位置,而 <Return> 则让光标留在搜索结果上,
这是很有用的功能。】

在渐进式搜索中,按 <DEL> 会“撤回”到最近一次搜索的命中位置。如果之前没
有一个命中, <DEL> 会抹去搜索字符串中的最后一个字符。比如你已经输入了
“c”,光标就停在“c”第一次出现的位置,再输入“u”,光标停在“cu”第一次出现 
的位置,这时再按 <DEL> ,“u”就从搜索字串中消失了,然后光标会回到“c”第
一次出现的位置。


* 多窗格(MULTIPLE WINDOWS)
----------------------------

> 移动光标到这一行,然后输入 C-l C-l。

>> 现在输入 C-x 2,它会将屏幕划分成两个窗格。
   这两个窗格里显示的都是本篇快速指南,而光标则停留在上方的窗格里。

>> 试试用 C-M-v 滚动下方的窗格。
   (如果你并没有 META 键,用 ESC C-v 也可以。)
   【向上滚动是 C-M-S-v,也就是同时按住 CONTROL、META 和 SHIFT 再按 v】

>> 输入 C-x o(“o”指的是“其它(other)”),
   将光标转移到下方的窗格。

>> 在下方的窗格中,用 C-v 和 M-v 来滚动。
   同时继续在上方的窗格里阅读这些指导。


C-M-v 是一个 CONTROL-META 组合键。如果你有 META (或 Alt)键的话,可以
同时按住CONTROL 和 META 键并输入 v。CONTROL 和 META 键先按哪个都可以,
因为它们只是用来“修饰(modify)”你输入的字符的。


>> (在上方窗格里)输入 C-x 1 关掉下方窗格。

(如果你在下方的窗格里输入 C-x 1,那么就会关掉上方的窗格。你可以把这个
命令看成是“只保留一个窗格”――就是我们正在编辑的这个。)

不同的窗格可以显示不同的缓冲区。如果你在一个窗格里用 C-x C-f 打开了一个
文件,另一个窗格并不会发生什么变化。任何一个窗格里都可以用来打开文件。


* 多窗口(MULTIPLE FRAMES)
------------------


* 更多精彩(MORE FEATURES)
---------------------------

想学习更多的使用技巧,Emacs 使用手册(manual)值得一读。你可以读纸版的
书,也可以在 Emacs 中读(可以从 Help 菜单进入或者按 C-h r)。提两个你
可能会很感兴趣的功能吧,一个是可以帮你少敲键盘的 completion(自动补全),
另一个是方便文件处理的 dired(目录编辑)。

Completion 可以替你节省不必要的键盘输入。比如说你想切换到 *Message* 缓
冲区,你就可以用 C-x b *M<Tab> 来完成。只要 Emacs 能够根据你已经输入的
文字确定你想要输入的内容,它就会自动帮你补齐。Completion 也可用于命令
名和文件名。有关 Completion 的详细说明可以在 Emacs Info 中的
“Completion”一节里找到。

Dired 能够在一个缓冲区里列出一个目录下的所有文件(可以选择是否也列出子
目录),然后你可以在这个文件列表上完成对文件的移动、访问、重命名或删除
等等操作。Dired 也在 Emacs 使用手册中有详细介绍,参见“Dired”一节。


下面列出主要术语的译词对照,并给出注释说明:

    command               命令
    cursor                光标
    scrolling             滚动
    numeric argument      数字参数
    window                窗格 [1]
    insert                插入
    delete                删除 [2]
    kill                  移除 [2]
    yank                  召回 [2]
    undo                  撤销
    file                  文件
    buffer                缓冲区
    minibuffer            小缓冲
    echo area             回显区
    mode line             状态栏
    search                搜索
    incremental search    渐进式搜索 [3]


20180313 ln 792
here


M-x replace-string ENTER search-string ENTER 替换
 


用 <Return> 结束文件名的输入
Return 这里是什么意思呢  回车么 


Alt + x
输入: linum-mode



emacs中如何跳到指定行

M-x goto-line 然后回车   <line_number> 

以在.emacs文件中定制一下(添加以下一行): 

(define-key ctl-x-map "l" 'goto-line) 


然后每次在emacs中按C-x再按l,输入指定的行号就可以了。

http://blog.csdn.net/grey_csdn/article/details/78905862
http://bbs.csdn.net/topics/60028785

package ELPA中国镜像


在配置文件中加入 
(setq package-archives '(("gnu" . "http://mirrors.ustc.edu.cn/elpa/gnu/")
                         ("melpa" . "http://mirrors.ustc.edu.cn/elpa/melpa/")
                         ("melpa-stable" . "http://mirrors.ustc.edu.cn/elpa/melpa-stable/")
                         ("org" . "http://mirrors.ustc.edu.cn/elpa/org/")))


也可以使用命令M-x list-packages获取插件列表,然后 使用C-s找到 软件名    i  - 选择要安装的包  例如叫 elpy 来安装


;内置的package管理,emacs24以上的版本有用
(require 'package)
;;将melpa仓库地址加入到package-archives这个列表变量里面
(add-to-list 'package-archives
    '("melpa" . "http://melpa.org/packages/") t)
;;这个是国内一个elpa仓库镜像,速度更快一些,你懂得
(add-to-list 'package-archives 
    '("popkit" . "http://elpa.popkit.org/packages/") t)
;;初始化package
(package-initialize)
;;更新仓库里面的package
(when (not package-archive-contents)
  (package-refresh-contents))

常用操作

#软件包安装
 Alt+x list-packages

可以先用C-s向下搜索  autopair
找到后 回来后 按i再按x就下载到本地了。然后打开emacs的配置文件init.el,在里面添加下面:

常用快捷键
i  - 选择要安装的包
d - 选择要删除的包
U - 升级已安装的包
x  - 执行操作
d - 选择要删除的包

https://mirrors.ustc.edu.cn/help/elpa.html

https://mirror.tuna.tsinghua.edu.cn/help/elpa/ emacs完全补完计划(三)——package的引入和管理

emacs-gtk

让选中可以高亮
自己打开随便看下 居然就看到了 不错 
emacs-gtk  --> Options --> customize emacs   --> custom themes   -->   个人感觉 adwaita 还不错 
save theme settings

emacs 学习

https://link.zhihu.com/?target=https%3A//github.com/emacs-tw/awesome-emacs 0.我雖然是看man過來的,但是這份名單,如果早知道應該會輕鬆很多。--- update1.從starter-kit入手把,爬梯子出去看redguardtoo的獨立博客,你會發現吊爆了。當然他的一年的文章一定要看。而且可以git下來,revert到剛開始的commit,一個個commit看。2. 還有就是各種折騰。各種動手把,拒絕其他一切的編輯器。3.改鍵位,乾脆去買了HHKB也可以,如你很土豪。4.看書呀,學elisp,這個階段你要看田春冰河的,李殺的博客了。學着寫個插件把。PS.學習emacs會改變你編程思維的,包括你軟件開發的工作流。lisp系各種優雅.上面編號不分先後。

怎样学习 Emacs



Emacs学习笔记(1):初学者的学习计划

Emacs学习笔记(7):简单的配置

Emacs学习笔记(2): 初识Emacs

emacs 学习标签


我用Emacs干什么?为什么用Emacs?

作为 CEO 使用 Emacs 的两年经验之谈

music

install

M-x package-install RET emms RET

https://elpa.gnu.org/packages/emms.html

Usage


;;可以设置快捷键吧 
;;加了这个配置后 随便玩就可以播放了,不然不行 
(require 'emms-setup)
(emms-all)
(emms-default-players)

交互使用

使用 emms-playlist-mode-go 命令即可进入正在播放的播放列表的 buffer 。 在这里可以方便地控制播放上一首、下一首、随机的某一首歌等。通过 ? 可以 描述当前 mode ,并得到一份详细的可用命令列表。

我通常使用 emms-play-find 或者 emms-play-directory-tree 来打开一个播放 列表,然后用 d 删除不想要的曲目,并 C-x C-s 将其保存起来。

EMMS 还提供了打分机制。并可以设置最低分数,如果分数低于最低分数将不会 被播放。要是能像 Dired 或者 Mew 的 summary-mode 那样能够方便地贴标签并 进行批量操作就更舒服了!

Basic Commands

;;Basic Commands
 emms-stop  也可以直接用 s

官方文档最好了啦

https://www.gnu.org/software/emms/manual/#Quickstart-Guide

The Emacs Multimedia System

https://www.emacswiki.org/emacs/EMMS

用Emacs看电影

The Emacs Multimedia System

在Emacs中播放音乐有哪些选项

参考

Emacs快捷键的总结

走近emacs 201801

Emacs常用命令快速参考

学习 Emacs 的基础知识

一年成为 Emacs 高手

http://emacser.com/

Emacs - 代码编辑神器之一


Emacs 入门 https://i.linuxtoy.org/docs/guide/ch25.html

emacswiki

Emacs,最强编辑器,没有之一

Emacs org mode https://i.linuxtoy.org/docs/guide/ch32s03.html#id3155525


https://www.emacswiki.org/emacs?interface=zh-cn

https://www.cnblogs.com/blfshiye/p/4566900.html


https://www.gnu.org/software/emacs/manual/html_node/efaq/Installing-Emacs.html

A Guided Tour of Emacs

Emacs - the Best Python Editor https://realpython.com/blog/python/emacs-the-best-python-editor/

Emacs:最好的Python编辑器 http://codingpy.com/article/emacs-the-best-python-editor/

Emacs (简体中文)

How to Install Packages Using ELPA, MELPA

emacs python 配置

皈依Emacs

【积水成渊-逐步定制自己的Emacs神器】3:为Emacs安装扩展

wiki

Wiki编辑器, 通过 Yaoddmuse 几乎能支持所有的Wiki格式, 实时语法高亮, 你不用担心保存以后确发现格式错了

https://www.emacswiki.org/emacs/Yaoddmuse

用Emacs Wiki帮你写Blog

2019

学习Emacs系列教程(一):基本使用

emacs完全补完计划(一)——嘴炮和入门

emacs 自带的简单入门教程(TUTORIAL)

Org-mode 简明手册

小灰笔记 emacs

从零开始——Emacs 安装配置使用教程 2015

编辑器终结者:vim与emacs双剑合璧

Emacs有什么优点,用Emacs写程序真的比IDE更方便吗

2021

“臃肿”的Emacs为什么性能最优

Emacs大牛李杀的快捷键优化技巧

参考 for python

Emacs:最好的Python编辑器

参考 for c

Emacs 中 C/C++ 编程基本环境配置

将Emacs配置成一个C/C++的IDE编程环境

Emacs C、C++、Python 编程的简单配置


Emacs安装配置yasnippet

yasnippet

我的Emacs折腾经验谈(四) 也谈Yasnippet

https://www.emacswiki.org/emacs/Yasnippet