Skip to content

Instantly share code, notes, and snippets.

@errord
Created June 6, 2014 03:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save errord/fdbd07f5464580e6797b to your computer and use it in GitHub Desktop.
Save errord/fdbd07f5464580e6797b to your computer and use it in GitHub Desktop.
使用auto-complete-mode
使用auto-complete-mode
1 下载auto-complete完整源码
大多数情况下,我还是推荐使用源码库中的最新版本,这样可以避免很多奇怪的问题。所以这里列出了使用auto-complete-mode所涉及的一些源码库:
auto-complete-mode 主源码库
https://github.com/m2ym/auto-complete.git
popup功能库
https://github.com/m2ym/popup-el.git
使用fuzzy模式匹配
https://github.com/m2ym/fuzzy-el.git
增强列表模式
https://github.com/winterTTr/emacs-of-winterTTr/blob/master/.emacs.d/plugins/auto-complete-suite/pos-tip/pos-tip.el
在我这里,我使用了上面这些源码库中的最新代码作为配置。我们可以看到,前三者的作者是同一人。原本三个库都是作为auto-complete的一部分的,但是作者现在将三者分开成独立的源码进行管理。所以要使用相应的功能,应该保证三个源码都已经下载(clone)到本地。
2 auto-complete的配置
2.1 将路径添加到emacs系统中
(add-to-list 'load-path "path-to-download-folder/pos-tip")
(add-to-list 'load-path "path-to-download-folder/fuzzy-el")
(add-to-list 'load-path "path-to-download-folder/popup-el")
(add-to-list 'load-path "path-to-download-folder/auto-complete")
2.2 加载auto-complete并添加字典路径
在auto-complete的源码中,已经预先定义了一些非常常用的补全模板,这就是这里的字典路径。
(require 'auto-complete-config)
(add-to-list 'ac-dictionary-directories
"path-to-download-folder/auto-complete/dict")
(ac-config-default)
2.3 使用增强的popup列表
在auto-complete中,默认的popup列表使用的是native的模式的,这并不是非常的好看。而且,在很多时候,会出现排版错误的情况。所以在这里,建议使用增强型的popup,这也是pos-tip存在的原因。我们可以简单比较一下:
这是使用native模式
使用pos-tip模式
从截图来看,效果不大,但是在实际使用的情况下,还是能有比较明显的区别的。配置代码如下:
(require 'pos-tip)
(setq ac-quick-help-prefer-pos-tip t) ;default is t
这里说明一点:查看ac-quick-help-use-pos-tip-p的实现,可以发现单一的设置ac-quick-help-prefer-pos-tip是无法激活pos-tip模式的,必须还需要显示的加载pos-tip。所以,这两句都是必须的。
2.4 使用quick-help
在默认情况下,quick-help应该是打开的。quick-help的功能指的是,除了给出当前可以补全的关键词之外,还在旁边弹出的popup中显示当前这个关键字的帮助,上面图中已经给出了效果。
(setq ac-use-quick-help t)
(setq ac-quick-help-delay 1.0)
2.5 设置tab键的使用模式
(setq ac-dwim t)
2.6 设置auto-complete的触发键
如果你不喜欢使用默认的自动触发ac的话,可以显示的给ac指定一个触发键,这在当前ac的功能比较费时(例如:结合clang补全)的时候,会更加有效率一些。例如:在c-mode-hook里面,我关闭了自动激活ac,并使用自定义按键Ctrl+Enter键。
(setq ac-auto-start nil) ;auto complete using clang is CPU sensitive
(ac-set-trigger-key "<C-return>")
2.7 期望某些情况仍旧触发ac功能
在使用ac时,我发现,并不是所有的按键都能触发ac的自动补全功能的,例如backspace之后,ac的补全就消失了,除非再次输入一个按键。其实,这些是可以由我们控制的,例如:这里将backspace的删除后仍旧可以触发ac补全:
(setq ac-trigger-commands
(cons 'backward-delete-char-untabify ac-trigger-commands))
其实,只要将对应的功能的函数名称加入ac-trigger-commands列表就可以,默认的情况下,这个列表里面只有self-insert-command。这也解释了,为什么只有输入字符才能激活ac的功能。
2.8 使用fuzzy功能
(setq ac-fuzzy-enable t)
这个功能,简单来说,就是在你输入错误信息的时候,仍旧采用模糊匹配去给出合理的补全关键字。当然,在输入错误的情况下,已经不能自动激活ac的功能,这时需要使用按键强制启动ac。下图就是一个fuzzy功能的例子:
2.9 与yasnippet相兼容
其实,ac中是可以使用yasnippet的关键字也出现在补全列表的,同时利用这个关键字补全,将直接触发yasnippet的功能。这个在我当前版本的默认设置中已经包含了。如果没有,可以查看 ac-sources中是否包含 ac-source-yasnippet并添加。
我们可以通过颜色区分yasnippet的补全关键字,还是非常明显的。在我这里,橘红色的关键字,就是yasnippet的关键字,和其他的有明显的区分。
2.10 与clang相结合补全c/c++上下文
请参考http://blog.csdn.net/winterttr/article/details/7273345
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment