2008-7-24 version 1.0
本文面向C++程序员
Emacs将文件copy到临时的buffer中,编辑的是这个buffer,保存时才更改文件;buffer都拥有一个名字,它显示在界面的mode line栏上;
Emacs将图形化视窗称为Frame,将frame内的分栏称为window,这跟我们常规的概念刚好相反;
Frame与window用于显示buffer,但Buffer独立于frame和window;
用于为某种特定应用提供方便,如Text mode用于编写文本,cc mode用于写C++代码等;
Major mode:buffer必须处在某个major mode中,且同时只能处在一个major mode中;常用的major mode包括Fundamental mode、Text mode、View mode、Shell mode、cc mode等;
Minor mode:控制某个方面,可以自由开关——一个buffer可以同时处在多个minor mode中,minor mode如Auto-fill mode、Overwrite mode、Isearch mode;
某些mode可以同时用作major mode和minor mode,即它们可以作为major mode独立使用,也可以作为minor mode放到其他major mode中使用;
Mode显示在emacs界面的mode line显示栏上;
Emacs大量命令由一系列快捷键构成,常常需要按两组键或更多组按键才能完成一个命令;Emacs常用有两个功能键,ctrl和Meta;Meta一般对应Alt或Esc;
按键表示法:
C-g,按住ctrl同时按g
M-x,按住Meta同时按x
Meta -,按下Meta同时按-
C-x f,按下ctrl同时按x,然后松开ctrl与x,再按f
C-c something,按键方法同C-x f
C-x C-f,按下ctrl同时按x,然后释放x按f——ctrl可以一直按住,也可以在中间松开
M-x long-command-name Enter,使用命令名输入
大部分命令是:C-n或M-n;
其他有,C-x something,如文件操作、buffer、window操作;
一些特殊的,C-c something,这通常与某些特定模式(mode)有关,如java mode;
每个命令都有一个命令名称,这可以用M-x long-command-name Enter输入;
退出C-x C-c
取消命令C-g,用于按错键时取消
打开帮助
打开find-file,C-x C-f
打开另一个文件find-alternate-file,C-x C-v
Tip:可以使用Tab键让Emacs自动填充文件名,如果匹配项大于1会在一个窗口中显示所有匹配项,此时可以使用PgUp进行选择;
保存,C-x C-s
另存write-file,C-x C-w
l 移动:meta的移动幅度比control的大
Char/Word f/b
Line/sentence a/e
scroll-up/scroll-down C-v/M-v
buffer M-
l 删除:meta的作用范围比control的大
Char/word d/Del
Line/sentence k
C-y 取消删除——实际是粘贴
C-w cut一个region
l 选择
Region,选定的一个范围称为region
C-space 设定region起点,终点是光标当前位置
C-x C-x 查region范围
M-h 选定一整段
C-w 剪切
M-w copy
C-y 粘贴
C-x h 选择整个buffer作为region
l 取消
C-_或C-x u
从自动保存文件中恢复:M-x recover-file Enter
l 交互
C-x C-t 将光标的上一行下移
查找的种类:
l 简单方式,Emacs搜索输入的字串
l 增量查找:在输入同时查找,C-s(再次按C-s查找下一个)
l 全词匹配查找:C-s Enter C-w,反向使用C-r Enter C-w
l 正则表达式查找:
默认查找不区分大小写,但如果输入了大写字母,则使用大小写敏感查找;
C-g,查找完成后回到查找开始的位置;
C-s,增量查找;C-s C-w查找光标后的word;C-s查找下一个,C-r找上一个;
l 简单替换,替换全部,M-x replace-string Enter,无替换提示
l 提示替换,M-%开始,space接受替换,n不替换,!替换余下的所有,q退出;
打开文件命令C-x C-f,如果文件已经在某个buffer中,它仅仅是使用这个buffer,
C-x b 在同一个window中切换不同的buffer,使用箭头选择一个buffer打开,也可以输入新文件名用于新建文件;
C-x k,删除buffer(kill-buffer)
C-x C-b,显示打开的所有buffer
C-x s,保存所有打开的buffer,C-x C-s保存当前的buffer
C-x C-q,使buffer只读
C-x 0,删除window
C-x 1,删除其他window
C-x 2,打开一个新的window
C-x 3,打开竖排的window
C-x 4 f,在另一个window中打开文件
C-x 4 b,在另一个window中打开另一个文件
C-x o,切换到另一个window
C-x {/C-x }调整Window大小,
C-x 5 2打开frame;
C-x r m,设置
C-x r b,跳转到
C-x r l,列出所有bookmark
M-!,执行单行命令,如diff,输出显示在另一个window中
M-h M-|,执行shell命令
C-u M-!,执行shell命令,并将输入插入当前buffer;
M-x shell Enter,打开shell mode;
M-x man,然后输入要查询的内容,如“3 sleep”
M-x compile Enter,编译
C-x `,跳转到下一个错误处,可在编译同时改错
M-n,跳到下一错误;
M-p,上一错误;
M-;,增加注释;
M-j,继续在下一行写注释;
注释掉一段代码:选择一个region后,M-x comment-region,反操作uncomment-region;
M-x kill-comment删除本行的注释
C-j,换行并自动缩进
C-M-/,自动排版region
可用于定位函数;
首先在目录下使用命令etags命令建立tag table,如etags *.[ch]建立.c、.h文件的tag,输出文件为TAGS(刷新tag table需要再次执行该命令?!)
然后,M-x visit-tags-table,为emacs指定tag table
M-.,查找tag,如函数定义,不能定位变量定义;
C-x 4 .,在另一个Window中显示查找结果;
M-,,查找下一处定义;
M-x list-tags,列出所有tags;
C-M-a/C-M-e 到函数头、尾
C-M-h 选择整个函数
C-c C-u 的开头,C-c C-n/p,跳到上/下一个宏
C-c C-a Auto new line,在输入”;”等符号时自动增加新行;
M-x c-set-style 设置缩进风格,如Linux
C-c C-d hungry-delete-key,delete将删除前面的所有空格;
C-c C-t 等价于C-c C-a + C-c C-d;
M-/ 自动补全
show-paren-mode 显示匹配括号
C-l 重绘屏幕、并且把当前行移动到屏幕中央