emacs学习

http://www.cnblogs.com/holbrook/archive/2012/02/15/2357336.html

基本概念--命令

对Emacs所有的操作都是通过调用命令实现的。对于一些常用的命令,会定义快捷键以便快速使用。
不管是否有快捷键,都可以通过M-x command 的方式执行命令。(M-x即Alt+x,是一种快捷键,后面会有介绍)比如输入回车,相当于:
M-x newline
通过M-x执行命令时,可以使用 TAB 补全,使用 M-p 上翻, M-n 下翻。
Emacs中的取消通常是连按三下ESC:
ESC ESC ESC (M-x keyboard-escape-quit)
但是在命令执行过程中,有可能该命令无法使用(比如有些命令是交互式的,需要输入一些参数),所以中止一条命令的执行最好使用C-g (M-x keyboard-quit)。

基本概念--快捷键

本质上,快捷键只是一种发送命令的方法!
Emacs的快捷键通常以组合键的方式定义。如M-x 表示Alt+x。前面的字母M代表修饰符,Emacs定义的修饰符如下:
C-:Control
M-: Alt(应该是Meta,在 PC 上,Meta键 通常对应 Alt 键)
C-M-: 同时按住 Ctrl 和 Alt 
S-:Shift
RET:Return
TAB:Tab
ESC:Esc,等价于M-。比如,C-M-r ,等价于ESC C-r
SPC:空格键
DEL:退格键
Delete:删除键

