ホームページ  >  記事  >  バックエンド開発  >  go言語環境のvim設定を詳しく解説

go言語環境のvim設定を詳しく解説

尚
転載
2019-12-31 17:17:564114ブラウズ

go言語環境のvim設定を詳しく解説

1. 環境の準備:

システム環境の説明:

[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]#

設定プラグインを観察するための go ファイルを準備します。プロセス内の変更:

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

2. プラグイン構成パス:

1. Vundle.vim:

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

vimrc の構成: create ~/ .vimrc ファイル (このファイルがない場合) に、ファイルの先頭に Vundle.vim の設定を追加します:

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

現時点では、Vim には Vundle.vim プラグインのみがあります。インストールされています。 hellogolang.go の編集は、通常のテキスト ファイルの編集と何ら変わりません。すべては依然として Vim のデフォルト属性です。

2. vim-go

Vim-go は現在、Golang を構築するために最も広く使用されているツールです。 . 開発環境用の vim プラグイン. ここでも、環境を構築するためのコアおよび基盤として vim-go を使用します。 vim-go は、オープン ソースの Vim プラグイン マネージャーを使用してインストールされます。gmarik/Vundle.vim は、現在、Pathogen を超えて最も推奨されている Vim プラグイン マネージャーです。

ここでは、Vim のプラグイン管理ツールとして vundle を使用します。

~/.vimrc を編集し、vundle#begin と vundle#end の間に行を追加します:

Plugin 'fatih/vim-go'

Vim で実行: PluginInstall,

Vundle.vim A Vundle Installer Preview サブウィンドウが左側に開き、ウィンドウの下部に「'fatih/vim-go' を処理しています」というプロンプトが表示されます。インストールが完了すると、プロンプト メッセージが「完了!」に変わります。 」。

この時点で、.vim/bundle の下に追加の vim-go フォルダーがあることがわかります:

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

この時点で、hellogolang.go を再度編集します。 、保存時の自動フォーマット ($GOBIN/gofmt を使用) と同様に、構文の強調表示が利用できるようになりましたが、不足しているパッケージの自動インポートや自動補完などの他の高度な機能はまだ利用できません。引き続きインストールする必要があります。いくつかのもの。

3. go.tools バイナリのインストール

vim-go のインストール手順には、必要なバイナリをすべて最初にインストールする必要があると記載されています。 、gocode、godef、goimports など。

GoInstallBinaries を通じて、これらの vim-go 依存バイナリ ツールは自動的にダウンロードされ、$GOBIN または $GOPATH/bin にインストールされます。 (このツールには git または hg が必要で、事前に OS にインストールしておく必要があります。)

: GoInstallBinaries の実行は対話型であり、Enter キーを押して確認する必要があります:

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/

ただし、これらはコードのほとんどは code.google.com でホストされているため、よく知られた理由により、vim-go の自動インストールが失敗する可能性が高く、各ツールのソース コード アドレスに従ってローカルにダウンロードしてインストールする必要があります。上記のログに記載されています。はしごを構築できない場合は、http://gopm.io から関連パッケージをダウンロードできます。

インストール後、$GOBIN の下の新しいバイナリは次のとおりです:

-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*

これらのバイナリをインストールした後、どの機能がサポートされるかを確認してみましょう。

hellogolang.go を再度編集します:

- 新しい行を開始して fmt. と入力し、ctrl x、ctrl o と入力します。Vim は完了プロンプトのドロップダウン ボックスをポップアップ表示しますが、これはQi、この補完は gocode によって提供されます。

– コード行「time.Sleep(time.Second)」を入力し、「GoImports」を実行すると、Vim が時間パッケージを自動的にインポートします。

– カーソルを Sleep 関数に移動し、GoDef を実行するか、コマンド モードで gd と入力すると、Vim は $GOROOT/src/time/sleep.go にある Sleep 関数の定義を開きます。実行: b 1 は hellogolang.go に戻ります。

– 実行: GoLint、現在の Go ソース ファイルに対して golint を実行します。

– 「GoDoc」を実行して、現在のカーソルの下にあるシンボルに対応する Go ドキュメントを開きます。

– 実行: GoVet、現在の Go ソース ファイルの現在のディレクトリで go vet を実行します。

– 実行: GoRun、現在のメイン パッケージをコンパイルして実行します。

– 実行: GoBuild、現在のパッケージをコンパイルします。これはソース ファイルに応じて異なります。GoBuild は結果ファイルを生成しません。

– GoInstall を実行して、現在のパッケージをインストールします。

– GoTest を実行し、現在のパスにある _test.go ファイルをテストします。

– GoCoverage を実行し、テスト カバレッジ結果ファイルを作成し、ブラウザを開いて現在のパッケージの状況を表示します。

– GoErrCheck を実行して、現在のパッケージで検出されなかったエラーの可能性を確認します。

– GoFiles を実行し、現在のパッケージに対応するソース ファイルのリストを表示します。

– GoDeps を実行し、現在のパッケージの依存パッケージのリストを表示します。

– 実行: GoImplements は、現在の型によって実装されたインターフェイスのリストを表示します。

– 実行: GoRename [to]、現在のカーソルの下の記号を [to] に置き換えます。

3. その他のプラグイン

これまでのところ、まだ実装されていない機能がいくつかあります。重要な点は次のとおりです:

-リアルタイムのコード補足 Qi
– コード スニペットのサポート

1. YCM (Your Complete Me) のインストール

~/.vimrc に行を追加します:

Plugin 'Valloric /YouCompleteMe'

保存して終了した後、~/.vimrc を開いて実行します: PluginInstall

インストール後、次のプロンプト バーが表示されます。

ycm_client_support.[so|pyd|dll] および ycm_core.[so|pyd|dll] が検出されません。使用する前に YCM をコンパイルする必要があります。ドキュメントをお読みください!

YCM はパフォーマンスを最適化するために C で書かれたモジュールを使用するため、YCM のサポート ライブラリを手動でコンパイルする必要があります。手順は次のとおりです。

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

Build (C のコンパイルは非常に遅いので、しばらく辛抱強く待つ必要があります) OK の後、hellogolang.go を開くと、リアルタイム補完機能が表示されます。利用可能!いいね!

2. 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教程栏目。

以上がgo言語環境のvim設定を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。