上篇隨筆記錄了在emacs中使用go-mode和goflymake搭建了go語言的簡單編程環境(推送門),今天來記錄一下使用gocode+auto-complete配置emacs中go語言的自動補全功能。先看一下效果圖😄,個人emacs配置能夠參考myemacs-conf。html
gocode是nsf寫的各類編輯器提供go語言自動補全功能的工具。參考github中的README.md對gocode進行一下安裝。c++
$ go get -u github.com/nsf/gocode
安裝完gocode後,運行下面命令設置一下gocode的propose-builtins(默認爲false,不會自動聯想go語言內置的類型、常量和方法等),git
$ gocode set propose-builtins true
下面開始設置emacs。github
能夠在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進行自動安裝,dom
$ 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所在目錄。post
從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
***************
* 歡迎轉載,但請註明出處哦 *
***************