emacs学习笔记
hanlray@gmail.comReversion: 0.95 Date:2006/08/12
1. C-h
任何命令都可以忘掉,C-h不能忘,因为通过它你可以找到其他所有的命令,不知道C-h怎么用?C-h C-h 这里第二个C-h是个help option,常用的option还有:
- a 列出包含给定字符串的所有命令。这里的命令实际上是函数名,因为emacs中的所用功能都是通过函数来实现的,把这些功能(函数)绑定到键盘上,就叫做key binding,这种设计使我们可以很容易地把某项功能绑定到我们喜好的按键上。
- b 显示所有的key bindings
- C 显示指定编码的信息,如果不带参数则显示当前和编码有关的设置
- r info形式的emacs guide,最好的参考资料
2. user option和变量
两者都是perl变量,用来定制emacs环境,区别在于M-x set-variable只能设置user option变量,要设置任何变量,在*scratch*buffer输入(setq variable-name value),用C-j执行;用C-h v VAR则可以查看任何变量的值
3. buffer
- 查看buffer列表 C-x C-b
- 切换buffer C-x b
- 关闭buffer C-x k
- 保存当前的buffer到它关联的文件 C-x C-s
4. 编码相关
emacs使用language environment来进行编码相关的设置。一个language environment为emcas中编码相关的变量设置默认值,比较重要的设置项有:
- 优先编码列表 当读入一个文件时,以该列表的顺序来识别文件的编码,用prefer-coding-system在该列表首插入一个编码
- default-buffer-file-coding-system 新建文件的默认编码
(if (equal current-language-environment "UTF-8") (prefer-coding-system 'gb2312) (prefer-coding-system 'Utf-8) ) ) ) (add-hook 'set-language-environment-hook 'utf8gbk) (set-lanaguage-environment 'UTF-8)
在UTF-8这个language environment下,emacs并不能自动识别gbk编码的文件,因为其缺省设置的优先编码列表没有gbk,上面的lisp对UTF-8 language environment做了定制,之所以又加了一次utf-8编码是因为希望在UTF-8这个language environment下首选的编码是utf-8。
5. registers
emacs用来存放文本、矩形、位置或其他内容的地方,供以后使用。每个register都有一个名字,为一个英文字母。 C-x r s R 保存region的文本到register R C-x r i R 从register R中插入文本
- deleting, killing and yanking killing会把删掉的文本放到kill ring中,随后可以用yanking来把它copy到别处,类似win下的copy/paste,deleting则不把删掉的文本放到kill ring中,因此也无法copy删掉的文本。
- C-k killing从当前光标到行尾的文本,如果是空行则包括其换行符,在行首两次C-k就删掉该行
- C-w Killing region
- C-y yanking上次killing的文本
6. undo and redo
用C-x u进行undo,用什么来redo呢?不幸的是,emacs没有redo的命令,它是用undo来实现redo的:任意一个非undo的命令将会打断undo命令的顺序,从那时起,以前的undo命令就成为了普通的改变文本的命令,这样当再使用undo命令时将会undo以前undo命令的改变,于是就redo了
7. region
很多emacs命令操作buffer中任意一段连续的区域,怎么指定这段区域呢?在这个区域的一端设置一个mark,再移动光标到另一端,位于光标和mark之间的内容就是选择的区域。用C-<SPC>来设置mark。
- Kill region C-w
- save region到一个register C-x r s
- 设置整个buffer为region C-x h
8. indentation
在多数mode下,Tab键是被绑定到indent相关的命令上的,要插入tab字符,需要用C-q tab转义一下。
- 对region中的每一行indent C-M-/
- <RET>并<TAB> C-j
9. 字体
emacs是针对charset来配置字体的,对要显示的coding system中的字符,emacs把它们归到这些charset中,然后使用在这些charset上指定的字体来显示它们。这样的一个字体配置在emacs里叫做fontset,如:
Emacs.Fontset-0:-*-courier-medium-r-normal-*-18-*-*-*-*-*-fontset-courier,/ chinese-gb2312:-*-simsun-medium-r-*-*-18-*-*-*-p-*-iso10646-1,/ chinese-cns11643-5:-*-simsun-medium-r-*-*-18-*-*-*-p-*-iso10646-1,/ chinese-cns11643-6:-*-simsun-medium-r-*-*-18-*-*-*-p-*-iso10646-1,/ chinese-cns11643-7:-*-simsun-medium-r-*-*-18-*-*-*-p-*-iso10646-1,/ Emacs.font:fontset-courier
10. Move
- 以word为单位的前移/后移 M-b/M-f
- 以word为单位的前删/后删 M-Delback/M-d
- 移到行首/行尾 C-a/C-e
- 移到页首/页尾 M-a/M-e
- 移动到buffer首/尾 M-</M->
11. 常用命令
- 列出某个主题的帮助 C-h a
- 删除从当前光标到行尾/行首 C-k/C-u
- Undo/Redo C-x u/
- 在window间切换 C-x o(other)
- 翻页 C-v/M-v
- 退出 C-x C-c
- 启动emacs时不加载~/.emacs:-q
- 配合sudo打开文件 C-x C-f /sudo::/etc/emacs/
- 把一个文件的内容插入到当前位置 C-x i
- 在当前光标处插入一行 C-o
- 使光标所在文本滚动到离窗口顶部n行处 C-u n C-l
12. 插件/扩展
emacs是用lisp扩展的,M-x load-file用来执行任意一段lisp脚本,M-x load-library则从变量load-path定义的一个目录列表中寻找指定的文件并执行它,autoload函数把一个函数和一个lisp脚本相关联,当执行这个函数时,加载对应的脚本文件并执行,如: (autoload 'javascript-mode "javascript" nil t) 当执行javascript-mode函数时,load-library javacript,nil是该函数的描述,t表示该函数是interactive的,当以后用C-h f来查看该函数时,这些信息将得到体现。
- 如何在buffer中输入回车和换行 C-q C-m 输入回车(/r),这里C-q代表转义,C-m代表ascii的控制字符/r C-q C-j 输入换行(/n),C-j代表ascii的控制字符/n
13. key binding
(global-set-key [?/C-2] 'set-mark-command)
方括号中的是key sequence,后面的是要绑定到的command。对key sequence中的字符元素,用lisp的字符常量来表示:问号后跟该字符,用/C-表示控制字符;对key sequence中的symbo元素,直接写其名称,如f7
14. lisp
注释 以;;开头的行为注释