日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

gocode+auto-complete搭建emacs的go语言自动补全功能

發(fā)布時(shí)間:2025/3/21 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 gocode+auto-complete搭建emacs的go语言自动补全功能 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

上篇隨筆記錄了在emacs中使用go-mode和goflymake搭建了go語言的簡單編程環(huán)境(推送門),今天來記錄一下使用gocode+auto-complete配置emacs中g(shù)o語言的自動(dòng)補(bǔ)全功能。先看一下效果圖?,我的emacs配置可以參考myemacs-conf。

關(guān)于gocode

gocode是nsf寫的各種編輯器提供go語言自動(dòng)補(bǔ)全功能的工具。參考github中的README.md對(duì)gocode進(jìn)行一下安裝。

$ go get -u github.com/nsf/gocode

安裝完gocode后,運(yùn)行下面命令設(shè)置一下gocode的propose-builtins(默認(rèn)為false,不會(huì)自動(dòng)聯(lián)想go語言內(nèi)置的類型、常量和方法等),

$ gocode set propose-builtins true

下面開始設(shè)置emacs。

emacs配置auto-complete

?可以在emacs中配置auto-complete和company-mode來結(jié)合gocode提供go語言的自動(dòng)補(bǔ)全功能,gocode庫中也分別提供了針對(duì)這兩種配置的指南。自己都配置來體驗(yàn)了一下,還是覺得auto-complete使用起來的體驗(yàn)好點(diǎn)。這里就紀(jì)錄一下auto-complete的配置了,關(guān)于company-mode的配置可以參考emacs-company進(jìn)行配置。

?1. 安裝auto-complete

auto-complete的官方使用手冊(cè)中提供了安裝方法。我是采用手工安裝的方式進(jìn)行安裝,先下載auto-complete代碼庫,

$ git clone https://github.com/auto-complete/auto-complete.git

然后進(jìn)入auto-complete目錄,通過etc/install.el進(jìn)行自動(dòng)安裝,

$ cd auto-complete/ $ emacs -batch -l etc/install.el

安裝命令會(huì)提供“Install to:”,讓你輸入要安裝的目標(biāo)目錄,例如輸入 ~/.emacs.d。安裝成功后,會(huì)提示如下內(nèi)容,

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)

按照提示將相關(guān)配置添加到~/.emacs配置文件中即可。

這里需要說明個(gè)問題:我在安裝完成后,在加載auto-complete-mode的時(shí)候,會(huì)提示找不到popup。于是需要自己下載popop.el文件,并靠背到auto-complete.el所在目錄。

2. 安裝并配置go-autocomplete

從gocode發(fā)行包或者gocode的源代碼庫中拷貝emacs/go-autocomplete.ele文件到~/.emacs.d目錄,然后在~/.emacs配置文件中添加下面配置內(nèi)容,

(require 'go-autocomplete) (require 'auto-complete-config) (ac-config-default)

于是,emacs的go語言自動(dòng)補(bǔ)全功能就可以用了。不過,還需要對(duì)默認(rèn)的配置進(jìn)行一下修改了提供易用性。

3. 增強(qiáng)配置

i. 聯(lián)想忽略大小寫

auto-complete可以通過ac-ignore-case變量來控制聯(lián)想是否忽略大小寫,

;; 設(shè)置為t表示忽略大小寫,設(shè)置為nil表示區(qū)分大小寫 ;; 默認(rèn)情況下為smart,表示如果輸入的字符串不含有大寫字符才會(huì)忽略大小寫 (setq ac-ignore-case t)

ii. 上下選擇聯(lián)想項(xiàng)的快捷鍵

auto-complete提供了TAB、UP、DOWN、M-p和M-n來上下移動(dòng)選擇自動(dòng)聯(lián)想項(xiàng)。對(duì)于emacs使用慣的用戶都習(xí)慣了使用C-p和C-n來上下移動(dòng),而且在Mac OS X系統(tǒng)下M-p和M-n快捷鍵實(shí)在是不太好按。

(setq ac-use-menu-map t) (define-key ac-menu-map "\C-n" 'ac-next) (define-key ac-menu-map "\C-p" 'ac-previous)

iii. go-mode模式下聯(lián)想項(xiàng)來源配置

默認(rèn)情況下,go語言的自動(dòng)補(bǔ)全會(huì)存在下面一個(gè)問題:md5和md5Inst的聯(lián)想項(xiàng)重復(fù)出現(xiàn)。

在emacs的該緩沖區(qū)中運(yùn)行M-: ac-sources看了一下,ac-sources(關(guān)于ac-sources是什么,簡單說就是auto-complete自動(dòng)聯(lián)想顯示的數(shù)據(jù)從哪里來的,更詳細(xì)信息請(qǐng)參考官方文檔)的值為(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這兩個(gè)。auto-complete通過ac-source-go獲取的gocode提供的分析數(shù)據(jù)(前面兩項(xiàng)),又通過ac-source-words-in-same-mode-buffers中獲取了在該文件中出現(xiàn)的單詞(后面三項(xiàng)),于是導(dǎo)致出現(xiàn)了重復(fù)。我們通過修改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))))

現(xiàn)在的效果如下,沒有出現(xiàn)重復(fù)項(xiàng)了,

auto-complete一些使用說明

關(guān)于auto-complete的詳細(xì)使用說明,請(qǐng)參考官方使用文檔。這里只說一下幾項(xiàng)簡單的使用說明。

