Maison >développement back-end >Golang >Explication détaillée de la configuration vim de l'environnement linguistique go
1. Préparation de l'environnement :
Description de l'environnement système :
[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]#
Préparez un fichier go pour observer le plug-in de configuration- dans Modifications en cours :
//hellogolang.go package main import "fmt" func main() { fmt.Println("Hello Golang!") }
2. Configuration du plug-in :
1.Vundle.vim :
#mkdir ~/.vim/bundle #git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim
Configurer vimrc : créer~ /.vimrc (si vous n'avez pas ce fichier), ajoutez la configuration concernant Vundle.vim en haut du fichier :
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
Pour l'instant, Vim n'a que le plug-in Vundle.vim installé. L'édition de hellogolang.go n'est pas différente de l'édition d'un fichier texte ordinaire. Tout est toujours les attributs par défaut de Vim
2 vim-go
Vim-go est actuellement l'outil le plus largement utilisé pour créer Golang. . Le plug-in vim pour l'environnement de développement. Ici, j'utilise également vim-go comme noyau et base pour créer l'environnement. vim-go est installé à l'aide du gestionnaire de plug-ins Vim open source gmarik/Vundle.vim est actuellement le gestionnaire de plug-ins Vim le plus recommandé, surpassant le pathogène.
Ici, nous utilisons vundle comme outil de gestion des plug-ins de Vim.
Modifiez ~/.vimrc, ajoutez une ligne entre vundle#begin et vundle#end :
Plugin 'fatih/vim-go'
Exécuter dans Vim : PluginInstall,
Vundle.vim A La sous-fenêtre Vundle Installer Preview s'ouvrira sur la gauche et une invite apparaîtra en bas de la fenêtre : "Traitement de 'fatih/vim-go'". Une fois l'installation terminée, le message d'invite deviendra "Terminé ! ".
À ce moment, nous pouvons voir qu'il y a un dossier vim-go supplémentaire sous .vim/bundle :
$ ls .vim/bundle/ vim-go/ Vundle.vim/
À ce moment, modifiez à nouveau hellogolang.go , la mise en évidence de la syntaxe est disponible et le formatage automatique lors de l'enregistrement (à l'aide de $GOBIN/gofmt) est disponible, mais d'autres fonctions avancées, telles que l'importation automatique des packages manquants et la complétion automatique, ne sont toujours pas disponibles. certaines choses.
3. Installer les binaires go.tools
Les instructions d'installation de vim-go mentionnent que tous les binaires nécessaires doivent d'abord être installés. , comme gocode, godef, goimports, etc.
Grâce à :GoInstallBinaries, ces outils binaires dépendants de vim-go seront automatiquement téléchargés et installés sous $GOBIN ou $GOPATH/bin. (Cet outil nécessite git ou hg et doit être installé au préalable sur votre OS.)
: L'exécution de GoInstallBinaries est interactive, vous devez appuyer sur Entrée pour confirmer :
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/
Mais ces codes La plupart d'entre eux sont hébergés sur code.google.com, donc pour des raisons bien connues, l'installation automatique de vim-go est susceptible d'échouer. Cela nécessite que vous téléchargiez et installiez localement en fonction de l'adresse du code source de chaque outil. mentionné dans le journal ci-dessus. Si vous ne parvenez pas à créer une échelle, vous pouvez télécharger le package correspondant via http://gopm.io.
Après l'installation, les nouveaux binaires sous $GOBIN sont les suivants :
-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*
Après avoir installé ces binaires, examinons quelles fonctionnalités sont prises en charge.
Modifiez à nouveau hellogolang.go :
- Commencez une nouvelle ligne et entrez fmt., puis ctrl+x, ctrl+o, Vim fera apparaître la liste déroulante d'invite de fin, mais ce n'est pas celui qui suit en temps réel. Type de complétion, cette complétion est assurée par gocode.
– Entrez une ligne de code : time.Sleep(time.Second), exécutez : GoImports, Vim importera automatiquement le package time.
– Déplacez le curseur sur la fonction Sleep, exécutez : GoDef ou tapez gd en mode commande, Vim ouvrira la définition de la fonction Sleep dans $GOROOT/src/time/sleep.go. Exécution : b 1 retourne à hellogolang.go.
– Exécuter : GoLint, exécutez golint sur le fichier source Go actuel.
– Exécuter : GoDoc pour ouvrir le document Go correspondant au symbole sous le curseur actuel.
– Exécuter : GoVet, exécutez go vet dans le répertoire courant sur le fichier source Go actuel.
– Exécuter : GoRun, compiler et exécuter le package principal actuel.
– Exécuter : GoBuild, compilez le package actuel, qui dépend de vos fichiers sources, GoBuild ne produit pas le fichier résultat.
– Exécuter : GoInstall pour installer le package actuel.
– Exécuter : GoTest pour tester le fichier _test.go sous votre chemin actuel.
– Exécuter : GoCoverage, créez un fichier de résultats de couverture de test et ouvrez le navigateur pour afficher la situation actuelle du package.
– Exécuter : GoErrCheck pour vérifier les éventuelles erreurs non détectées dans le package actuel.
– Exécuter : GoFiles pour afficher la liste des fichiers sources correspondant au package actuel.
– Exécuter : GoDeps, afficher la liste des packages de dépendances du package actuel.
– Exécuter : GoImplements, afficher la liste des interfaces implémentées par le type actuel.
– Exécuter : GoRename [to], remplacez le symbole sous le curseur actuel par [to].
3. Autres plug-ins
Jusqu'à présent, nous avons encore un certain nombre de fonctionnalités qui n'ont pas été implémentées, les points clés sont :
– Supplément de code pour le suivi en temps réel de Qi
– Prise en charge des extraits de code
1 Installez YCM (Your Complete Me)
Ajoutez une ligne dans ~/.vimrc :
.
Plugin 'Valloric /YouCompleteMe'
Après avoir enregistré et quitté, ouvrez ~/.vimrc et exécutez : PluginInstall
Après l'installation, l'invite suivante invites de la barre :
ycm_client_support.[so|pyd|dll] et ycm_core.[so|pyd|dll] non détectés ; vous devez compiler YCM avant de l'utiliser !
YCM est Le module écrit en C++ est utilisé pour optimiser les performances, la bibliothèque de support YCM doit donc être compilée manuellement. Les étapes sont les suivantes :
sudo yum install build-essential cmake python-dev cd ~/.vim/bundle/YouCompleteMe ./install.sh
Build (la compilation de C++ est très lente, vous devez attendre patiemment un moment. Après OK, ouvrez hellogolang.go et la fonction d'achèvement en temps réel s'affichera). soyez disponible ! Cool!
2. Installez 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 = '<C-Space>' " 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 'fatih/vim-go' Plugin 'Valloric/YouCompleteMe' Plugin 'SirVer/ultisnips' " 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 nmaps (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教程栏目。
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!