我用Helm并且推荐你也用的原因
Table of Contents
对于初学者来说,Emacs就是个满是快捷键和命令的怪物. 由于Emacs不像VIM那样是一个真正的true modal,因此你需要学习大量的快捷键才能有效地编辑文本. GNU Emacs的创造者,Richard Stallman,对此深有感触,于是为Emacs的资深用户创造出了一款专用键盘:"GNU Emacs Human Interface Machine".
下面这张照片就是其中一款"GNU Emacs Human Interface Machine"
不开玩笑了, 若你不了解要执行的命令名称和快捷键的话,Emacs的默认界面确实是不够友好. 你可能执行了一个命令,这个命令在等待你的输入,但是你所能看到仅仅是一个空白的提示框而已. 如果你阅读过一些资料的话,可能会知道你按下TAB键就会列出可选项供你选择了. 我想这总比要全部手工输入要好点,但是如果能做到在等待你输入时直接就让你看到你的可选项的话,那就更好了. 用Helm就能做到这一点.
Helm 是一个Emacs的扩展插件, 它会給很多要求用户输入的命令都加上hooks,并用一个新命令替代了这些旧命令. 新命令不仅仅展示給用户一个提示窗口,而且还有一个由可选项组成的交互式的列表,而且列表中的选项会与你的输入进行模糊匹配并过滤掉那些不匹配的选项. 它有点类似于Sublime Text总的 goto anything 命令.
假设我想要找出一个命令可以将window分割成垂直的两部分,但是我只能记得这个命令名字中包含有'window'和'split',却不记得名字是以什么开头的. 通过 helm-apropos
命令可以很容易的浏览当前Emacs环境中的那些可用的symbols.
在上面的demo中,我运行了 helm-apropos
并且尝试搜索那些名字中'window'在前,'split'在后的那些命令. 结果没找到符合条件的选项. 所以我重新开始并搜索名字中'split'在前,'window'在后的名字. 最终我找到了那个命令: split-window-right
.
There's an important feature to note about this kind of UI that isn't immediately obvious. 由于所有的可能性都展示在了你面前,最终你可以通过使用程序来了解到这个程序的功能. 其结果是安装了helm后,Emacs变得要容易理解的多. helm对Emacs体验的改进如此之大,以至于如果Emacs不再能用helm的话,我可能会考虑换成其他的编辑器.
下面我列出了一些常用的helm命令以及我喜爱的基于helm扩展的package.
1 Built-In Helm Commands
1.1 helm-find-file / Bound to C-x C-f
使用该命令可以在你的文件系统中导航并打开文件. helm-find-file
会列出你当前工作目录下的所有文件.
按下 C-l
会让你跳到父级目录.
若你的光标处于目录上,按下 C-j
会进入该目录.
按下回车会打开文件.
很简单对不对.
1.2 helm-M-x / Bound to C-m
该命令与 helm-apropos
很类似,不同点在于它只会显示命令列表,并且按下回车会直接执行该命令.
推荐使用 helm-M-x
作为 M-x
的替代.
1.3 helm-google / No default binding
使用helm搜索Google. 该命令的一个有点在于结果会随着你的输入而改变,就好像你在浏览器中搜索google一样. 按下回车会用你的默认浏览器打开相应的链接.
1.4 helm-apropos / Bound to C-x c a
helm-apropos
会显示所有可能的命令,函数,变量和face. 你可以理解为它能显示出所有Emacs中定义过的东西. 按下回车后就能看到相关的帮助信息了.
使用该命令要注意的一件事情是:symbol列表是会随着Emacs的运行不断改变的. 这是因为Emacs就好像,怎么说呢,泥土一样. 你可能没有注意到这一点,但是Emacs是一个动态的lisp环境. 你可以随时更改某个已定义symbol的意义,也可以新增新的symbol而无需重启Emacs.
你可能看过在live lisp environment 中编程的一些展示,这就是隐藏在那些展示后面的黑魔法.
2 Helm Extensions
2.1 helm-dash
helm-dash
可以让你在已安装的"docsets"中搜索编程语言的相关文档. 可以使用 helm-dash-install-docset
命令来安装指定语言的docset, 用 helm-dash
命令来搜索. 在搜索结果上按回车会用默认的浏览器打开相应的文档.
2.2 evalator
Evalator
是我为Emacs写得一款新式REPL package,它允许你交互式地转换数据. 摩恩情况下它会运算Emacs Lisp表达式,但是如果你安装了其他计算环境的package的话,它也支持其他语言.
我主要用 evalator
来作为计算器和编写EmacsLisp和Clojure代码时的快速实验的工具. 我感觉它的效率要比普通REPL的效率高得多,因为它会自动对表达式进行运算.
Evalator开始时会提示你输入一个表达式以声称最初始的数据. 后面输入的表达式会逐个地转换该数据中的每个元素,因此它很适合用来转换list或者其他容器类型.
你还可以让evalator运行在explicit模式下,这时evalator不仅仅会转换数据,还会为你生成整个转换的等价代码.
2.3 helm-descbinds
我超喜欢这个插件. helm-descbinds
会基于你当前的major-mode和minor modes,向你显示所有可用的快捷键.
2.4 helm-projectile
若你想像Sublime Text一样浏览某个目录中的所有文件,那你应该试一下 helm-projectile
. helm-projectile
是一个为 projectile
package(它提供了许多工具来管理你的编程项目)所写的helm扩展.
所谓项目其实就是一个包含有文件的目录. 任何包含VCS目录(诸如.git或.svn这类的目录)的项目都会自动添加到projectile中.
projectile中有太多的命令值得展示了,但推荐你还是去看tuhdo的展示吧.
我希望你现在有了足够的动力去试试helm了. 它真的让Emacs的交互方式有了极大的改变.