Emacs的门槛低,入门容易,但要熟练使用却很难。虽然在用,但总是没系统没计划,所以用了几年还总是原地踏步。要熟练Emacs应该没那么难,主要就是忘掉老习惯培养新习惯,所以决定每月从Emacs的manual中翻译出一些,慢慢养成Emacs的键盘习惯。
第一个月内容多些,但很多都已经在用了,再系统的整理一下并深入点了解,应该对提高工作效率有好处。
一、光标移动
C类命令
用于以字符、行、列等物理单位度量的光标移动
- C-f:向右(前,forward)移动一字符
- C-b:向左(后,backward)移动一字符
- C-p:移动到上一行(previous)
- C-n:移动到下一行(next)
- C-a:到行首
- C-e:到行尾
M类命令
用于以词、句、段落等文本单位度量的光标移动
- M-f:向前(forward)移动一词
- M-b:向后(backward)移动一词
- M-a:到句首
- M-e:到句尾
- M-{:到上一段落 (注意大括号符号要用SHIFT键)
- M-}:到下一段落
其他命令
- M-r:循环使用可以把光标依次放在窗口中间、最上面和最下面一行的左边;窗口内文本不动。
- M-<:卷屏到文档开头 (注意要用SHIFT键)
- M->:卷屏到文档最后
- C-v:相当于PAGEDOWN,向下翻一屏,但与前一屏的内容留两行
- M-v:相当于PAGEUP,向上翻一屏,但与前一屏的内容留两行
- M-x-goto-char n:光标定位到字符n的位置,n是从文档开始算起的字符数
- M-g M-g n:光标定位到第n行
二、删除、撤销(恢复)和重复操作
字符、词和行删除
- C-d:删除光标后一个字符,相当于DELETE键
- C-k:删除光标到行尾的字符(不包括换行符);如果光标位于行尾则只删除换行符
- M-d:删除从光标到下一个词的开始间的字符(删除词)
- M-DEL:删除从光标到上一个词结束间的字符
空格和空行删除
- M-\:删除光标前后所有空格和制表符
- M-SPC:删除光标前后空格和制表符到仅剩一个
- C-x C-o:删除光标前后的空行到仅余1行
- M-^:删除行缩进、连接两行文本(从后向前合并)
撤销操作
- C-/:撤销前一个命令的操作,不能撤销仅有光标移动的动作(或者用C-x C-u)
重复操作
- C-x z:该命令简单重复前面一次操作(不管是鼠标点击还是键盘输入),连续几个z就重复几次,直到输入的不是z或者鼠标点击或者C-g取消
- C-u n:重复随后的命令n次
三、文本块标记(选择)
任意位置间标记
- C-@:在光标处设置标记,光标位置不动。
- M-@:在光标处设置标记,光标位置不动,光标后的一个词被加亮
- C-x C-x:在光标处设置标记,并把光标移到上一次设置标记的位置,两个标记之间的文本被选择。(可连续使用在标记文本的前后切换光标)
选择和标记一行或多行:
C-A, C-E, C-N 或 C-P:在当前位置设置标记点,光标移动和C-a, C-e, C-n 或 C-p相同,加亮标记点和光标之间的文本。搜狗输入法会拦截C-N命令,在输入法设置中去掉即可。
整块标记:
- M-h:选择光标所在段落(段落间一般以空行间隔),光标移到段首,标记点在段末。
- C-x C-p:选择当前页面(屏),光标移到屏首,标记点在屏尾。
- C-x h:选择整个文档(buffer),光标移到文档起始点,标记点在文档最后。
使用体会:(1)标记和选择在Emacs被合并成了一个概念,而颜色加亮倒成了一种表面形式:不管有没有颜色加亮,标记点和光标之间的内容都已经被选择;(2)多用、善用 C-x C-x 命令
四、拷贝、剪切和粘贴/召回
- C-w:剪切(还不习惯Emacs的kill概念)
- M-w:复制。如果你开着QQ,复制的键盘命令就变成了M-W
- C-y:粘贴。Yanking,像招魂一样,有意思。
使用体会:在其他软件中,一般被选择(颜色加亮)的内容才称为块,才能进行拷贝和剪切。但Emacs只要设置了标记点,就可以对光标和标记点间的内容进行复制、剪切等操作;如果是复制操作,Emacs会在光标所在位置和标记点之间切换一下光标,可以让用户进行确认。
五、搜索与替换
相关命令很多,但如果嫌麻烦,记住两个即可:
- M-%:即M-S-5,询问替换
- C-M-%:正则表达式询问替换
- 以上两个命令回车后按提示分别输入搜索和替换字符串,替换用空格键,如果不替换(仅搜索)用n(下一个)或p(上一个)。
其他搜索和替换命令:
- C-s:向前搜索(增量,输入即开始搜索)
- C-r:向后搜索(增量,…)
- M-x search-forward:向前搜索
- M-x search-backward:向后搜索
- M-x search-forward-regexp:向前正则表达式搜索
- M-x search-backward-regexp:向后正则表达式搜索
- M-x replace-string:替换
- M-x replace-regexp:正则表达式替换