emacs的使用技巧记录

本文

主要记录了emacs使用过程中的小技巧。

版本 说明
0.1 初版发布
0.2 添加参考链接

背景

  • 主机: Thinkpad S2
  • 系统: Deepin GNU/Linux 15.11
  • 内核: Debian 6.3.0-18+deb9u1
  • emacs版本:Linux GNU Emacs 26.3

参考

帮助文档

关于阅读文档,有一些有用的命令,其中最有用的有以下几个命令:

  • C-h C-h (用于显示帮助的帮助)
  • C-h k(用于显示按键的说明)
  • C-h f (用于显示函数的说明)
  • C-h v (用于显示变量的说明)
  • C-h r (在Emacs内阅读Emacs manual).

快捷键

快速放大字体

  • C-x C-=:放大
  • C-x C–:缩小

文本编辑相关

Emacs 中的批量查找与替换

Emacs 有很强大的批量查找与替换功能。操作如下:

  • 切换到源码项目目录,然后 M-x find-dired ,输入 . ,表示查找当前目录下的所有文件,回车,在输入 -name “.el”* ,表示只查找.el文件。再次回车后,Emacs 会打开一个缓冲区显示出项目中所有的.el后缀的文件
  • 在显示所有查找文件的缓存页面,可以直接按t来标记所有文件,或者按m来一个一个的进行标记,如果标记错误了,可以按u来取消标记
  • 标记完所有要进行查找替换的文件之后按Q快捷键,使用正则表达式来查找与替换被标记文件中的内容,第一次需要输入的是被查找项,回车之后在输入替换项,之后在回车,Emacs 会逐个打开被标记的文件,然后用高亮显示被正则搜索到的要替换的语句,逐个的问你是否要进行替换
  • 显示的高亮替换项,你可以按y来确认替换,也可以按n取消替换,或者按!强制不提示而进行所有替换
  • 替换完成后 C-x s 保存所有修改项,会逐个询问是否保存,yes代表保存,no代表不保存,!代表强制保存所有

Emacs 的查找与替换功能看似比其他软件繁琐与麻烦许多,实际上这是非常稳健的操作方式,查找与替换的过程非常透明化,你可以详细的看到要被替换的项,仔细谨慎的进行确认替换,之间也有非常多的机会来中断查找替换过程,来恢复文件中被错误替换的内容。

录制键盘操作的宏

要录制macro, 先按下 F3, 然后进行你想要被录制的那些操作,再按下 F4 停止录制. 然后就可以通过不断的的按下 F4 来重复这些操作。

使用f3调用emacs counter,同时搭配emacs counter的设置命令,可以在宏操作中插入自增数字:

  • f3开启录制宏操作后,当再次按下f3键时,开启emacs counter,默认起始为0,按f4后结束宏录制,再次按f4执行宏操作,插入的数字会递增。
  • emacs counter的设置命令:C-x C-k C-i (kmacro-insert-counter)插入数字
  • emacs counter的设置命令:C-x C-k C-c’ (kmacro-set-counter) 设置起始值

Ediff

用Ediff来比较一个文件的两个版本很方便。 我经常使用的一个命令是 M-x ediff-buffers。 Emacs会高亮buffer间不同的地方并弹出一个新窗口供你输入命令。 例如,在新窗口中,按下n和p可以两buffer不同内容的region之间跳转。 对于每个region,你可以用a(或b)拷贝第一个(或第二个)buffer的内容到另一个buffer。 你甚至可以在激活Ediff的情况下编辑buffer。 然后再却换到Ediff窗口然后按下!来重新比对不同之处。在编辑文件的同时能够交互式地比对两个文件的不同之处,对于编辑文件那是相当有帮助。

mark ring

你再也不同在buffer中到处找”刚才的那个位置”了。 每次你跳转了光标(e。g。 进行了文本搜索或者按下了 M-< 或 M->), Emacs使用mark标记下你的前一个位置。 这就好像你在看书时用手指插入某一页然后将书翻到另一页一样。 你按下 C-x C-x 就会跳转到那个mark处。 不仅如此,Emacs会保存多达16个mark,你使用 C-u C-SPC 跳转到更早些时候的mark处。 这就使得mark和mark ring成为一个很好用的导航工具了。 你完全可以不假思索的使用它: 当你想跳回上之前的位置时,不断按下 C-u C-SPC 直到你回到想要的位置为止。

(你也可以显式的用 C-SPC 设置mark, 但是我几乎不需要通过这种方式来设置导航的坐标,只是在标示region时才会这样做。)


文章原创,可能存在部分错误,欢迎指正,联系邮箱 cao_arvin@163.com。