C: Ctrl M: Meta/Alt
RET: 回车
在终端中运行Emacs
emacs -nw/-no-window-system:emacs不启动X界面;
放大缩小字体 Zooming (emacs 23有效)
C-x C-+/=: 放大, text-scale-increase,text-scale-adjust RET +
C-x C-_: 缩小, text-scale-decrease,text-scale-adjust RET _
C-x C-0: 恢复全局默认字体,text-scale-adjust 0
操作方式:C-x 之后可以接任意多个任意组合的C-_/C-+/C-=/C-0
text-scale-adjust: 交互式命令,直接按_,+,=,0调节,可以任意此调节
帮助信息
C-h w: where-is,查看命令对应的快捷键;
C-h k: 和C-h w对应作用相反,查看快捷键对应的命令;
C-h b: 查看当前有效的绑定的快捷键;
C-h f: 查询函数信息;
C-h v: 查询变量信息;
C-h m: 查看当前模式信息;
C-h t: 打开tutorial;
Frame
C-x 5 2: 创建一个frame,可以对frame有一个真实的认识;
C-x 5 0: 删除当前的Frame;
C-x 5 1: 删除除当前的Frame之外的其他Frame;
窗口
C-x o:跳转到其他窗口,o (other),逆时针方向;
M n C-x o:n是一个数字,按照逆时针方向,跳转n个窗口;
C-x 0:关闭当前窗口
C-x 1:delete other windows
C-x 2:水平分割窗口
C-x 3:垂直分割窗口
C-x <:窗口内容左卷
C-x >:窗口内容右卷
C-x }:enlarg-window-horizontally
C-x {:shrink-window-horizontally
保存、恢复窗口配置(布局)
C-x w r
:window-configuration-to-register, C-x w r
RET register,把当前窗口配置保存到register中,register是用一个字符表示;
C-x r j:jump-to-register,C-x r j RET register;
用例:1. C-x w r RET a,保存当前配置到 a;2. C-x 1 RET,最大话当前窗口;3. C-x w r RET b;4. C-x r j RET b;5. C-x r j RET a,回到先前的窗口配置。
C-a:到行首
C-e:到行末
C-HOME键,M-<:文件(缓冲区)开头
C-END键,M->:文件末尾
G:view-goto-line n,跳转到第n行,按下g,先跳转到文本开头,不同模式G可能保定到不同命令;
M-b:上一单词
M-f:下一单词
M-a:跳到上一句
M-e:跳到下一句
M-{:跳到上一段
M-}:跳到下一段
PgUp,M-v:上一屏
PgDn,C-v:下一屏
M-x goto-line n RETURN:跳转到指定行
C-l : 以循环的方式,把当前行移动到窗口顶、中间、底部;
C-u n C-l: 把当前行移动到离窗口顶部 n 行;
C-up:backward-paragraph,向上跳转一个段落;up 是向上箭头;
C-down:和C-up相反;
跳转半页,scroll half page
;; scroll half page
(defun window-half-height ()
(max 1 (/ (1- (window-height (selected-window))) 2)))
(defun scroll-down-half ()
(interactive)
(scroll-up (window-half-height)))
(defun scroll-up-half ()
(interactive)
(scroll-down (window-half-height)))
(global-set-key (kbd "M-<up>") 'scroll-up-half)
(global-set-key (kbd "M-<down>") 'scroll-down-half)
参考:http://www.emacswiki.org/emacs/HalfScrolling
括号跳转
C-M-n:向前,跳转到匹配的括号之后一个字符;
C-M-p:向后,需要令光标处于括号之后一个字符;
上面两个命令可以用于圆括号,花括号
参考:http://emacswiki.org/emacs/ParenthesisMatching#toc3
显示行号
global-linum-mode: 轮流设置global-linum-mode为nil或者t,用于控制行号的显示(全局控制);
linum-mode: 控制当前文本;
文本编辑
M-w:kill-region-save,复制
C-w:kill-region,剪切
C-y:粘贴(前一次kill的内容)
M-y:粘贴kill-ring中的某次删除的内容;
用例:M-y之前需要先C-y,然后可以多次使用 M-y,依次选择以前kill的内容,找到需要粘帖的内容即可;多次M-y以后,选择的内容会循环出现,所以这是一个 kill ring;
删除
<Delback>为 backspace 键:
<Delback> 删除光标前的一个字符
C-d 删除光标后的一个字符
M-<Delback> 移除光标前的一个词
M-d 移除光标后的一个词
C-k 移除从光标到“行尾”间的字符
M-k 移除从光标到“句尾”间的字符
替换:
按M - %启动查找替换,输入要被替换的词,回车,然后输入要替换的词,再回车。
被替换的词会高亮起来,这时,输入y替换并跳到下一个,输入n忽略并跳到下一个,输入q结束,输入!替换剩下的全部。
一些常用的选项:
C - g 中断查找替换过程。
^ 返回上一个替换点,按y继续下一个,如果不想替换上一个的话,用^返回到上一个,然后按 C - r 进入编辑,修改完后按C - M - c退出继续下一个。
C - l 使当前匹配显示在文档中间。
C - r 进入修改。
标记
C-空格:set-mark-command,开始标记区域
C-x C-x:exchange-point-and-mark,标记的开始点和结束点之间跳转
用 C-g 取消标记
缓冲区
C-x k:kill当前缓冲区
C-x C-s:保存当前缓冲区
C-x s:找出当前已修改但未保存的缓冲区,依次询问是否保存
C-x C-w:另存为...
C-x s:保存所有缓冲去,save-some-buffers
ECS C-x h:全选,mark-whole-buffer
C-x C-b:list-buffers,列出所有编辑缓冲区清单
* - 已经修改 % - 只读
C-x b:switch-to-buffer
配置 C-TAB和C-S-TAB 切换缓冲区:
默认C-x <left>/<right>对应previous-buffer/next-buffer;
;; Ctrl-TAB Scroll Buffer
(global-set-key (kbd "C-<tab>") 'next-buffer);; 在emacs中直接输入C-S-TAB,显示C-S-iso-lefttab,加上[]即可用于设置命令
;(global-set-key [C-S-iso-lefttab] 'previous-buffer) ;此命令等同于下面的命令,都可用
(global-set-key (kbd "C-S-<iso-lefttab>") 'previous-buffer)
C-s:搜索当前缓冲区
M-b C-s C-w:搜索当前光标下的单词,M-b 回到单词开头,C-w 复制光标下到单词末尾到搜索缓冲区;
重新加载(reload)文件:revert-buffer, find-alternate-file(C-x C-v) 参考:http://superuser.com/questions/208488/how-do-i-re-open-a-file-in-emacs
撤销
C-x u,C-/ :撤销前一个命令
用户自定义
custom-set-variables:
customize-option:
customize-variable: 自定义某些变量
customize-group: 自定义选项和变量是分组的,直接进入该分组,如:find-file
命令重复
C-u n: 重复执行n次,输入完n后,后面可以按命令快捷键或者命令;
shell
M-x shell:打开shell
M-x ansi-term:以ansi-term终端模式,运行制定shell,支持颜色显示,emacs中的快捷键需要加上C-c
C-c C-c 类似unix里的C-c(停止正在运行的程序)
C-d 删除光标后一个字符
C-c C-d 发送EOF
C-c C-z 挂起程序(unix下的C-z)
M-x eshell:好用,快捷键有效,不需要加C-c前缀,支持颜色
M-p 显示前一条命令
M-n 显示后一条命令
M-! cmd RET:执行单条shell命令,shell命令输出会插入到当前buffer;
M-| cmd RET:执行单条shell命令,shell命令输出显示在命令输入的minibuffer中,这个输出不会干扰当期buffer;
选择文件字符编码 coding system
C-x RET c :universal-coding-system-argument ,一般可选择:utf-8, utf-8-unix, utf-8-dos, utf-8-mac, gb18030*, gb2312*, gbk*等;
Keyboard Macro 宏
宏用于记录一组键盘操作,用例如下:
1. C-x ( :kmacro-start-macro,开始记录宏;
2. 键盘操作,比如注释某一行:C-a --> ; --> C-n;
3. C-x ) :kmacro-end-macro,结束记录宏;
4. C-u 10 C-x e:注释下面的10行;
编译和调试
compile:提示要求输入的编译命令,比如:g++ -o test test.cpp
gdb:提示输入调试命令,比如:gdb --annotate=3 test (--annotate=3必须有,如果没有,无法在emacs中执行正常的gdb的命令)
--annotate选项是GUI程序和GDB交互的接口,参考:GDB Annotations
参考:Using Emacs for Programming
Emacs mode for GDE:Emacs中gdb的GUI界面操作
gdb-many-window:会出现break-points,stack frame,locals多个提供调试信息的窗口;
Emacs Lisp 编辑
C-j:LINEFEED,插入下一行;
ESC C-p:调整光标后面 lisp 代码格式;
ESC TAB:自动补全函数或者变量,如果有多个匹配,会弹出选择窗口;
ESC ; :添加注释符号:在代码行,根据comment-column,添加一个分号作为注释开头;在空白行,智能缩进,并以两个分号作注释开头;
ESC j:下一行,继续注释;
ESC C-x:如果当前光标处于某个函数中,令 lisp 解释器加载改函数,以后其他函数就可以调用并执行该函数了;
ESC : :eval-expression,执行在mini-buffer中输入的一个 lisp 表达式,mini-buffer中可以通过ESC TAB补全,而不是用TAB;
C-x C-e:eval-last-sexp,需要将光标至于需要执行的语句之后,如下图;
emacs-lisp-mode:进入 emacs lisp 模式,后缀为.emacs或者.el的文件;
lisp-mode:进入lisp模式,后缀为.l或者.lisp的文件;
lisp-interaction-mode:进入 lisp 交互模式,此时 C-j 绑定为 eval-print-last-sexp,不在是换行(LINEFEED)操作了;
参考:Learning GNU Emacs, Chapter 12, Lisp Mode
打开#include <头文件.h>
ffap.el 包:
find-file-at-point / ffap:emacs内置函数,属于ffap.el;打开光标说在位置的文件,也可以打开URL;
相关参数可以通过,M-x customize-group RET ffap 来查看;
find-file.el 包:
自定义系统头文件路劲:M-x customize-variable RET ff-search-directories (如果:没有这时没找到这个变量,可以通过 M-x customize-group ff 找到这个变量,之后就可按照customize-variable来定制了,似乎这里有一个缓存加载问题??)
C-h v 查询 ff-search-directories :
ff-find-other-file:属于find-file.el软件包,如果光标在#include行,打开相应的头文件;如果光标在其他行:1)如果是.h文件,则打开对应的.c文件;2)如果是.c文件,则打开.h文件; 头文件和源文件的对应规则根据 ff-other-file-alist,不一定是.h和.c,ff-other-file-alist的值就是cc-other-file-alist,修改方法如下:
(setq cc-other-file-alist ( ("\\.c\\'" (".h")) ("\\.c\\+\\+\\'" (".h++" ".hh" ".h")) ;.c++ --> .h++, .hh, .h ("\\.h\\+\\+\\'" (".c++")) ("\\.cpp\\'" (".hpp" ".hh" ".h")) ... )
好用的命令列表链接:
A Guide Tour of Emacs