上面提到了ESC C-r。这是一种组合方式,表示先按ESC,再按C-r。Emacs中的很多快捷键定义成组合的方式。如 C-x C-c(M-x save-buffers-kill-emacs)
此外还有些命令可以传递参数,在Emacs的表示法中用 (#) 代表。如:


C-u (#) C-f 代表重复#次C-f

6.基本概念--模式

Emacs是一种“有模式”的编辑器。如果用过Vim就很容易理解。不过Emacs中的模式分成主要模式(major mode)和次要模式(minor mode)两种。
主要模式由文件类型决定,每个buffer打开文件时会根据文件类型决定其主要模式。常见的主要模式有:

fundamental-mode:缺省的 Emacs 模式,拥有最少设置和绑定
text-mode:编辑文本的基本模式
c-mode:用于编辑 C 程序源代码
lisp-interaction-mode:用于编辑和编译 Lisp 代码
ptex-mode:用于编辑 TeX 文档



次要模式可以组合到主要模式中,常见的次要模式比如:

abbrev-mode:用于生成和使用缩写
auto-fill-mode:用于自动文字回绕、填充较长的行和段落
line-number-mode:显示当前行号
overwrite-mode:覆盖模式,代替默认的插入模式



可以通过命令来指定模式:M-x  mode_name
对于一个buffer来说,当前的主要模式只能有一种,当指定主要模式时,原来的主要模式会被替换;而当前的次要模式可以有多种。
如果输入的模式包含在当前模式中,对于主要模式,会清空所有的次要模式;对于次要模式,会关闭这个次要模式。
模式的变化在状态栏中可以看到。

==================================================

1.文件操作

文件操作的快捷键都集中在C-x"菜单"中:

快捷键(C-x)     命令(M-x)                                          说明
C-x C-f              find-file                                              打开文件或录
C-x C-c             save-buffers-kill-emacs                 保存退出
C-x C-z             iconify-or-deiconify-frame             挂起(最小化)
C-x C-f              find-file                                              打开文件、目录
C-x C-r             find-file-read-only                            以只读模式打开
C-x i                  insert-file                                           插入文件
C-x C-s             save-buffer                                       保存
C-x s                 save-some-buffers                          保存所有未保存的缓冲区
C-x C-w            write-file                                            另存为文件
C-x RET r         revert-buffer-with-coding-system  以指定编码读取文件
C-x RET f         set-buffer-file-coding-system         以指定编码保存文件
revert-buffer                                      恢复到原始状态
C-x d                dired                                                   进入目录列表模式
C-x C-d            list-directory                                      获取文件列表(简洁)

2. 光标定位

向前    向后    向下    向上        
翻页                           C-v    M-v
字符        C-f       C-b     C-n    C-p
单词        M-f       M-b
句           M-a      M-e
行           C-a       C-e
段落       M-{        M-}
缓冲区   M-<      M->

其它:
M-g M-g     (goto-line)                      跳转到某行
M-x              (goto-char)                    跳转到字符位置:     
C-M-l          (reposition-window)    将当前行卷至页面中部
C-l               (recenter)                       刷新页面,将将当前行卷至页面中部 (使用数字参数指定行)
M-r M-x      (move-to-window-line) 移动光标至页面中间的行 (使用数字参数指定行)

3.输入删除

输入很简单,在缓冲区直接敲键盘就OK了(这个不像Vim)

删除:

向前        向后
字符     C-d         DEL
单词     M-d        M-DEL 
行         C-k(删除至行尾)
整行                   C-S-backspace
按表达式删除    C-M-k
区块     C-w
删除连续空格     M-x delete-horizontal-space

注1:在PC中,用Backspace代替DEL
注2:单词、行、区块的删除是kill,相当于剪切,会被放入kill-ring,字符及空格的删除是delete

4.复制粘贴

复制前要先选择:C-@开始区块选择,然后移动光标,选中的区域会高亮
剪切:前面"删除"的部分包括了一些剪切操作,对区块的剪切用C-w
复制:区块复制用M-w,至于复制1行,复制1个单词之类的功能,自己想办法吧:(
粘贴: C-y:粘贴kill-ring堆栈的最后一次的内容
C-y 之后可以继续M-y, 对Kill-ring中的内容依次召回

5.撤销重做

撤销: C-/  (每插入20个字符,视为一个 undo 的单位)
重做: C-/ 后,依次输入C-g C-/ 就可以redo

窗口管理

C-x 2           split-window-vertically           水平分割
C-x 3           split-window-horizontally       竖直分割
C-x 1           delete-other-window             只保留当前窗格
C-x 0           delete-window                      关闭当前窗格
C-x o           other-window                        切换窗格
C-M-v           scroll-other-window             滚动下一个窗格

缓冲区管理

Emacs中,打开新的buffer,不会关闭原有buffer,而是需要手工操作:
C-x C-b          list-buffers               查看缓冲区列表
C-x b              switch-to-buffer       切换缓冲区
C-x k               kill-buffer                关闭缓冲区
其他:可以参考ibuffer.el扩展

搜索和替换

Emacs中的搜索包括增量搜索和一般搜索。增加搜索是每次在前一次搜索的结果基础上继续搜索。在增量搜索时,如果上一次搜索之后进行了其他操作,则需要连续按两次快捷键才能召回关键词。
可以选中区块后在区块内进行搜索

增量搜索

C-s M-x         isearch-forward                向前增量搜索 
C-r M-x          isearch-backward            向后增量搜索 
C-M-s M-x     isearch-forward-regexp    正则表达式向前增量搜索 
C-M-r M-x     isearch-backward-regexp 正则表达式向后增量搜索

一般搜索

M-x               search-forward                 向前搜索   
M-x               search-backward              向后搜索  
M-x               search-forward-regexp     正则表达式向前搜索  
M-x               search-backward-regexp 正则表达式向后搜索

替换

M-x                replace-string                  替换   
M-x                replace-regexp                正则表达式替换

询问替换

M-% M-x       query-replace              询问替换 
C-M-% M-x   query-replace-regexp 正则表达式询问替换

取消搜索

C-g 取消搜索,光标返回搜索前的位置
RET结束搜索,光标停留在当前位置。

批量处理

批量处理的命令应该有很多,这里列出2个:
选中区域, M-x untabify:将 TAB 字符转换为空格
选中区域, M-x indent-region:对齐文本块





Emacs快捷键的总结

文件操作

C-x C-f 打开文件,出现提示时输入/username@host:filepath可编辑FTP文件
C-x C-v 打开一个文件,取代当前缓冲区
C-x C-s 保存文件
C-x C-w 存为新文件
C-x i 插入文件
C-x C-q 切换为只读或者读写模式
C-x C-c 退出Emacs

编辑操作

C-f 前进一个字符
C-b 后退一个字符
M-f 前进一个字
M-b 后退一个字
C-a 移到行首
C-e 移到行尾
M-a 移到句首
M-e 移到句尾
C-p 后退一行
C-n 前进一行
M-x goto-line 跳到指定行
C-v 向下翻页
M-v 向上翻页
M-< 缓冲区头部
M-> 缓冲区尾部

C-M-f 向前匹配括号
C-M-b 向后匹配括号

C-l 当前行居中

M-n or C-u n 重复操作随后的命令n次
C-u 重复操作随后的命令4次
C-u C-u 重复操作随后的命令8次
C-x ESC ESC 执行历史命令记录,M-p选择上一条命令,M-n选择下一条命令

C-d 删除一个字符
M-d 删除一个字
C-k 删除一行
M-k 删除一句
C-w 删除标记区域

C-y 粘贴删除的内容

注意:C-y可以粘贴连续C-k删除的内容;先按C-y,然后按M-y可以选择粘贴被删除的内容

C-@ 标记开始区域
C-x h 标记所有文字
C-x C-x 交换光标位置和区域标记区开头
M-w 复制标记区域

C-_ or C-x u 撤消操作

执行SHELL命令

M-x shell 打开SHELL
M-! 执行SHELL命令 (shell-command)
M-1 M-! 执行SHELL命令,命令输出插入光标位置,不打开新输出窗口
M-| 针对某一特定区域执行命令(shell-command-on-region), 比如 C-x h M-|uuencode

窗口操作

C-x 0 关闭本窗口
C-x 1 只留下一个窗口
C-x 2 垂直均分窗口
C-x 3 水平均分窗口
C-x o 切换到别的窗口
C-x s 保存所有窗口的缓冲
C-x b 选择当前窗口的缓冲区
C-x ^ 纵向扩大窗口
C-x } 横向扩大窗口

缓冲区列表操作

C-x C-b 打开缓冲区列表
d or k 标记为删除
~ 标记为未修改状态
% 标记为只读
s 保存缓冲
u 取消标记
x 执行标记的操作

f 在当前窗口打开该缓冲区
o 在其他窗口打开该缓冲区

目录操作

C-x d 打开目录模式
s 按日期/文件名排序显示
v 阅读光标所在的文件
q 退出阅读的文件
d 标记为删除
x 执行标记
D 马上删除当前文件
C 拷贝当前文件
R 重名名当前文件
+ 新建文件夹
Z 压缩文件
! 对光标所在的文件执行SHELL命令
g 刷新显示
i 在当前缓冲区的末尾插入子目录的内容

[n]m 标记光标所在的文件,如果指定n,则从光标所在的文件起后n个文件被标记
[n]u 取消当前光标标记的文件,n的含义同上
t 反向标记文件
%-m 正则标记

q 退出目录模式

说明:在目录模式中,如果输入!,在命令行中包含*或者?,有特殊的含义。*匹配当前光标所在的文件和所有标记的文件,?分别在每一个标记的文件上执行该命令。

程序编译

M-x compile 执行编译操作
M-x gdb GDB排错
M-x dbx DBX排错
M-x xdb XDB排错
M-x sdb SDB排错

搜索模式

C-s key 向前搜索
C-s 查找下一个
ENTER 停止搜索
C-r key 反向搜索
C-s C-w 以光标所在位置的字为关键字搜索
C-s C-s 重复上次搜索
C-r C-r 重复上次反向搜索
C-s ENTER C-w 进入单词搜索模式
C-r ENTER C-w 进入反向单词搜索模式
M-x replace-string ENTER search-string ENTER 替换
M-% search-string ENTER replace-string ENTER 交互替换
C-r 在进入查找/替换模式后,该命令进入迭代编辑模式
C-M-x 退出迭代编辑模式,返回到查找/替换模式
C-M-s 向前正则搜索
C-M-r 向后正则搜索
C-M-% 正则交互替换

SHELL模式

C-c C-c 相当于Bash下的C-c
C-c C-z 相当于Bash下的C-z
C-c C-d 相当于Bash下的C-d
M-p 执行前一条命令
C-n 执行下一条命令
C-c C-o 删除最后一条命令产生的输出
C-c C-r 屏幕滚动到最后一条命令输出的开头
C-c C-e 屏幕滚动到最后一套命令输出的结尾
C-c C-p 查看前一条命令的输出
C-c C-n 查看后一条命令的输出

打印资料

M-x print-buffer 先使用pr,然后使用lpr
M-x lpr-buffer 直接使用lpr
M-x print-region
M-x lpr-region

收发邮件

M-x mail 发送邮件, C-c C-s 发送,C-c C-c 发送并退出
M-x rmail 接受邮件

Emacs快捷键的总结

文件操作

C-x C-f 打开文件,出现提示时输入/username@host:filepath可编辑FTP文件
C-x C-v 打开一个文件,取代当前缓冲区
C-x C-s 保存文件
C-x C-w 存为新文件
C-x i 插入文件
C-x C-q 切换为只读或者读写模式
C-x C-c 退出Emacs

编辑操作

C-f 前进一个字符
C-b 后退一个字符
M-f 前进一个字
M-b 后退一个字
C-a 移到行首
C-e 移到行尾
M-a 移到句首
M-e 移到句尾
C-p 后退一行
C-n 前进一行
M-x goto-line 跳到指定行
C-v 向下翻页
M-v 向上翻页
M-< 缓冲区头部
M-> 缓冲区尾部

C-M-f 向前匹配括号
C-M-b 向后匹配括号

C-l 当前行居中

M-n or C-u n 重复操作随后的命令n次
C-u 重复操作随后的命令4次
C-u C-u 重复操作随后的命令8次
C-x ESC ESC 执行历史命令记录,M-p选择上一条命令,M-n选择下一条命令

C-d 删除一个字符
M-d 删除一个字
C-k 删除一行
M-k 删除一句
C-w 删除标记区域

C-y 粘贴删除的内容

注意:C-y可以粘贴连续C-k删除的内容;先按C-y,然后按M-y可以选择粘贴被删除的内容

C-@ 标记开始区域
C-x h 标记所有文字
C-x C-x 交换光标位置和区域标记区开头
M-w 复制标记区域

C-_ or C-x u 撤消操作

执行SHELL命令

M-x shell 打开SHELL
M-! 执行SHELL命令 (shell-command)
M-1 M-! 执行SHELL命令,命令输出插入光标位置,不打开新输出窗口
M-| 针对某一特定区域执行命令(shell-command-on-region), 比如 C-x h M-|uuencode

窗口操作

C-x 0 关闭本窗口
C-x 1 只留下一个窗口
C-x 2 垂直均分窗口
C-x 3 水平均分窗口
C-x o 切换到别的窗口
C-x s 保存所有窗口的缓冲
C-x b 选择当前窗口的缓冲区
C-x ^ 纵向扩大窗口
C-x } 横向扩大窗口

缓冲区列表操作

C-x C-b 打开缓冲区列表
d or k 标记为删除
~ 标记为未修改状态
% 标记为只读
s 保存缓冲
u 取消标记
x 执行标记的操作

f 在当前窗口打开该缓冲区
o 在其他窗口打开该缓冲区

目录操作

C-x d 打开目录模式
s 按日期/文件名排序显示
v 阅读光标所在的文件
q 退出阅读的文件
d 标记为删除
x 执行标记
D 马上删除当前文件
C 拷贝当前文件
R 重名名当前文件
+ 新建文件夹
Z 压缩文件
! 对光标所在的文件执行SHELL命令
g 刷新显示
i 在当前缓冲区的末尾插入子目录的内容

[n]m 标记光标所在的文件,如果指定n,则从光标所在的文件起后n个文件被标记
[n]u 取消当前光标标记的文件,n的含义同上
t 反向标记文件
%-m 正则标记

q 退出目录模式

说明:在目录模式中,如果输入!,在命令行中包含*或者?,有特殊的含义。*匹配当前光标所在的文件和所有标记的文件,?分别在每一个标记的文件上执行该命令。

程序编译

M-x compile 执行编译操作
M-x gdb GDB排错
M-x dbx DBX排错
M-x xdb XDB排错
M-x sdb SDB排错

搜索模式

C-s key 向前搜索
C-s 查找下一个
ENTER 停止搜索
C-r key 反向搜索
C-s C-w 以光标所在位置的字为关键字搜索
C-s C-s 重复上次搜索
C-r C-r 重复上次反向搜索
C-s ENTER C-w 进入单词搜索模式
C-r ENTER C-w 进入反向单词搜索模式
M-x replace-string ENTER search-string ENTER 替换
M-% search-string ENTER replace-string ENTER 交互替换
C-r 在进入查找/替换模式后,该命令进入迭代编辑模式
C-M-x 退出迭代编辑模式,返回到查找/替换模式
C-M-s 向前正则搜索
C-M-r 向后正则搜索
C-M-% 正则交互替换

SHELL模式

C-c C-c 相当于Bash下的C-c
C-c C-z 相当于Bash下的C-z
C-c C-d 相当于Bash下的C-d
M-p 执行前一条命令
C-n 执行下一条命令
C-c C-o 删除最后一条命令产生的输出
C-c C-r 屏幕滚动到最后一条命令输出的开头
C-c C-e 屏幕滚动到最后一套命令输出的结尾
C-c C-p 查看前一条命令的输出
C-c C-n 查看后一条命令的输出

打印资料

M-x print-buffer 先使用pr,然后使用lpr
M-x lpr-buffer 直接使用lpr
M-x print-region
M-x lpr-region

收发邮件

M-x mail 发送邮件, C-c C-s 发送,C-c C-c 发送并退出
M-x rmail 接受邮件


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值