1. 聯(lián)想項(xiàng)的選擇

<TAB>鍵的使用

自動(dòng)聯(lián)想列表顯示之后,<TAB>鍵便臨時(shí)被賦予了選擇聯(lián)想項(xiàng)的功能。存在下面三種情況:

  • 只有一個(gè)聯(lián)想項(xiàng)時(shí),按<TAB>便是用該聯(lián)想項(xiàng)自動(dòng)補(bǔ)全;
  • 存在多個(gè)聯(lián)想項(xiàng),并且所有聯(lián)想項(xiàng)存在共同前綴,則自動(dòng)補(bǔ)全共同前綴;
  • 否則,用于在聯(lián)想項(xiàng)列表中循環(huán)選擇;

<RET>鍵的使用

<RET>鍵用于使用選中項(xiàng)自動(dòng)補(bǔ)全,其效果有:

  • 立即自動(dòng)補(bǔ)全當(dāng)前選中的聯(lián)想項(xiàng);
  • 如果該選中聯(lián)想項(xiàng)包含動(dòng)作,則執(zhí)行該動(dòng)作。

其它選擇鍵

  • 可用<up>或M-p選擇上一個(gè)聯(lián)想項(xiàng),<down>或M-n選擇下一個(gè)聯(lián)想項(xiàng);
  • 使用M-<digit>快速使用聯(lián)想列表中前10個(gè)聯(lián)想項(xiàng)自動(dòng)補(bǔ)全。

2. 聯(lián)想項(xiàng)幫助信息

所謂聯(lián)想項(xiàng)的幫助信息,就是關(guān)于聯(lián)想項(xiàng)的詳細(xì)說明文檔。 auto-complete有兩種幫助顯示方式:

  • quick help:所謂的quick help就是在選擇一個(gè)聯(lián)想項(xiàng)后,在該聯(lián)想項(xiàng)的右邊以popup的方式顯示幫助信息;
  • buffer help:所謂buffer help就是在一個(gè)buffer中顯示幫助信息。當(dāng)聯(lián)想項(xiàng)的幫助信息太長,quick help方式顯示不方便查看時(shí),可以選擇buffer help方式。通過上下鍵選擇一個(gè)聯(lián)想項(xiàng)后,按鍵即可顯示buffer help,然后通過C-M-v或C-M-S-v來上下滾動(dòng)buffer help內(nèi)容,其它鍵將會(huì)導(dǎo)致buffer help自動(dòng)關(guān)閉。

關(guān)于quick help,如下圖中黃色區(qū)域所示,上下選擇聯(lián)想項(xiàng)后,auto-complete默認(rèn)顯示該聯(lián)想項(xiàng)的文檔說明(如果存在的話)。

如果某個(gè)聯(lián)想項(xiàng)的幫助信息太多,quick help顯示不太方便查看,可以按f1鍵來打開buffer help來查看,如下圖所示。可以使用C-M-v或者C-M-S-v快捷鍵來上下滾動(dòng)buffer help緩沖區(qū)以查看幫助信息,其它快捷鍵將導(dǎo)致buffer help緩沖區(qū)自動(dòng)關(guān)閉。

3. 使用字典提供聯(lián)想項(xiàng)

字典是字符串的列表,auto-complete可以通過字典提供自動(dòng)聯(lián)想項(xiàng)的配置。 auto-complete支持三種類型字典:

  • user defined dictionary:用戶自定義字典,包括兩個(gè)列表ac-user-dictionary和ac-user-dictionary-files。其中ac-user-dictionary用于添加聯(lián)想項(xiàng)的字符串列表,修改后立即生效;而ac-user-dictionary-files則是一個(gè)自定義字典文件的列表,這些自定義字典文件都是以換行符分割的聯(lián)想項(xiàng)序列,默認(rèn)情況下~/.dict也是一個(gè)自定義字典文件(自定義字典文件會(huì)使用緩存,所以修改不會(huì)自動(dòng)生效,可以運(yùn)行ac-clear-disctionary-cache來使其生效)。注:用戶自定義字典可以用于所有緩沖區(qū)。
  • Major Mode Dictionary:以emacs主模式(major mode)命令的字典將只會(huì)在該主模式的緩沖區(qū)中生效,例如命名為c++-mode的字典只在c++-mode模式的緩沖區(qū)中生效。主模式字典文件是從ac-dictionary-directories指定的目錄列表中加載的。auto-complete的github庫的dict目錄下提供了主要emacs主模式的字典文件。(注:修改或添加后,同樣需要運(yùn)行ac-clear-disctionary-cache來清除緩存)
  • Extension Dictionary:擴(kuò)展名字典,從名稱上我們可以看出它是針對(duì)文件擴(kuò)展名來生效的。例如命名為cpp的字典文件只在*.cpp的緩沖區(qū)中生效。擴(kuò)展名字典同樣是從ac-dictionary-directories指定的目錄列表中查找的。其也存在緩存。

?

?參考列表:

http://dominik.honnef.co/posts/2013/03/emacs-go-1/

https://github.com/nsf/gocode

http://auto-complete.org/doc/manual.html

?

***************

* 歡迎轉(zhuǎn)載,但請(qǐng)注明出處哦 *

***************

轉(zhuǎn)載于:https://www.cnblogs.com/lienhua34/p/5839510.html

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的gocode+auto-complete搭建emacs的go语言自动补全功能的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。