helm是emacs的一个第三方elisp库, 是emacs anything的一个fork,对anything的代码进行了整理和模块化, 主要的功能是方便查找各种文件内容,buffer切换,emacs命令执行等等.
安装很简单,从github上下载helm的源码包: https://github.com/emacs-helm/helm将这个包解压到你的elisp源码目录中,这里我的目录是 : ~/.emacs.d/elpa/helm然后修改emacs 默认配置文件.emacs在里面添加一下两句:(add-to-list 'load-path "~/.emacs.d/elpa/helm")
(require 'helm-config)
重启emacs后,就可以通过命令来使用helm了,当然也可以将helm命令绑定快捷键
如果是emacs24以后可以使用另外一种安装方式:
将以下语句写入 ~/.emacs.d/init.el(require 'package)
(setq package-archives '(("gnu" . "http://elpa.gnu.org/packages/")
("marmalade" . "http://marmalade-repo.org/packages/")
("melpa" . "http://melpa.milkbox.net/packages/")))
(package-initialize)
用emacs打开刚写入的init.el文件, 使用组合见M-x ,然后输入eval-buffer,M-x,然后输入package-refresh-contents 然后等待链接完毕, 再次M-x ,输入package-install然后输入helm,emacs会自动安装完成, 默认安装目录为~/.emacs.d/elpa/
安装配置完成后,重启emacs
M-x,输入helm-buffers-list 回出现helm的buffer list 具体样式如下图
使用很简单了,使用C-n 和 C-p上下切换,进入那个buffer回车进行, 也可以直接输入某个已经打开的文件名,具体什么效果,实验下就知道了....,另外在截图中,还有这个功能的附加功能的快捷键,但是这些功能平常都不常用, 看来看去只有M-D 关闭buffer这个功能实用. 个人觉得可以把 helm-buffers-list绑定到C-x C-b 覆盖默认的buffer管理会方便许多
M-x , 输入 helm-find-files,就可以看到下图的样式程序默认情况下当输入某个文件名或者目录名唯一情况下会将名字自动补全,并且会在上面的列表中显示所有文件名.选择方式和buffer相同,在这个功能中有很多有用的子功能,这些子功能都配有默认快捷键:
- C-x C-f 相当与locate命令,输入某个模糊文件名查找出所有匹配结果
- C-s 相当于grep命令, 可以选择某个文件,然后输入要查询字段,显示和grep这个文件相同,可以M-a选择所有文件,从所有文件中查询
- M-R 重命名选定文件
- M-C copy选定文件
- M-S 为选定文件建立软链接
- M-H 为选定文件建立硬链接
- M-D 删除某个文件
- C-
取消/开启自动补全文件名功能 - C-l 退到上级目录
- C-x @ 用root打开某个文件
手动补全文件名 个人感觉尽管自动补全文件名很快捷但是有很多不方便的地方, 使用中遇到一个问题:我同一个目录下有 hello/ hello1.txt hello2.sh 这三个,两个文件和一个目录,通过helm的自动补全,永远无法输入hello1.txt 和 hello2.sh这两个文件,因为输入到hello的时候进行了自动补全,自动进入了这个目录,这样就必须在有这样的目录情况下先关闭自动补全文件名,其实也就是按下C-backspace关闭,完成后在按下这个组合键开启,总感觉麻烦,而且习惯了按tab键补全, 在打开helm find files时自动补全是默认开启的. 使用emacs就是要使用的顺手,要使自己顺手只有改他代码,看过之后,要改的很简单打开~/.emacs.d/elpa/helm/helm-files.el 找到(defcustom helm-ff-auto-update-initial-value t
"Auto update when only one candidate directory is matched.
This is the default value when starting `helm-find-files'."
:group 'helm-files
:type 'boolean)
将helm-ff-auto-update-initial-value 后的 t 改为nil 这样就自动补全默认就关闭了找到(define-key map (kbd "") 'helm-execute-persistent-action)) 将尖括号里的right修改为tab 保存重启emacs之后按下tab就会补全(原来的tab键的功能是一个选项,感觉用的时候不多)将helm-find-files 映射到全局的C-x C-f 代替默认
M-x , helm-M-x,就会进入helm的命令输入buffer,
将这个命令映射到全局M-X 貌似M-x不能映射成功
locate: helm-locate 是一个全局命令,可以不依赖helm-buffers, 将他绑定到全局快捷键,可以减少很多查找步骤top: helm-top 也是一个全局命令, 相当于top命令还有些其他的工具,有机会慢慢研究先这些吧