Heim >Backend-Entwicklung >Golang >Detaillierte Erläuterung der VIM-Konfiguration der Go-Sprachumgebung

Detaillierte Erläuterung der VIM-Konfiguration der Go-Sprachumgebung

尚
nach vorne
2019-12-31 17:17:564237Durchsuche

Detaillierte Erläuterung der VIM-Konfiguration der Go-Sprachumgebung

1. Umgebungsvorbereitung:

Beschreibung der Systemumgebung:

[root@docker golang]# cat /etc/redhat-release 
CentOS Linux release 7.2.1511 (Core) 
[root@docker golang]# uname -a
Linux docker 3.10.0-229.el7.x86_64 #1 SMP Fri Mar 6 11:36:42 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
[root@docker golang]#

Bereiten Sie eine Go-Datei zum Beobachten des Konfigurations-Plugins vor. in Änderungen im Prozess:

//hellogolang.go
package main
import "fmt"
func main() {
        fmt.Println("Hello Golang!")
}

2. Plug-in-Konfiguration:

1. Vundle.vim:

#mkdir ~/.vim/bundle
#git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim

Vimrc konfigurieren: create~ /.vimrc-Datei (wenn Sie diese Datei nicht haben), fügen Sie die Vundle.vim-Konfiguration oben in der Datei hinzu:

set nocompatible              " be iMproved, required
filetype off                  " required

" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()

" let Vundle manage Vundle, required
Plugin 'gmarik/Vundle.vim'

" All of your Plugins must be added before the following line
call vundle#end()            " required
filetype plugin indent on    " required

Derzeit ist in Vim nur das Vundle.vim-Plug-in installiert . Das Bearbeiten von hellogolang.go unterscheidet sich nicht vom Bearbeiten einer gewöhnlichen Textdatei.

2 vim-go

Vim-go ist derzeit das am häufigsten verwendete Tool zum Erstellen von Golang . Das vim-Plug-in für die Entwicklungsumgebung verwende ich auch vim-go als Kern und Grundlage zum Aufbau der Umgebung. vim-go wird mit dem Open-Source-Plug-in-Manager gmarik/Vundle installiert. Vim ist derzeit der am meisten empfohlene Vim-Plug-in-Manager und übertrifft Pathogen.

Hier verwenden wir vundle als Plug-in-Verwaltungstool von Vim.

Bearbeiten Sie ~/.vimrc, fügen Sie eine Zeile zwischen vundle#begin und vundle#end hinzu:

Plugin 'fatih/vim-go'

In Vim ausführen: PluginInstall,

Vundle.vim A Das Unterfenster „Vundle Installer Preview“ wird auf der linken Seite geöffnet und am unteren Rand des Fensters wird eine Eingabeaufforderung angezeigt: „Verarbeitung von ‚fatih/vim-go‘“. Nachdem die Installation abgeschlossen ist, ändert sich die Eingabeaufforderung in „Fertig!“. ".

Zu diesem Zeitpunkt können wir sehen, dass es unter .vim/bundle einen zusätzlichen vim-go-Ordner gibt:

$ ls .vim/bundle/
vim-go/  Vundle.vim/

Bearbeiten Sie zu diesem Zeitpunkt hellogolang.go erneut , die Syntaxhervorhebung ist jetzt verfügbar, ebenso wie die automatische Formatierung beim Speichern (mit $GOBIN/gofmt), aber andere erweiterte Funktionen, wie der automatische Import fehlender Pakete und die automatische Vervollständigung, sind immer noch nicht verfügbar. Wir müssen mit der Installation fortfahren ein paar Sachen.

3. Go.tools-Binärdateien installieren

In den vim-go-Installationsanweisungen wird erwähnt, dass zuerst alle erforderlichen Binärdateien installiert werden müssen , wie Gocode, Godef, Goimports usw.

Über:GoInstallBinaries werden diese von Vim-Go abhängigen Binärtools automatisch heruntergeladen und unter $GOBIN oder $GOPATH/bin installiert. (Dieses Tool erfordert git oder hg und muss im Voraus in Ihrem Betriebssystem installiert werden.)

: Die Ausführung von GoInstallBinaries ist interaktiv, Sie müssen zur Bestätigung die Eingabetaste drücken:

vim-go: gocode not found. Installing github.com/nsf/gocode to folder /home/tonybai/go/bin
vim-go: goimports not found. Installing code.google.com/p/go.tools/cmd/goimports to folder /home/tonybai/go/bin/
vim-go: godef not found. Installing code.google.com/p/rog-go/exp/cmd/godef to folder /home/tonybai/go/bin/
vim-go: oracle not found. Installing code.google.com/p/go.tools/cmd/oracle to folder /home/tonybai/go/bin/
vim-go: gorename not found. Installing code.google.com/p/go.tools/cmd/gorename to folder /home/tonybai/go/bin/
vim-go: golint not found. Installing github.com/golang/lint/golint to folder /home/tonybai/go/bin/
vim-go: errcheck not found. Installing github.com/kisielk/errcheck to folder /home/tonybai/go/bin/

