学习Emacs系列教程 :目录
学习Emacs系列教程(一):基本使用
前言的前言:本人也是初学Emacs,之前对Vim也只接触了一点,所以也谈不上对哪个更喜欢,也分不出哪个更好。写这个教程的目的一是方便自己更好的学习Emacs,
二是没事找事。如果有专家路过还望多指点。前言:大名鼎鼎的Emacs,传说中程序员的终极武器,已经跨越了文本编辑器,IDE的境界,可以替代操作系统GUI的东东。怀着一种膜拜的心情我决定开始学习Emacs,期望有一天也能成为一代Emacs大侠。
参考书目:
1. GNU Emacs Manual (Emacs 官网有下)
2. O'Relly Learning GNU Emacs, 3rd Edition
一、Emacs的安装使用
学习软件的第一件事当然是把它下下来, http://ftp.gnu.org/pub/gnu/emacs/windows/emacs-23.1-bin-i386.zip 目前最新版23.1,这个版本号够吓人的,Opera的10.0还不及别人的一半。本人不幸,使用的是Windows版本。
安装过程异常简单,直接解压就行,但路径中不能包含空格,所以就表往Program Files文件夹下面丢了,我是直接放在根目录的,找起来也方便。运行bin目录下的addpm.exe可以添加开始菜单快捷方式。也可以直接运行runemacs.exe 来启动Emacs。
卸载也很方便,Emacs不会对系统写任何垃圾东东,直接删除文件夹即可卸载,还有你的快捷方式。
启动Emacs后的界面如下:
echo area是你输入命令和显示消息的地方。
在mode line中第一个字符表示字符集,c代表chinese-gbk,后面那个 \ 符号表示换行类型,\是指DOS的CRLF换行,另外还有Unix的LF换行和Mac的CR换行。然后一个字符,表示打开的文件是否可写(先称为文件便于理解,实际上是buffer),%表示只读,- 和 * 表示可写。再一个字符表示文件是否已写,% 或 - 表示还没动,*表示已经更改。这两个字符组合起来有四个状态。
符号 | 表示 |
%% | 只读,未更改 |
-- | 可写,未更改 |
** | 可写,已更改 |
%* | 只读,已更改 |
如果是第一次使用,点击Emacs Tutorial,里面也有Emacs的一些基本介绍,而且是中文。
二、Emacs按键
Vim 把控制和编辑分成了两个模式,单独操作,互不影响。而Emacs是同时进行编辑和控制,只不过控制命令需要使用控制键。
Emacs的控制键就三个Control,Shift和 Meta,Control 和 Shift 键盘上都有,Meta 在美式键盘中就是Alt,在苹果键盘上是那个很花的四个圈的键,如果键盘上没有Alt (这个要某些欧洲人才会遇到)可以使用Esc 代替,另外Esc 不想Alt 通常当组合键用,它要单独按一下,再按另外的。
以后控制命令就这样表示:
C-f Ctrl+f
C-M-f Ctrl+Alt+f
C-_ Ctrl+Shift+-
Emacs中,这些组合键其实是一些函数的快捷方式,比如C-n 是next-line的快捷方式。我们除了使用组合键意外,还可以直接调用函数。
按下M-x,然后输入函数名就可以调用函数了。
三、进入退出Emacs
进入前面已经说了,现在说怎么退出。
最直接的办法,点右上角的叉,当然这个没什么技术含量。
比较文明的方法,C-x C-c ,如果当前文件已经修改会问你是否保存。
野蛮点的方法,调用函数kill-emacs,即M-x kill-emacs,直接退出,不管是否修改。
不过直接退出后,Emacs会在相同目录下保留一个以#号开头结尾的相同文件名文件,下次启动可以使用M-x recover-file来恢复。如果是多次保存后,还会有个以~结尾的文件,保存了上次信息。
教程的第一部分就写到这儿,虽然没有太多实际的东西,总算开了个头吧。
学习Emacs系列教程(二):导航
上回开了个头,简单的介绍了Emacs的一些基本常识,这回继续说基本常识,怎么移动你的光标。可能有人会说,这上下左右键不是很好用吗,还用你来讲。呶,Emacs的强大在于你能够只使用键盘左边那堆键来完成任何事情(不包括顶上的ESC和Function),这也是Emacs的设计宗旨。
为了试验这些按键,大家在进入Emacs时选择页面中间的Emacs Tutorial,这里面可以随便乱按不用担心出什么岔子。
一、基本导航
看下面这张图片:
在按C-n 时,如果越过了页尾,不像一般Windows编辑器是往下滚一行,而是往下滚半夜,当前光标会置于页面中间。C-p 也是一样的。
另外两个使用较多的是 C-v 往下翻页, M-v 往上翻页。呃,还有一个 C-l 就是把当前行提到页面中间,感觉Emacs对页面中似乎情有独钟啊。
二、中级导航
按字符移的上节说了,然后说按单词移动:
M-f 向前移动一个单词,Emacs理解的中文单词是两个标点符号之间的东西,所以中文就是移到下一个标点符号的位置。往回是 M-b ,向后移动一个单词。
C-a 移动到行首, C-e 移动到行尾。
M-a 移动到句首, M-e 移动到句尾,在中文中一般就是跑到句号的位置,这里我不得不说一下,现在很多年轻人写文章有一逗到底的习惯,就只在文章最后加个句号,如果用Emacs来看你的文章,一个M-e 啥都不用干了。作为一个有一定文学素养的人,在此我严厉反对这种写文章的作风,不和谐。
M-} 移动到下一段, M-{ 移动到上一段。
还有两个跑的更快的导航, M-< 移到文档首,这里要注意是小于符号<,不是逗号, ,所以我们是按Alt + Shift + , 切记。移到文档尾是 M->。
C-x [ 和 C-x ] ,分别是往上一页和往下一页。这里页是由分页符控制的,在Emacs Tutorial 中是没有分页符的,所有这两个键会跑到文档头和文档尾去。
例图:
三。高级导航
可以这么来看基本导航是普通人用的,中级导航是高手采用的,高级导航是砖家、叫兽用的。
M-r 移动到页面中间行首位置,holly shit,又是页面中间,真XX阴魂不散。
M-x goto-char (n),这个比较复杂,先按M-x,然后空格输goto-char回车,另外Emacs有Tab键补全功能,大家可以试试,如果有多个选项会有提示,最后输入一个整数。这个东西会移动到从头数第n个字符的位置,我估计不会有人变态到能记住每个字是第几个字符。
M-g M-g [n],按两次M-g,不用回车,提示输入一个数字,移动到指定行n,两个M-g,也可以输 M-g g 。
还有一个比较罕见的, C-x C-n, 这个是设置当前列为目标列。这是什么意思呢,本来我们按C-n 和C-p 时,光标会往下或往上移一行,而列的位置就是当前光标列的位置,除非下一行列没那么多(就是字符没那么多),光标会到距当前列最近的列。而我们可以用这个组合键重新设一个目标列,这样在按C-n 和C-p 时,光标会跑到我们设的目标列上。如果你不幸按了,而且又不习惯,可以使用 C-u C-x C-n 来取消目标列设置。补充一点,这两个命令都是禁用命令,是Emacs考虑大家多半不会用,而且比较怪的命令,所以通常就禁用了,你不小心调出时会给出提示问你是否需要继续。就像这个样子:
最后还有两个重复命令:
M-n , n是数字,意思是重复下个命令n次,比如M-3 C-f,就是向前移三个字符。
C-u n ,n还是数字,也是重复下个命令n次。 如果省略n,就是4次。按两次C-u,就是重复16次。
小结:
按键 |
命令 |
作用 |
---|---|---|
C-f |
forward-char |
向前一个字符 |
C-b |
backward-char |
向后一个字符 |
C-p |
previous-line |
上移一行 |
C-n |
next-line |
下移一行 |
M-f |
forward-word |
向前一个单词 |
M-b |
backward-word |
向后一个单词 |
C-a |
beginning-of-line |
移到行首 |
C-e |
end-of-line |
移到行尾 |
M-e |
forward-sentence |
移到句首 |
M-a |
backward-sentence |
移到句尾 |
M-} |
forward-paragraph |
下移一段 |
M-{ |
backward-paragraph |
上移一段 |
C-v |
scroll-up |
下移一屏 |
M-v |
scroll-down |
上移一屏 |
C-x ] |
forward-page |
下移一页 |
C-x [ |
backward-page |
上移一页 |
M-< |
beginning-of-buffer |
移到文档头 |
M-> |
end-of-buffer |
移到文档尾 |
M-g g n |
goto-line |
移到第n行 |
(none) |