一直想解决自动补全的功能,因为这时现代开发环境必备的特色。google了一下,很多使用auto-complete和yasnippet的,于是自己动手装了起来。先查阅安装文档,又参考别人的方法,各种曲折,最后还是全部配好了,并且学了学这两种插件的扩展方法,可以自己定义补全的内容了——Cool !
先介绍一下这二者的关系,auto-complete是一个补全框架,也提供了简单的补全源(source);yasnippet可以作为auto-complete的补全source,也可以单独使用,不过还是配合auto-complete使用比较好。当然auto-complete和可以使用其他的source,以后再试试。
Table of Contents
1 安装和配置
1.1 auto-complete
下载auto-complete-1.3.1版本,参考文档中的安装方法。
1.3版本没有办法使用yasnippet的最新版本,解决方法为:到auto-complete的github上clone下来auto-complete-config.el,替换掉安装目录中的该文件, 记得要重新byte-compile一下。
其配置文件如下:
(add-to-list 'load-path "~/.emacs.d/plugins/auto-complete") (require 'auto-complete-config) (add-to-list 'ac-dictionary-directories "~/.emacs.d/plugins/auto-complete/ac-dict") (ac-config-default) (setq ac-use-quick-help nil) (setq ac-auto-start 4) ;; 输入4个字符才开始补全 (global-set-key "\M-/" 'auto-complete) ;; 补全的快捷键,用于需要提前补全 ;; Show menu 0.8 second later (setq ac-auto-show-menu 0.8) ;; 选择菜单项的快捷键 (setq ac-use-menu-map t) (define-key ac-menu-map "\C-n" 'ac-next) (define-key ac-menu-map "\C-p" 'ac-previous) ;; menu设置为12 lines (setq ac-menu-height 12)
auto-complete默认支持常见语言的补全,其具体配置在auto-complete-config.el中,参见该文件的最后几行。
对于auto-complete不支持的mode还需要额外的配置,比如latex
;; latex-mode (add-to-list 'ac-modes 'latex-mode) (defun ac-latex-mode-setup() (setq ac-sources (append '(ac-source-yasnippet) ac-sources))) (add-hook 'latex-mode-hook 'ac-latex-mode-setup)
1.2 yasnippet
安装yasnippet可以直接从github中clone下来的。 安装过程,参考文档。 我的关于yasnippet的配置文件如下,注意这段要放在auto-complete相关配置前面,因为ac是需要用到yas的。
(add-to-list 'load-path "~/.emacs.d/plugins/yasnippet") (require 'yasnippet) (setq yas/prompt-functions '(yas/dropdown-prompt yas/x-prompt yas/completing-prompt yas/ido-prompt yas/no-prompt)) (yas/global-mode 1) (yas/minor-mode-on) ; 以minor mode打开,这样才能配合主mode使用
2 扩展
详细的扩展方法还是参考用户手册,这里只给出简单的介绍。
2.1 auto-complete
扩展ac的方法比较简单,在ac的安装目录中有ac-dict有**-mode的文本文件,直接修改这个文件就可以了。
2.2 yasnippet
ac的简单的扩展方法决定了,它只能作为一个框架来使用,更强大的功能只能由其他工具提供。
关于yasnippet的扩展方法,从一个内置的snippet例子开始