Emacs使用技巧。

Emacs使用技巧。

Posted by inheader on December 28, 2018

1.安装

# 安装Emacs
# yum install emacs 

2. 窗口和文件操作

Emacs的按键操作,约定C代表Ctrl键,M代表Alt键,RET表示Enter键。C-x对应字符扩展,比如C-x C-b表示列出所有buffer;M-x对应命令扩展,比如M-x replace-string(可以用TAB补全)表示字符替换。

  • C-x 2C-x 3
  1. 将窗口分割成两个或者三个。
  2. C-x 1:只保留一个窗口。
  3. C-x n:开n个窗口
  • C-x C-f
  1. 读入文件,如果没有该文件,则自动创建这个文件,这个命令在mini buffer中呼出路径。
  2. 对于Emacs minibuffer的路径,在Emacs中可以使用~/表示当前登录的用户,可以替代/home/usr。同时,可以在当前路径下直接输入/home//median/TOOL或者/home//~/进入需要的目录,因为Emacs会自动忽略//或者/~之前的内容(不能在终端使用它)。
  3. 输入/su:root@localhost Mypassword:用以打开root权限文件。
  4. M-x ffap(find-file-at-point):如果光标停留在一个路径上,可以直接打开这个路径对应目录的文件。
  5. 一个更加酷的命令是Ido模式(Interactively Do Things),可以实现智能化的交互。打开方式:M-x ido-mode
  • 补充Dired文件操作(Directory Editor)
  1. 在Dired buffer下,光标所在处+新建文件夹。
  2. fe或者RET在当前buffer下打开文件。o在另一个buffer中打开文件,并且光标跳转到另一个buffer。C-o在另一个buffer下打开文件,光标保留在Dired buffer中。v在新的buffer打开文件,只读权限。^在新的buffer打开上层目录的Dired buffer。i在Dired buffer下打开文件夹。g更新状态。
  3. m标记文件。%m标记文件名符合正则规则的文件。%g标记内容符合正则规则的文件。u删除当前光标所在文件的标记。M-DEL删除所有标记的文件。
  4. 以下操作针对标记的文件;如果没有标记的文件,将操作光标所在处文件。C拷贝文件,R移动或者重命名文件,H创建硬链接,C创建软链接,M更改文件执行权限(比如777),D删除文件。
  5. d标记要删除的文件。标记所有Emacs备份文件。#标记所有自动保存文件。%d标记文件名符合正则表达式的文件,以供删除。x执行删除操作。
  • C-x C-s
  1. 保存文件,经常使用这个命令存盘,避免文件丢失。
  2. C-x s:把所有的buffer存盘。
  • C-x C-w
  1. 文件另存为。
  2. M-x recover Myfilename 之后输入文件名和yes:用来恢复自动保存的文件。Emacs自动保存的文件一般以#Myfilename#来命名。
  • C-x C-b
  1. 列出所有buffer。
  2. C-x b:回到某一个buffer,需要在minibuffer中输入需要跳转的buffer名字。
  3. C-x o(other):在不同的buffer间切换。
  4. C-x k:kill一个buffer。
  • ibuffer模式:
  1. ibuffer模式是C-x C-b的功能更加强大版本。可以在~/.emacs文件中写入(global-set-key (kbd "C-x C-b") 'ibuffer),将原始的模式替换成ibuffer形式。
  2. /m(mode):查找符合某个模式的buffer。
  3. /g(group):对某个类型的buffer进行分组命名。光标停留在组名上,RET展开和压缩buffer。TAB向下一个组跳转。M-p向上一个组跳转。//返回列出所有buffer的状态。/\清除所有分类。
  4. g:更新buffer列表状态。比如,当一个buffer被修改后(但未保存),会有星号标记。
  5. 各种操作:o或者RET打开光标所在处buffer;=比较当前buffer和已保存文件的区别,,对buffer进行各种排序的切换;q退出ibuffer。
  • 寄存器(Registers)
  1. Emacs的寄存器相关命令使用C-x r作为前缀,可以使用C-x r C-h查看帮助。所谓“寄存器”是指Emacs可以保存某个窗口(windows)状态、框架(frame,即多个打开的Emacs窗口)状态或者文字内容。
  2. C-x r w REG(window-configuration-to-register):寄存当前窗口为“REG”,“REG”即设定的寄存器名称,可以是数字1、2、3,也可以是字母a、B等。C-x r f REG(frame-configuration-to-register):寄存当前框架,这些框架不能关闭。C-x r SPC REG(point-to-register):寄存某个光标位置。C-x r j REG(jump-to-register):调转到对应的寄存器(框架、窗口或者位置信息)。
  3. C-x r s REG(copy-to-register):寄存某个区域。C-x r r REG:寄存某个选中的区域。C-x r i REG(insert-register):召回(即粘贴)某个区域。
  • C-g
  1. 终止一条命令,通常是写了一半未完成。
  2. C-x u:撤销上一步操作。
  3. C-/(Emacs文档上是C-_):撤销命令,持续按键可以执行多次撤销。比较有意思的是M-/对应的是自动不全,可以连续按键已获得多个候选补全。
  • C-x C-c
  1. 退出close Emacs。
  2. C-z:跳出Emacs窗口,但不关闭。

3. 光标移动

  • C-v
  1. 向前移动一屏,可以用于清屏(右手C-,左手v)。
  2. C-u 8 C-v:屏幕向下滚动8行。
  3. M-v:向后移动一屏(右手M-,左手v)。
  4. C-u 8 M-v:屏幕向上滚动8行。
  5. C-l:重绘屏幕,并将光标所在行置于屏幕的中央。如果连续按键盘,光标会带动屏幕在上、中、下跳动。M-r光标在该屏幕
  6. C-vM-v两个命令中的C-和V-用右手操作,正好C-在更靠右,表示向前;而M-偏左,表示向后。
  7. M-g:跳转到第n行
  • C-p
  1. 移动到上(previous)一行。C-n:移动到下(next)一行。
  2. M-p:搜索先前命令。M-n:搜索先前命令(后翻)。M-pM-n可以用于Emacs-ESS R界面的上翻下翻。
  3. C-a:移动到行首(ahead)。C-e:移动到行尾(end)。
  4. M-a:移动到句首。M-e:移动到句尾。持续按M-aM-e会跳行,C-aC-e不会。M-aM-e会跳转到语义相关的句首或句尾。
  5. M-<或者C-x [:移动到文档最开头。M->或者C-x ]:移动到文档最末尾。
  • C-f
  1. 右移(forward)一个字符。
  2. C-b:左移(back)一个字符。
  3. M-f:右移一个单词。以单词为单位移动,更快并且准确。
  4. M-b:左移一个单词。
  5. 左手控制C-和M-。以上操作可以配合C-u Number 作定量Number的移动,如C-u 10 C-b表示左移10个字符; 同时C-u 也可以用作插入同样字符,比如C-u 10 i将插入iiiiiiiiii。
  • C-M-f
  1. 跳转到下一个匹配的括号,C-M-b:跳转到上一个匹配括号。
  2. C-M-a:跳到函数头部,C-M-e:跳到函数的尾部。
  3. C-M-t:向前移动整个匹配括号的内容。C-M-k:删除匹配括号内容(光标停留在匹配括号处)。
  4. C-M-h:选中当前函数(光标停留在函数中的任意位置)。C-M-SPC:选中匹配括号包括的所有内容(光标停留在匹配括号处)。
  • C-M-v
  1. 在其他的buffer中向下滚动内容,光标依然停留到当前buffer。
  2. C-M-S-v:在其他的buffer中向上滚动内容。

4. 删除剪切复制粘贴

  • C-@(at):
  1. 标记起始为点(之后用C-fM-b等移动命令)。
  2. M-@:选择光标后的一个单词。
  3. C-x h(whole发音):将整个buffer都标记起来。
  • C-x C-x(exchange-point-and-mark):
  1. 快速选中上次选中标记的代码块。
  2. 连续按键,光标可以在选中的代码块头部和尾部跳转。因此,可以实现代码向前或或者向后继续高亮;与其他选中命令如C-M-SPC连用。
  3. C-u C-@:在C-y插入一段代码后,光标返回插入前的位置。同时,这个命令也可以跳转光标到上一个标记的地方。
  • DEL
  1. 删除光标前一个字符。
  2. M-DEL:删除光标前一个单词。删除的内容自动放入粘贴板。
  3. C-d(delete):删除光标后一个字符。
  4. M-d:删除光标后一单词。
  5. C-S-DEL:删除一整行。
  • C-k(kill):
  1. 从光标处剪切至行尾。
  2. M-k:从光标处剪切至句尾,用于删除一个行或句子。
  3. 配合C-u使用,C-k只能删除指定的行数,而M-k可以删除句子。所以,M-k可以删除句子间的空白行。
  • M-w(write):
  1. 标记选定范围后复制。
  2. C-w:标记选定范围后剪切。
  • C-y(yank):
  1. 粘贴。
  2. 连续M-y可以召回之前的剪切板中的内容。
  3. C-j:插入空白行。

5. 查找和替换

  • C-s
  1. 搜索(search)。
  2. C-r:反向搜索(research)。
  3. C-s C-w:自动搜索光标到临近的第一个词结尾,可以反复按C-w以扩充选中范围。
  4. C-u C-s:正则匹配选择。
  • Occur模式:
  1. M-s o:打开occur窗口,支持正则搜索的位置信息提纲式显示。在原始文本buffer,可以使用M-g nM-g p进行上下跳转到符合区域。
  2. 在Occur buffer下使用C-pC-n进行上下跳转。<>跳转到Occur头部和尾部。
  3. 在Occur buffer下使用o跳转到对应文本位置,并且光标跳转到文本buffer。C-o跳转到对应文本位置,光标继续停留在Occur buffer。
  4. 在Occur buffer下使用e,启动在文本匹配位置的编辑。编辑完成后使用C-c C-c退出编辑模式。使用g更新搜索。
  • 正则搜索
  1. M-x rgrep进入正则搜索,可以搜索多个文件,搜索结果会在一个新的buffer中显示搜索结果。在原始文本buffer,可以使用M-g nM-g p进行上下跳转到符合区域。
  2. 在新打开的搜索buffer中,使用TABS-TAB上下移动,但不显示对应搜索的文本。使用pn上下移动,同时对应搜索内容。使用{}移动到上个文件和下个文件。
  3. 使用C-vM-v进行上下翻页。
  4. 使用g更新搜索。使用q退出。
  • M-x replace-string RET stringA RET newstring RET
  1. 将buffer中所有的A替换成B。
  2. M-x replace-regexp RET regexp RET newstring RET:正则匹配。

6. 代码整理

  • C-M-\:整理(indent)选定代码块后。
  • M-x hs-minor-mode
  1. 进入折叠代码模式,以下输入在函数的前大括号处。
  2. C-c @ C-h:隐藏(hide)代码。
  3. C-c @ C-s:显示(show)代码。
  4. C-c @ C-c:隐藏/显示代码的切换。
  • M+x comment-region
  1. 注释选中的代码。
  2. M+x uncomment-region:反注释选中代码。

7. 宏(Macro)##

Emacs主持宏,用于记录操作的动作。

  • C-x (
  1. 或者f3开始录入宏。
  2. C-x )或者f4结束宏录入。
  3. C-x e或者f4放映宏。使用C-u 0 f4,对整个文件执行宏。使用C-x C-k r(apply-macro-to-region-lines)对选中区域执行宏。

8. Emacs与系统交互

  • M-x !

执行单条的shell命令。

M-x shell RET:进入系统交互界面。

9. Emacs帮助信息

  • C-h
  1. C-h m(mode):返回当前所有Emacs主要和次要模式(mode)的快捷键。
  2. C-h c:解释某个命令,后跟命令比如C-x C-f
  3. 如果需要查找某个命令,尽可能输入该命令,之后跟随C-h查询帮助信息。
  4. C-h i:列出Emacs的所有帮助信息。
  5. C-h r:Emacs帮助文档。
  • M-x man:之后跟随UNIX的命令,比如ls,查询该命令帮助文档。