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

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

Freigeben: 2019-12-31 17:17:56
nach vorne
4244 Leute haben es durchsucht

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]#
Nach dem Login kopieren

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!")
}
Nach dem Login kopieren

2. Plug-in-Konfiguration:

1. Vundle.vim:

#mkdir ~/.vim/bundle
#git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim
Nach dem Login kopieren

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
Nach dem Login kopieren

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'
Nach dem Login kopieren

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/
Nach dem Login kopieren

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/
Nach dem Login kopieren

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 dem Login kopieren

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
Nach dem Login kopieren

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'
Nach dem Login kopieren

保存,退出vim

打开vim,执行:PluginInstall

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

func name(params) type {
 }
Nach dem Login kopieren

并没有出现。反倒是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>"
Nach dem Login kopieren

这样让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)  
Nach dem Login kopieren

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

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

 " vim-go settings
let g:go_fmt_command = "goimports"
Nach dem Login kopieren

到这里,我们的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=""
Nach dem Login kopieren

更多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!

Verwandte Etiketten:
go
Quelle:cnblogs.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage