标签:
上篇随笔记录了在emacs中使用go-mode和goflymake搭建了go语言的简单编程环境(推送门),今天来记录一下使用gocode+auto-complete配置emacs中go语言的自动补全功能。先看一下效果图??,我的emacs配置可以参考myemacs-conf。
gocode是nsf写的各种编辑器提供go语言自动补全功能的工具。参考github中的README.md对gocode进行一下安装。
$ go get -u github.com/nsf/gocode
安装完gocode后,运行下面命令设置一下gocode的propose-builtins(默认为false,不会自动联想go语言内置的类型、常量和方法等),
$ gocode set propose-builtins true
下面开始设置emacs。
可以在emacs中配置auto-complete和company-mode来结合gocode提供go语言的自动补全功能,gocode库中也分别提供了针对这两种配置的指南。自己都配置来体验了一下,还是觉得auto-complete使用起来的体验好点。这里就纪录一下auto-complete的配置了,关于company-mode的配置可以参考emacs-company进行配置。
auto-complete的官方使用手册中提供了安装方法。我是采用手工安装的方式进行安装,先下载auto-complete代码库,
$ git clone https://github.com/auto-complete/auto-complete.git
然后进入auto-complete目录,通过etc/install.el进行自动安装,
$ cd auto-complete/
$ emacs -batch -l etc/install.el
安装命令会提供“Install to:”,让你输入要安装的目标目录,例如输入 ~/.emacs.d。安装成功后,会提示如下内容,
Successfully installed! Add the following code to your .emacs: (add-to-list ‘load-path "~/.emacs.d") (require ‘auto-complete-config) (add-to-list ‘ac-dictionary-directories "~/.emacs.d/ac-dict") (ac-config-default)
按照提示将相关配置添加到~/.emacs配置文件中即可。
这里需要说明个问题:我在安装完成后,在加载auto-complete-mode的时候,会提示找不到popup。于是需要自己下载popop.el文件,并靠背到auto-complete.el所在目录。
从gocode发行包或者gocode的源代码库中拷贝emacs/go-autocomplete.ele文件到~/.emacs.d目录,然后在~/.emacs配置文件中添加下面配置内容,
(require ‘go-autocomplete) (require ‘auto-complete-config) (ac-config-default)
于是,emacs的go语言自动补全功能就可以用了。不过,还需要对默认的配置进行一下修改了提供易用性。
auto-complete可以通过ac-ignore-case变量来控制联想是否忽略大小写,
;; 设置为t表示忽略大小写,设置为nil表示区分大小写 ;; 默认情况下为smart,表示如果输入的字符串不含有大写字符才会忽略大小写 (setq ac-ignore-case t)
auto-complete提供了TAB、UP、DOWN、M-p和M-n来上下移动选择自动联想项。对于emacs使用惯的用户都习惯了使用C-p和C-n来上下移动,而且在Mac OS X系统下M-p和M-n快捷键实在是不太好按。
(setq ac-use-menu-map t) (define-key ac-menu-map "\C-n" ‘ac-next) (define-key ac-menu-map "\C-p" ‘ac-previous)
默认情况下,go语言的自动补全会存在下面一个问题:md5和md5Inst的联想项重复出现。
在emacs的该缓冲区中运行M-: ac-sources看了一下,ac-sources(关于ac-sources是什么,简单说就是auto-complete自动联想显示的数据从哪里来的,更详细信息请参考官方文档)的值为(ac-source-go ac-source-abbrev ac-source-dictionary ac-source-words-in-same-mode-buffers)。问题就处在ac-source-go和ac-source-words-in-same-mode-buffers这两个。auto-complete通过ac-source-go获取的gocode提供的分析数据(前面两项),又通过ac-source-words-in-same-mode-buffers中获取了在该文件中出现的单词(后面三项),于是导致出现了重复。我们通过修改go-autocomplete.el文件了删除掉ac-source-words-in-same-mode-buffers。
(add-hook ‘go-mode-hook #‘(lambda() (setq ac-sources ‘(ac-source-go ac-source-abbrev ac-source-dictionary))))
现在的效果如下,没有出现重复项了,
关于auto-complete的详细使用说明,请参考官方使用文档。这里只说一下几项简单的使用说明。
自动联想列表显示之后,<TAB>键便临时被赋予了选择联想项的功能。存在下面三种情况:
<RET>键用于使用选中项自动补全,其效果有:
所谓联想项的帮助信息,就是关于联想项的详细说明文档。 auto-complete有两种帮助显示方式:
关于quick help,如下图中黄色区域所示,上下选择联想项后,auto-complete默认显示该联想项的文档说明(如果存在的话)。
如果某个联想项的帮助信息太多,quick help显示不太方便查看,可以按f1键来打开buffer help来查看,如下图所示。可以使用C-M-v或者C-M-S-v快捷键来上下滚动buffer help缓冲区以查看帮助信息,其它快捷键将导致buffer help缓冲区自动关闭。
字典是字符串的列表,auto-complete可以通过字典提供自动联想项的配置。 auto-complete支持三种类型字典:
参考列表:
http://dominik.honnef.co/posts/2013/03/emacs-go-1/
https://github.com/nsf/gocode
http://auto-complete.org/doc/manual.html
***************
* 欢迎转载,但请注明出处哦 *
***************
gocode+auto-complete搭建emacs的go语言自动补全功能
标签:
原文地址:http://www.cnblogs.com/lienhua34/p/5839510.html