Aber diese Die meisten Codes werden auf code.google.com gehostet, daher ist es aus bekannten Gründen wahrscheinlich, dass die automatische Installation von vim-go fehlschlägt. Dazu müssen Sie jedes Tool entsprechend der Quellcodeadresse herunterladen und lokal installieren im Log oben erwähnt. Wenn Sie keine Leiter erstellen können, können Sie das entsprechende Paket über http://gopm.io herunterladen.

Nach der Installation lauten die neuen Binärdateien unter $GOBIN wie folgt:

-rwxr-xr-x  1 tonybai tonybai  5735552 11??  7 11:03 errcheck*
-rwxr-xr-x  1 tonybai tonybai  9951008 11??  7 10:33 gocode*
-rwxr-xr-x  1 tonybai tonybai  5742800 11??  7 11:07 godef*
-rwxr-xr-x  1 tonybai tonybai  4994120 11??  7 11:00 goimports*
-rwxr-xr-x  1 tonybai tonybai  5750152 11??  7 11:03 golint*
-rwxr-xr-x  1 tonybai tonybai  6381832 11??  7 11:01 gorename*
-rwxr-xr-x  1 tonybai tonybai  2954392 11??  7 10:38 gotags*
-rwxr-xr-x  1 tonybai tonybai  9222856 11??  7 11:01 oracle*

Nach der Installation dieser Binärdateien schauen wir uns an, welche Funktionen unterstützt werden.

Bearbeiten Sie hellogolang.go erneut:

- Beginnen Sie eine neue Zeile und geben Sie fmt. ein, dann Strg+x, Strg+o, Vim öffnet das Dropdown-Feld mit der Vervollständigungsaufforderung, aber Es ist nicht die Art der Vervollständigung, die in Echtzeit folgt. Diese Vervollständigung wird von Gocode bereitgestellt.

– Geben Sie eine Codezeile ein: time.Sleep(time.Second), führen Sie Folgendes aus: GoImports, Vim importiert das Zeitpaket automatisch.

– Bewegen Sie den Cursor auf die Sleep-Funktion, führen Sie Folgendes aus: GoDef oder geben Sie gd im Befehlsmodus ein. Vim öffnet die Definition der Sleep-Funktion in $GOROOT/src/time/sleep.go. Ausführung: b 1 kehrt zu hellogolang.go zurück.

– Ausführen: GoLint, führen Sie golint für die aktuelle Go-Quelldatei aus.

– Ausführen: GoDoc, um das Go-Dokument zu öffnen, das dem Symbol unter dem aktuellen Cursor entspricht.

– Ausführen: GoVet, führen Sie go vet im aktuellen Verzeichnis der aktuellen Go-Quelldatei aus.

– Ausführen: GoRun, kompilieren und das aktuelle Hauptpaket ausführen.

– Ausführen: GoBuild, kompilieren Sie das aktuelle Paket, das von Ihren Quelldateien abhängt. GoBuild erstellt die Ergebnisdatei nicht.

– Ausführen: GoInstall, um das aktuelle Paket zu installieren.

– Führen Sie GoTest aus, um die Datei _test.go unter Ihrem aktuellen Pfad zu testen.

– Führen Sie Folgendes aus: GoCoverage, erstellen Sie eine Testabdeckungsergebnisdatei und öffnen Sie den Browser, um die aktuelle Paketsituation anzuzeigen.

– Führen Sie GoErrCheck aus, um mögliche nicht erfasste Fehler im aktuellen Paket zu überprüfen.

– Führen Sie GoFiles aus, um die Liste der Quelldateien anzuzeigen, die dem aktuellen Paket entsprechen.

– Ausführen: GoDeps, zeigt die Liste der Abhängigkeitspakete des aktuellen Pakets an.

– Führen Sie Folgendes aus: GoImplements, zeigen Sie die vom aktuellen Typ implementierte Schnittstellenliste an.

– Ausführen: GoRename [to], ersetzen Sie das Symbol unter dem aktuellen Cursor durch [to].

3. Andere Plug-ins

Bisher haben wir noch eine Reihe von Funktionen, die nicht implementiert wurden, die wichtigsten Punkte sind:

– Code-Ergänzung für die Echtzeitverfolgung von Qi
– Code-Snippet-Unterstützung

1. Installieren Sie YCM (Your Complete Me)

Fügen Sie eine Zeile in ~/.vimrc hinzu:

Plugin 'Valloric /YouCompleteMe'

Nach dem Speichern und Beenden ~/.vimrc öffnen und ausführen: PluginInstall

Nach der Installation erscheint die folgende Eingabeaufforderung bar-Eingabeaufforderungen:

ycm_client_support.[so|pyd|dll] und ycm_core.[so|pyd|dll] nicht erkannt; Sie müssen YCM kompilieren, bevor Sie es verwenden!

YCM ist. In C++ geschriebene Module werden zur Optimierung der Leistung verwendet, daher muss die Unterstützungsbibliothek von YCM manuell kompiliert werden. Die Schritte sind wie folgt:

