以下是自己使用emacs过程中感觉很有用的命令和一些变量设置,记下来作为备忘录。

光标移动命令、翻页命令、查找、替换等最基本的编辑命令在启动emacs后按下C-h t可以看到很详细的介绍,或者也可以在菜单中找到。emacs其它菜单项点击后的帮助文档都是info文档,阅读info文档只需要记住七个按键就可以:u---up,回上层结点;p---previous,前一个结点;n---next,后一个结点;空格---向下翻一页;TAB---转到下一个超链接;i---搜索index;s---搜索文字。知道这些命令阅读info文档已经非常轻松,其实空格翻页都不用记,info文档中滚动和翻页等命令和emacs是一样的。另外还有shift-TAB转向上一个超链接。g—goto node,快速跳到指定的结点处。

1.        M-x make-command-summary会列出当前所能用的所有命令。 
   
2.         
   
       
   
3.        修改了.emacs文件后是可以使用M-x load-file命令重新载入.emacs文件并使其生效的。例如,M-x load-file c:/.emacs 
   
4.         
   
       
   
5.        M-x load-file, M-x eval-buffer与C-x C-e: 
   
6.        这是查找不用重新启动emacs使新的配置生效时看到的三种方法。使用C-h f load-file可以查看load-file函数的用法。其中: 
   
7.        M-x load-file:用法为load-file filename。作用是载入名为filename的lisp文件并执行其中的代码。如果载入的文件不是有效的lisp语言文件,就输出一条错误信息。 
   
8.         
   
       
   
9.        M-x eval-buffer:用法为(eval-buffer &optional buffer printflag filename unibyte do-allow-print)。其作用是将当前缓冲区的内容作为lisp代码来执行。在emacs中使用C-h f eval-buffer可以看到关于这个函数的各个参数的详细说明。 
   
10.      
   
       
   
11.     C-x C-e:这是eval-last-sexp命令的快捷键。这条命令把光标前面的内容作为lisp代码执行,并在mini buffer中输出信息。如果带有命令前缀,则将输出信息输出到当前缓冲区中。可以使用C-h k C-x C-e来查看详细说明。 
   
12.      
   
       
   
13.     emacs中还有很多以eval开头的函数,都是用作动态执行某些内容的。可以使用C-h f,然后输入eval,连续按两次TAB,来查看它们。 
   
14.      
   
       
   
15.     在自己的使用过程中,M-x load-file有可能会影响emacs的界面。因此,用M-x eval-buffer更好一些。 
   
16.      
   
       
   
17.     ;;设置在emacs的标题栏中显示当前正在编辑的缓冲区的名字: 
   
18.     (setq frame-title-format "emacs - %b") 
   
19.      
   
       
   
20.     ;;设置emacs启动时的初始目录,使用C-x C-f打开文件时emacs就会在这个目录下找 
   
21.     (setq default-directory "d:/mydocuments/mysourcecode/myselfcode/c_c++/adps/") 
   
22.      
   
       
   
23.     ;;不产生备份文件 
   
24.     (setq make-backup-files nil) 
   
25.      
   
       
   
26.     ;; 自动保存 
   
27.     (setq auto-save-mode nil) 
   
28.      
   
       
   
29.     ;;设置emacs执行出错时进入调试状态,能看到emacs出错时的具体调用栈 
   
30.     (setq debug-on-error 1) 
   
31.      
   
       
   
32.     ;;允许emacs和外部其他程序的粘贴 
   
33.     (setq x-select-enable-clipboard t) 
   
34.      
   
       
   
35.     ;;设置编译命令 
   
36.     (setq compile-command (concat "c:/mingw/bin/g++ -g " "/"" buffer-file-name "/"")) 
   
37.      
   
       
   
38.     ;;设置调试命令 
   
39.     (setq gud-gdb-command-name "c:/mingw/bin/gdb --annotate=3") 
   
40.      
   
       
   
41.     ;;自动扫描函数名 
   
42.     (setq imenu-auto-rescan 1) 
   
43.      
   
       
   
44.     ;; 当光标在行尾上下移动的时候,始终保持在行尾。 
   
45.     (setq track-eol t) 
   
46.      
   
       
   
47.     ;;ido的配置,ido就是在打开文件或者是在转向其它buffer的时候提供非常方便的功能, 
   
48.     ;;可以看emacs中提供的文档 
   
49.     (ido-mode t) 
   
50.      
   
       
   
51.     ;;去掉工具栏,去掉工具栏的方法很多,这是最简单的一种 
   
52.     (tool-bar-mode nil) 
   
53.      
   
       
   
54.     ;;去掉菜单栏 
   
55.     (menu-bar-mode nil) 
   
56.      
   
       
   
57.     ;;去掉滚动条 
   
