02 March 2016
版权声明:本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名elloop(包含链接)

前言

本文介绍了Emacs里的自动补全功能,包括其内置的缓冲区文件名补全和使用扩展package实现的文本的补全和程序代码的补全功能等。

本文提到的几个package(或mode):

缓冲区名字补全: ido-mode

在使用C-x b或者M-x dired输入缓冲区名字或者路径名字的时候,需要记住使用过的缓冲区或者文件目录的结构,这使得用户要输入记住和输入很多东西,增加了使用Emacs的困难程度。

ido-mode解决了这个问题,它会在我切换缓冲区或者要使用C-x C-f查找文件的时候,自动为我列出匹配项目,我仅需键入有限的几个输入,或者根本不用输入,直接使用C-s向后选择ido-mode给提供的选项,使用C-r向前选择,然后回车即可选中。

要打开ido-mode,使用M-x customize,然后搜索ido,找到ido-mode打开即可,你可以让它只作用于buffer补全或者只作用于文件补全,也可以同时作用。

要想让ido-mode支持模糊匹配,还需要打开:Ido Enable Flex Matchin。

auto-complete 补全

auto-complete这个package是很多以auto-complete-开头的其它package的基础,所以要想使用这个系列的补全插件要先安装auto-complete。

根据我的使用情况auto-complete package可以在一下两个package archive(package源,见第三篇文章)找到:

  • (“melpa” . “https://melpa.org/packages/”)
  • (“marmalade” . “http://marmalade-repo.org/packages/”)

确保添加了上面任何一个package archive之后,执行:

M-x package-install RET auto-complete RET 进行安装。

也可以使用前面第三篇文章里,使用M-x list- package进入包安装界面,搜索auto-complete来进行安装。

company-mode :complete anything

company是Emacs中一个文本补全框架,正如其名字,它可以补全任何东西。使用也很简单。

网上有关于company和auto-complete功能比较的讨论:More info about how this compares to auto-complete

具体使用哪个更合适,我现在还没有结论,要自己尝试后才能知道哪个更适合自己。

yasnippet: template complete

yasnippet跟Vim中的UltiSnip很像,可以自己定义补全模板,定义模板中光标的停留地点和跳转顺序等。

yasnippet甚至支持在自定义模板的时候嵌入Elisp代码。

yasnippet针对每个mode可以有一套补全的模板,模板文件在yasnippet/snippets/下面,按照mode名字单独存放。


作者水平有限,对相关知识的理解和总结难免有错误,还望给予指正,非常感谢!

在这里也能看到这篇文章:github博客, CSDN博客, 欢迎访问



分享到