sudo yum install build-essential cmake python-dev
cd ~/.vim/bundle/YouCompleteMe
./install.sh

Erstellen (das Kompilieren von C++ ist sehr langsam, Sie müssen eine Weile warten). Öffnen Sie nach OK hellogolang.go, und die Echtzeit-Abschlussfunktion wird ausgeführt verfügbar sein! Cool!

2. Installieren Sie UltiSnips

Vim-go默认是用ultisnips引擎插件,但这个插件需要单独安装。同样,我们利用vundle来安装它,在~/.vimrc中添加一行:

Plugin 'SirVer/ultisnips'

保存,退出vim

打开vim,执行:PluginInstall

编辑hellogolang.go,按照go.snip中的说明,我们输入func后敲击tab键,我们发现期待的:

func name(params) type {
 }

并没有出现。反倒是YCM的下拉提示显示在那里让你选择。似乎是ultisnips和YCM的键组合冲突了。ultisnips官方说明也的确如 此。ultisnips默认是用Tab展开snippet的,而YCM中的Tab用来选择补齐项,我们可以通过设置来避免这些。

我们在.vimrc中添加如下setting:

" YCM settings
let g:ycm_key_list_select_completion = ['', '']
let g:ycm_key_list_previous_completion = ['']
let g:ycm_key_invoke_completion = &#39;<C-Space>&#39;

" UltiSnips setting
let g:UltiSnipsExpandTrigger="<tab>"
let g:UltiSnipsJumpForwardTrigger="<c-b>"
let g:UltiSnipsJumpBackwardTrigger="<c-z>"

这样让YCM通过回车和向下的箭头来做list item正向选择,通过向上箭头做反向选择。通过ctrl+space来原地触发补齐提示。

而ultisnips则是用tab做snippet展开,ctrl+b正向切换占位符,ctrl+z反向切换占位符。

四、.vimrc

前面讲到了vim-go有许多命令,在:xx模式下执行多显不便,于是你可以定义一些Mappings,比如:

 " set mapleader
  let mapleader = ","

  " vim-go custom mappings
  au FileType go nmap <Leader>s <Plug>(go-implements)
  au FileType go nmap <Leader>i <Plug>(go-info)
  au FileType go nmap <Leader>gd <Plug>(go-doc)
  au FileType go nmap <Leader>gv <Plug>(go-doc-vertical)
  au FileType go nmap <leader>r <Plug>(go-run)
  au FileType go nmap <leader>b <Plug>(go-build)
  au FileType go nmap <leader>t <Plug>(go-test)
  au FileType go nmap <leader>c <Plug>(go-coverage)
  au FileType go nmap <Leader>ds <Plug>(go-def-split)
  au FileType go nmap <Leader>dv <Plug>(go-def-vertical)
  au FileType go nmap <Leader>dt <Plug>(go-def-tab)
  au FileType go nmap <Leader>e <Plug>(go-rename)  

这样我们在命令模式下,输入6580843315dd7804e35fd3743df832ea+398b25610591cbbc67e306d776209d28就是运行 当前main包,以此类推。

另外下面这个配置使得我们在save file时既可以格式化代码,又可以自动插入包导入语句(或删除不用的包导入语句)。

 " vim-go settings
let g:go_fmt_command = "goimports"

到这里,我们的Vim Golang开发环境就基本搭建好了。snippet+实时补齐让你Coding如飞!

五、.vimrc文件

下面是截至目前为止全量.vimrc文件的内容:

set nocompatible              " be iMproved, required
filetype off                  " required
colorscheme molokai

" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()

" let Vundle manage Vundle, required
Plugin 'gmarik/Vundle.vim'
Plugin &#39;fatih/vim-go&#39;
Plugin 'Valloric/YouCompleteMe'

Plugin &#39;SirVer/ultisnips&#39;

" All of your Plugins must be added before the following line
call vundle#end()            " required
filetype plugin indent on    " required

" set mapleader
let mapleader = ","

" vim-go custom mappings
au FileType go nmap s (go-implements)
au FileType go nmap i (go-info)
au FileType go nmap gd (go-doc)
au FileType go nmap gv (go-doc-vertical)
au FileType go nmap r (go-run)
au FileType go nmap b (go-build)
au FileType go nmap t (go-test)
au FileType go nmap c (go-coverage)
au FileType go nmap ds (go-def-split)
au FileType go nmap dv (go-def-vertical)
au FileType go nmap dt (go-def-tab)
au FileType go nmap e (go-rename)

" vim-go settings
let g:go_fmt_command = "goimports"

" YCM settings
let g:ycm_key_list_select_completion = ['', '']
let g:ycm_key_list_previous_completion = ['', '']
let g:ycm_key_invoke_completion = ''

" UltiSnips settings
let g:UltiSnipsExpandTrigger=""
let g:UltiSnipsJumpForwardTrigger=""
let g:UltiSnipsJumpBackwardTrigger=""

更多golang知识请关注golang教程栏目。

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der VIM-Konfiguration der Go-Sprachumgebung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen