[符号]
--------------------------------------
C- 意思是按住 Ctrol 键
M- 意指 Meta 键 (键盘上若无Meta 键,则可以ALT 或 ESC 键来取而代之)
DEL 意指退格键 (不是 删除(Delete) key)
RET 意指回车键
SPC 意指空格键
ESC 意指Escape键
TAB 意指Tab键
像 "C-M-" (or "M-C") 这样连在一起的意味着同时按住 Control 和 Meta 键不放.
[进入Emacs]
----------------------------------------
emacs 要进入GNU Emacs,只需键入它的名字
C-z 挂起Emacs:
C-x C-c 永久离开Emacs
[用方向键]
---------------------------------------
上一行 C-p (Prev line)
.
.
.
向左移 C-b .... 。.... 向右移 C-f (Forward character)
(Backward ) .
.
.
下一行 C-n (Next line)
[文件]
----------------------------------------
C-x C-f 读取文件到Emacs
C-x r 只读的方式打开一个文件
C-x C-q 清除一个窗口的只读属性
C-x C-s 保存文件到磁盘
C-x s 保存所有文件
C-x i 插入其它文件的内容到当前缓冲
C-x C-v 用将要读取的文件替换当前文件
C-x C-w 将当前缓冲写入指定的文件
C-x C-q Version control checkin/checkout
[错误恢复]
---------------------------------------
C-g 取消当前要执行的命令
M-x recover-file 恢复系统崩溃后丢失的文件
C-x u或C-_ 撤销更新
M-x revert-buffer 使缓冲回复到初始内容
C-l Redraw garbaged screen
[增量查找]
---------------------------------------
C-s 向前查找
C-r 向后查找
C-M-s 规则表达式查找
C-M-r 反向规则表达式查找
M-p 选择前一个查找字符串
M-n 选择下一个查找字符串
RET 退出增量查找
DEL(Backspace) 取消上一个字符的作用
C-g 退出当前查找模式
可重复使用C-s和C-r来改变查找方向
[替换]
---------------------------------------
M-% 交互式地替换一个文本串
M-x replace-regexp 交互式地替换一个规则表达式
SPE 替换当前的并移动到下一处
, 替换当前的但不移动到下一处
L(Backspace) 不替换当前的并移动到下一处
! 替换所有剩下的符合条件的文本
RET 退出替换模式
C-r 进入递归的编辑模式
C-M-c 退出递归的编辑模式
[光标移动]
---------------------------------------
C-f 向前一个字符
C-b 向后一个字符
M-f 向前一个字
M-b 向后一个字
C-p 向上一行
C-n 向下一行
C-a 到行首
C-e 到行尾
M-a 到句首
M-e 到句尾
M-{ 到段首
M-} 到段尾
C-x [ 到页首
C-x ] 到页尾
C-M-f 到表达式首部
C-M-b 到表达式尾部
M-< 到缓冲首部
M-> 到缓冲尾部
C-v 滚动到下一屏
M-v 滚动到上一屏
C-x < 滚动到右边一屏(内容向左移动)
C-x > 滚动到左边一屏(内容向右移动)
C-u C-l 滚动当前行到屏幕中央
C-M-n 移到结尾的)、}或]
C-M-p 移到开始的)、}或]
C-M-u 向上移到父结构开始
C-M-d 向下移到父结构开始
[复制、粘贴、剪切、删除]
-----------------------------
C-d 向前delete字符
DEL(Backspace) 向后delete字符
M-d 向前delete到字首
M-DEL(Backspace) 向后delete到字尾
M-0 C-k 向前delete到行首
C-k 向后delete到行尾
C-x DEL(Backspace) 向前delete到句首
M-k 向后delete到句尾
M-- C-M-k 向前delete到表达式首部
C-M-k 向后delete到表达式尾部
C-w Kill区域
M-w 拷贝区域到Kill Ring
M-z <char> Kill到下一个给定字符出现的位置
C-y 拉回(yank)上次kill的内容
M-y 用更早kill的内容取代拉回的上次kill的内容
[标记Marking]
-----------------------------
C-SPC或C-@ 标记当前位置
C-x C-x 以字符为单位使用移动命令动态标记区域
M-@ 以字为单位使用移动命令动态标记区域
M-h 标记一段
C-x C-p 标记一页
C-M-@ 标记一个表达式
C-M-h 标记一个函数
C-x h 标记整个缓冲区
[寄存器]
-----------------------------
C-x r s 存储区域到寄存器
C-x r i 插入矩形内容到缓冲
C-x r SPC <num> 存储光标位置到寄存器
C-x r j <num> 跳跃到寄存器中存储的光标位置
[矩形]
-----------------------------
C-x r r 拷贝一个矩形到寄存器
C-x r k Kill矩形
C-x r y 拉回矩形
C-x r o 打开一个矩形, 将文本移动至右边
C-x r c 清空矩形
C-x r t 为矩形中每一行加上一个字符串前缀
C-x r i r 从r缓冲区内插入一个矩形
[标记Tags]
-----------------------------
M-. 查找标记
C-u M-. 查找标记下一次出现的位置
M-x visit-tags-table 指定一个新的标记文件
M-x tags-search Regexp search on all files in tabs table
M-x tags-query-replace 在所有文件中执行查询-替换
M-, 继续进行上一次标记查找或查询-替换
[窗口与缓冲]
-----------------------------
C-x 1 删除所有其它窗口
C-x 5 2
C-x 2 上下分割当前窗口
C-x 3 左右分割当前窗口
C-x 5 0
C-x 0 删除当前窗口
C-M-v 滚动其它窗口
C-x o 切换光标到另一个窗口
C-x 4 b C-x 5 b 选择另一个窗口中的缓冲
C-x 5 C-o
C-x 4 C-o 显示另一个窗口中的缓冲
C-x 5 f
C-x 4 f 在另一窗口中查找并打开文件
C-x 5 r
C-x 4 r 在另一窗口中以只读方式打开文件
C-x 5 d
C-x 4 d 在另一窗口中运行dired命令
C-x 5 .
C-x 4 . 在另一窗口中查找tag
C-x ^ 增加窗口高度
C-x { 减小窗口宽度
C-x } 增加窗口宽度
C-x b 选择另一个缓冲
C-x C-b 列出所有的缓冲
C-x k Kill一个缓冲
[分栏编辑]
C-x 6 2C-command
C-x 6 s 2C-split
C-x 6 b 2 C-associate-buffer
C-x 6 2 2 C-two-columns
[格式]
-----------------------------
TAB 缩进当前行(与模式相关)
C-M-\ 缩进区域(与模式相关)
C-M-q 缩进表达式(与模式相关)
C-x TAB Indent region rigidly arg. Columns
C-o 在光标后插入一个新的行
C-M-o 静态地将一行下移
C-x C-o 删除光标附近的空行(留下一行)
M-^ 与上一行合并成一行
M- 删除光标附近的所有空格
M-SPC 删除光标附近的空格(留下一格)
M-q Fill paragraph
C-x f Set fill column
C-x . 设置每一行开始的前缀
M-g 设置字体
Emacs远程编辑文件的方法: C-x C-f RET /ftp:user@host:/path/file,ftp也可以换成其他emacs支持的协议,默认为scp(基于ssh登录)。
基本命令
C-x C-c : 退出Emacs
C-x C-f : 打开一个文件,如果文件不存在,则创建一个文件
C-g : 取消未完成的命令
编辑C-z (redefined): Undo;原来C-z是挂起Emacs(然后用fg命令调出);C-x u 是默认的命令; 移动一下光标,再C-z就可以redo
M-d : 删除光标后的词语
移动光标
C-v : 向前翻页
M-v : 向后翻页
M-r : 将光标移动到屏幕中间那行
C-a : 移到行首
M-a : 移到句首,从行首到句首之间可能有空格
C-e : 移到行尾
M-e : 移到句尾
M-{ : 向上移动一段
M-} : 向下移动一段
C-right : 向前移动一个单词
C-left : 向后移动一个单词
C-up : 向前移动一段
C-down : 向后移动一段
M-< : 移到整个文本开头
M-> : 移到整个文本末尾
C-u 数字 命令 : 执行多次(数字表示次数)该命令;“M-数字 命令” 也可以
注意:
emacs默认安装的情况下,在不同的软、硬件系统环境中,M键 多数时候 代表Alt键,但是有的时候却代表的是 ESC键。
这个命令规则很有用,也很好用,下面列几个小练习:
M/C-u 100 * : 自动连续输入100个*
M/C-u 100 Del / Backspace: 自动执行100次 前删 / 后删
M-x goto-line : 移动到某一行
C-l : 重绘屏幕,效果就是当前编辑行移动窗口中央
Buffer 相关C-x k : 关闭当前buffer
C-x b : 切换到前一个编辑的buffer
C-x C-b : 列出当前所有buffer
C-x C-s : 保存当前buffer
C-x s : 保存所有未保存的buffer,会提示你是否需要保存
C-x C-w : 文件另存为
拷贝与粘贴M-space (redefined): 设置mark; C-@ 是默认命令
C-w (redefined) : 剪切一块区域;如果没有设置mark,则是剪切一行
M-w (redefined) : 拷贝一块区域;如果没有设置mark, 则是拷贝一行
C-k : 从当前位置剪切到行尾
C-y : 粘贴
M-y : 用C-y拉回最近被除去的文本后,换成 M-y可以拉回以前被除去的文本。键入多次的M-y可以拉回更早以前被除去的文本。
C-x r k : 执行矩形区域的剪切
C-x r y : 执行矩形区域的粘贴
窗口操作C-x 0 : 关闭当前窗口
C-x 1 : 将当前窗口最大化
C-x 2 : 垂直分割窗口
C-x 3 : 水平分割窗口
M-o (redefined) : 在窗口之间切换; C-x o 是默认命令
C-x 5 1/2/3/0 : 对frame类似的操作
C-x < : 窗口内容右卷
C-x > : 窗口内容左卷(这两个命令在垂直分割窗口后比较有用)
(C-u) C-x ^ : 加高当前窗口,如果有C-u,则每次加高4行
(C-u) C-x } : 加宽当前窗口
(C-u) C-x { : 压窄当前窗口
ESC C-v : 在其它窗口进行卷屏操作
搜索和替换C-s : 向前搜索(增量式搜索);连续C-s,跳到下一个搜索到的目标
C-s RET : 普通搜索
C-r : 向前搜索
C-s RET C-w : 按单词查询
M-% : 查询替换,也就是替换前会询问一下
M-x replace-string : 普通替换
TagsM-! etags .c .h : 创建TAGS文件
M-. : 跳到tag所在位置
M-x list-tags : 列出tags
BookmarkC-x r m : 设置书签bookmark
C-x r b : 跳到bookmark处
帮助C-h ? : 查看帮助信息
C-h f : 查看一个函数
C-h v : 查看一个变量
C-h k : 查看一个键绑定 (C-h c 也是查看键绑定,但是信息较简略)
C-h C-f : 查看一个函数的Info,非常有用
C-h i : 看Info
其它C-M-\ : 对选中区域,按照某种格式(比如C程序)进行格式化
C-x h : 全部选中
M-! : 执行外部shell命令
M-x shell : 模拟shell的buffer
M-x term : 模拟terminal, C-c k 关闭terminal
C-x C-q : 修改buffer的只读属性
注意:以下命令中标注的按键,大写的C代表Control,在键盘上通常是Ctrl键,而M代表Meta,在键盘上通常是Alt键,S则代表Shift,在键盘上通常是Shift键,也就是
C Control
M Alt
S Shift
这三个键在Emacs里通常作为组合键的前导按键使用,也就是说,执行一条命令前可能需要按住这个键不放,比如搜索命令是C-s,要执行这个命令首先要按住Ctrl键不放,再按下字母s键;而打开文件命令是C-x C-f,要打开文件就必须按下Ctrl键不放,依次按下x和f(当然也可以按下Ctrl不放再按下x,放开,再按下Ctrl不放再按f);有的命令组合键和非组合键都要用到,比如保存所有文件是C-x s,需要按下Ctrl不放的时候按下x,然后放开所有按键,再按下s;也有两个组合按键一起使用的,比如使用正则表达式进行增量搜索的快捷键是C-S-%,这就要求你同时按下Ctrl和Alt不放开,再按下s。
启动Emacs
在有图形界面的环境下只需要在终端输入Emacs按回车或者找到启动emacs程序的图标打开就可以了。
在没有图形界面的环境或者伪终端下需要使用字符界面的Emacs可以输入emacs -nw,也就是增加一个-nw参数。
挂起Emacs C-z
挂起在图形界面下通常是把Emacs窗口最小化的意思,而在字符界面下则是把Emacs挂起到后台后回到终端,比如在GNU/Linux字符终端下按C-z会回到shell,使用jobs命令可以列出你挂起的所有任务,使用fg可以返回以最后一次挂起的任务,fg %num可以选择回到任意一个被挂起的任务。
退出Emacs C-x C-z
如果没有未保存的文件,那么这条命令会直接退出Emacs程序,否则它会提示是否保存文件。
文件
打开文件 C-x C-f
保存文件 C-x C-s
保存所有文件 C-x s
插入其他文件到当前缓冲区 C-x i
在当前缓冲区打开另一个文件 C-x C-v
另存为文件 C-x C-w
获取帮助
打开快速指南 C-h t
获取按键帮助 C-h k
获取函数帮助 C-h f
打开Emacs帮助手册 C-h r
错误恢复
放弃当前命令或终止正在执行的操作 C-g
恢复因系统崩溃而丢失的文件 M-x recover-file
撤销上一次操作 C-x u或C-_
还原缓冲区的内容 M-x revert-buffer
刷新屏幕 C-l
增量搜索
正向搜索 C-s
反向搜索 C-r
使用正则表达式正向搜索 C-M-s
使用正则表达式反向搜索 C-M-r
选择上一个搜索结果 M-p
选择下一个搜索结果 M-n
退出搜索并停留在当前搜索到的位置 RET
中止当前搜索 C-g
标记
设置标记 C-@
在当前光标位置和标记处跳转 C-x C-x
设置单词标记 M-@
标记段 M-h
标记页 C-x C-p
标记表达式 C-M-@
标记函数 C-M-h
标记整个缓冲区 C-x h
查询替换
交互替换 M-%
使用正则表达式 M-x query-replace-regexp
在查询替换模式下:
替换当前项并跳转到下一项 SPC
替换当前项不跳转 ,
不替换当前项并跳转到下一项 DEL
替换全部剩下的查询结果 !
回到上一个匹配结果 ^
退出查询替换 RET
进入递归编辑(C-M-c退出) C-r
格式化
缩进当前行
TAB
缩进区域
C-M-/
缩进表达式
C-M-q
增加缩进
C-x TAB
在当前位置后增加新行
C-o
当前位置到行尾的内容下移
C-M-o
删除当前位置附近的空行
C-x C-o
将当前行连接到上一行
M-^
删除光标附近的空白
M-/
大小写转换
单词转换为大写
M-u
单词转换为小写
M-l
单词转换为首字母大写
M-c
区域转换为大写
C-x C-u
区域转换为小写
C-x C-l
微型缓冲区
尽可能多地补全
TAB
补全至多一个单词
SPC
补全并执行
RET
显示可能的补全项
?
切换到上一个输入
M-p
切换到下一个输入
M-p
用正则表达式往后搜索历史记录
M-r
用正则表达式往前搜索历史记录
M-s
终止命令
C-g
缓冲区
选择另一个缓冲区
C-x b
列出所有缓冲区
C-x C-b
关闭一个缓冲区
C-x k
交换
交换字符
C-t
交换单词
M-t
交换行
C-x C-t
交换表达式
C-M-t
拼写检查
检查当前单词拼写
M-$
检查区域内所有单词
M-x ispell-region
检查整个缓冲区
M-x ispell-buffer
标签
查找标签
M-.
查找下一个标签
C-u M-.
指定一个新标签
M-x visit-tags-table
在标签表内的所有文件用正则表达式搜索
M-x tags-search
在所有文件内运行查询替换
M-x tags-query-replace
继续最后一个标签搜索或查询替换
M-,
Shells
执行一个外部命令
M-!
使用一个外部命令处理当前区域
C-u M-!
这个命令,比较有趣,可以在当前区域插入某个外部命令的执行结果,来个小例子:
当你输入命令:
C-u M-! date
将在当前区域自动插入系统当前的日期、时间信息,类似下面的内容:
2017年 03月 02日 星期四 08:59:33 CST
启动一个shell
M-x shell
矩形区域
复制矩形区域到寄存器
C-x r r
删除矩形区域
C-x r k
拉回矩形区域内容
C-x r y
插入一个矩形区域
C-x r o
清空矩形区域
C-x r c
矩形区域内每行内容替换为字符串
C-x r t
缩写
增加全局缩写
C-x a g
增加模式缩写
C-x a l
给这个缩写增加全局扩展
C-x a i g
给这个缩写增加模式扩展
C-x a i l
扩展缩写
C-x a e
动态扩展上一个单词
M-/
国际化字符集
指定语言
M-x set-language-environment
显示所有输入法
M-x list-input-methods
开启或禁用输入法
C-/
设置命令编码系统
C-x RET c
显示所有编码系统
M-x list-coding-systems
选择编码系统
M-x prefer-coding-system
信息
进入信息文档阅读器
C-h i
在信息文档中查找指定的函数或变量
C-h C-i
在节点中移动
往前滚动
SPC
反向滚动
DEL
节点开始处
.
节点间移动
下一个节点
n
上一个节点
p
上一层
u
通过名字选择菜单项
m
选择第n个菜单项
n
填转到节点
f
返回上一次所在的节点
l
返回到目录节点
d
通过名字跳转到任意节点
g
其他:
进入快速指南
h
退出信息文档
q
用正则表达式搜索节点
M-s
寄存器
保存区域到寄存器
C-x r s
插入寄存器内容到缓冲区
C-x r i
保存当前位置到寄存器
C-x r SPC
跳转到保存在寄存器中的位置
C-x r j
键盘宏
开始记录键盘宏
C-x (
结束记录键盘宏
C-x )
执行最后一个宏
C-x e
追加内容到最后一个键盘宏
C-u C-x
给最后一个键盘宏命名
M-x name-last-kbd-macro
插入键盘宏的Lisp定义到当前缓冲区
M-x insert-kbd-macro
Emacs 如何在英文版 Linux 系统中使用系统的中文输入法:
以本人使用的英文版Ubuntu 14.04为例,在Emacs环境中无法调出系统的搜狗中文输入法进行中文输入,多次折腾后,总结解决方法:
首先查看是否已经安装了zh_CN.utf8:
locale -a | grep -i zh_cn.utf8 ,该命令行输出为空,表示没有安装。
如果没有安装:
cd /usr/share/locales
./install-language-pack zh_CN
方法 1、
在$HOME/.bashrc
中添加一行:
alias emacs="export LC_CTYPE=zh_CN.UTF-8;emacs";
这样可以保证只要是在terminal中打开的Emacs都可以输入中文。
方法 2、
如果想在任何方式打开的Emacs中都能输入中文的话可以在/etc/environment 文件中添加:
LC_CTYPE="zh_CN.UFT-8"
修改完毕以后,重启系统后在terminal方式或其他方式打开的Emacs里都可以输入中文。