58.     (set-scroll-bar-mode nil) 
   
59.      
   
       
   
60.     ;;让选中的区域高亮显示  
   
61.     (setq-default transient-mark-mode t) 
   
62.      
   
       
   
63.     ;; 行尾自动加上一个新行,怪不得以前使用gcc编译时总是显示行尾没有新行的警告。 
   
64.     (setq require-final-newline t) 
   
65.      
   
       
   
66.     ;;写代码的时候在下面的mode条上显示当前光标在哪个函数中,还有设置当前 
   
67.     ;;所在行高亮什么的,都在cc-mode里面,可以看cc-mode的文档 
   
68.     (which-function-mode 1) 
   
69.      
   
       
   
70.     ;;不显示启动信息,看起来舒服点,但好像并不能加快启动速度 
   
71.     (setq inhibit-startup-message t) 
   
72.      
   
       
   
73.     ;;用y和n来代替yes和no。 
   
74.     (fset 'yes-or-no-p 'y-or-n-p) 
   
75.

    


基本编辑:

C-o 插入一个新的换行,光标留在换行符前面。即”open-line”命令的快捷键。一般的回车之后光标是在换行符的后面。

C-x C-o 命令delete-black-lines的快捷键。删除从光标所在行的下一行起的所有连续的空行。

C-x z 重复执行命令。C-x 后面有几个z就重复执行几次。

M-x list-command-history 显示执行过的命令。有点像dos-key。

C-x 1 最大化当前光标所在的窗口。

C-x 2 将当前光标所在的窗口分成上下两个窗口。

C-x 3 将当前光标所在的窗口分成左右两个窗口。

M-x follow-mode 尤其是做翻译工作时非常好用。

 

查找替换:

C-s 命令isearch-forward的快捷键。向前做incremental search。

C-r 向后做incremental search。

在查找的时候想中断查找可以按回车或者C-g,按回车结束查找则光标停留在当前位置上,按C-g结束查找则光标返回到开始查找的那个位置上。重复按C-s向前查找下一个。

关于emacs的替换命令输入M-x replace再按两次TAB会列出所有的替换命令,包括查询替换和不查询替换的,正则表达式替换和非正则表达式替换的。emacs中的正则表达式语法可以在info文档中找到,做法是打开一份info文档,输入g,然后输入regexp按TAB,会自动列出关于正则表达式的那些结点。

M-x list-matching-lines 另开一个buffer列出当前buffer中所有匹配正则表达式的那些行。

 

版本控制:

在windows中下载解压rcs后使用前要先定义一个环境变量TZ,表示当前的时区。上次自己点击windows下面那个时间区域,看到是GMT+08:00,于是就这样设置了,可是这样设置以后发现RCS记录的时间和自己的系统时间相差很大。最近在网上看到,这个环境变量的值应该设置为JST-8的。

C-x v i指定对当前的文件使用版本控制。

C-x v v或者是check in或者是check out,这个不用自己操心,只要记住在编辑文件前来一次,保存的时候再来一次,就可以了。当前文件到底是处于lock还是unlock的状态在emacs的mode栏里可以看出来。如果是类似RCS:1.3这样的,表示当前处于lock状态,就是说当前自己编辑的只是一个副本,那个1.3版本是已经被记录在案了,不能修改了,这个时候如果按下C-x v v,则会产生一个1.4版本出来。如果类似RCS-1.3这样的,表示当前处于unlock状态,如果想编辑文件,必须先使用一次C-x v v 来先lock这个文件。

C-x v ~ VERSION查看指定版本号为VERSION的版本。查看时文件是只读的,且有一个后缀,比如查看test.cpp的1.3版本,则输入C-x v ~ 1.3,这个buffer的名字是test.cpp.~1.3~。创建一个旧版本的Branch的时候就不能用这个命令转到旧版本了。

C-x v =将当前缓冲区的内容和该文件的主版本比较。

C-u C-x v = FILE <RET> OLDVERS <RET> NEWVERS将OLDVERSION版本和NEWVERSION版本进行比较。

C-x v g将当前缓冲区中的文件每一行属于哪个版本都高亮显示出来。

C-x v l查看当前文件的版本控制历史。

C-x v u撤消操作。假设你从test.cpp的1.3版本中check out出来一份副本,然后编程,最后感觉不好,但是文件已经存盘了,就可以使用这个命令回到1.3版本时候的样子。使用这条命令后,文件的最新版本还是1.3版本,但是如果使用了C-x v c,那么1.3版本就会被一起拿掉了。

C-x v c见上。

C-u C-x v v这是转到另一个版本的一真正方法。上面的C-x v ~只是查看另一个版本,这个命令是转到那个版本,缓冲区中是没有~VERSION~这样的后缀的。通常用于为一个旧的版本创建子版本。