Extra Cookie

Yet Another Programmer's Blog

Emacs 不流行但很拉风的 Feature

align-regexp

相必大家都用过 C-M-\,一般都能满足需要,可是有时候需要按一行中的某些字符对齐,比如一些变态的语言或者编程规范规定赋值语句需要按 “=” 对齐,那怎么办?

align-regexp 使用起来只需要选中需要对齐的 region,然后执行,输入需要匹配的正则表达式即可。

比如如下代码:

1
2
3
int var = 2;
int variable_is_kinda_long = 3;
int var_is_less_long = 4;

需要按 = 对齐,选中执行 M-x align-regexp, 然后 regexp 填 =,结果如下:

1
2
3
int var                    = 2;
int variable_is_kinda_long = 3;
int var_is_less_long       = 4;

occur

输出 buffer 中符合正则表达式的所有行,在查找替换时,或者需要重构代码时,事先用 occur 来验证下构造的正则表达式的效果,可以避免一时自信或者冲动毁了先前的工作.

anything

用过 Mac 的 quicksilver,或者 Linux 上的 gnome go 的同学,也许会觉得简直是神器,自称操作系统 Emacs 岂能自甘落后,anything 绝对值得拥有。

M-x anything, 会出现 anything buffer,其中显示当前目录下所有文件,当前打开的所有 buffer 以及最近打开的文件,只需要挑着敲文件名包含的少数字母,文件会被选中,然后直接 tab,buffer 会显示所有操作,输入操作名称,当然是少数字母,执行即可,也可以使用 C-n C-p 来选择。

我使用的是 anything-config,anything-startup 会让 C-x f 变得很乱很难用,不如 ido-mode 好用。

tramp

远程文件编辑的利器,C-x f username@user.com:filepath, 流畅俨如本地文件,该工具其实很流行,但还有一个功能很少被人使用,但却可以解决烦恼。

有多少次你编辑了文件,悲催的发现是只读文件,不能保存,你又不想退出 emacs,只能 sudo vim,然后用非常别扭的方式编辑文件。但有了 tramp,只需要 C-x f /sudo::/etc/passw,烦恼木有了。

刚在 Emacs 中输入上面那个远程文件的链接时,竟然也触发启动了 tramp 连接,然后网络连不上于是 Emacs 僵死了,只得 force quit 了下,看来不死之身有时候也会出问题的。

re-builder

实时高亮显示当前 buffer 可以匹配所输入正则表达式的字串,非常适合查找替换前做检查。功能跟 occur 差不多,只是 occur 另开一个 buffer 用来显示匹配的行,re-builder 直接显示在当前 buffer。

ractangle

如下矩阵:

1
2
3
1234
2345
3456

假如我们需要剪切左上 2x2 矩阵,从1排1列,C-space 选中,挪动光标到2排2列,C-x r k, 然后 C-x r y 复制,结果如下:

1
2
3
4
5
6
7
8
// After cut
34
45
3456

// Copy
12
23

C-x r o 插入空格到选中矩阵,C-x r c 用空格替换所选中矩阵,C-x r d 删除所选矩阵,如下三操作区别 (左上2x2矩阵):

1
2
3
4
5
6
7
8
9
10
11
12
// C-x r o
  1234
  2345
3456
// C-x r c
  34
  45
3456
// C-x r d
34
45
3456

C-x r t 用输入字符串替换所选矩阵每行, 下图结果用 xy 替换左上 2x2 矩阵。

1
2
3
xy34
xy45
3456

auto-rever-tail-mode

我们多少次在 terminal 中 tail -f sys.log 来关注 log 的最新输出, 使用这个命令 Emacs 便自动完成该工作。

wdired-change-to-wdired-mode

在 dired-mode 使用该 mode,就可以像文件那样对 dired-mode buffer 进行编辑,可以用 regex-replace,rectangle 命令,批量更改文件名等。

hexl-mode

查看编辑非文本文件利器。

multi-occur-in-matching-buffers

可以对所有打开的 buffer 进行 regex search。

C-u C-spacebar

Emacs 记录了所有光标移动的历史,使用这个命令,可以依次回到前一个位置,在阅读代码时非常有用。

apropos

搜索包含某关键字或者匹配某正则表达式的 Emacs 命令,利用这个可以发现更多给力的 feature。

follow-mode

现在流行的是宽屏,宽度不是问题,因此 Emacs C-x 3 用的很多,但很多长的文档,要翻好多页,小拇指真疼。

竖分屏后执行 follow-mode 后,所有 buffer 显示同一文件的不同部分,可视范围翻倍,甚至数倍,这要看你的屏幕有多宽了。

最后

题目中说的非流行是依据我在发现这些 feature 的偶然程度来定的,也许里面有的可能地球人都知道或者都再用,比如我觉得的,应该大家都会用的,或者一开始就被人推荐使用的,我就没列在上面,它们是:

org-mode (org2blog), cscope, ido-mode, auto-complete, cedet, magit, yasnippet, ecb …

这里有个调查,Emacs 中最有用的 feature,大家可以参与下,另外本文中的很多 command 是我看到这个 polls 之后才觉得很强大。

最后,不能忘了很强大很强大的三个命令,分别用来查询某 key binding,某 function (command),某variable 是干啥用的:

c-h k, c-h f, c-h v

Comments