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

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

Dec 31, 2019 pm 05:17 PM
go

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)  
ログイン後にコピー

这样我们在命令模式下,输入<,>+就是运行 当前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 サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Golang 関数のライフサイクルと変数スコープの深い理解 Golang 関数のライフサイクルと変数スコープの深い理解 Apr 19, 2024 am 11:42 AM

Go では、関数のライフ サイクルには定義、ロード、リンク、初期化、呼び出し、戻り値が含まれます。変数のスコープは関数レベルとブロック レベルに分割されますが、ブロック内の変数はブロック内でのみ表示されます。 。

Go WebSocket メッセージを送信するにはどうすればよいですか? Go WebSocket メッセージを送信するにはどうすればよいですか? Jun 03, 2024 pm 04:53 PM

Go では、gorilla/websocket パッケージを使用して WebSocket メッセージを送信できます。具体的な手順: WebSocket 接続を確立します。テキスト メッセージを送信します。 WriteMessage(websocket.TextMessage,[]byte("message")) を呼び出します。バイナリ メッセージを送信します。WriteMessage(websocket.BinaryMessage,[]byte{1,2,3}) を呼び出します。

Go で正規表現を使用してタイムスタンプを照合するにはどうすればよいですか? Go で正規表現を使用してタイムスタンプを照合するにはどうすればよいですか? Jun 02, 2024 am 09:00 AM

Go では、正規表現を使用してタイムスタンプを照合できます。ISO8601 タイムスタンプの照合に使用されるような正規表現文字列をコンパイルします。 ^\d{4}-\d{2}-\d{2}T \d{ 2}:\d{2}:\d{2}(\.\d+)?(Z|[+-][0-9]{2}:[0-9]{2})$ 。 regexp.MatchString 関数を使用して、文字列が正規表現と一致するかどうかを確認します。

GolangとGo言語の違い GolangとGo言語の違い May 31, 2024 pm 08:10 PM

Go と Go 言語は、異なる特性を持つ別個の存在です。 Go (Golang とも呼ばれます) は、同時実行性、高速なコンパイル速度、メモリ管理、およびクロスプラットフォームの利点で知られています。 Go 言語の欠点としては、他の言語に比べてエコシステムが充実していないこと、構文が厳格であること、動的型付けが欠如していることが挙げられます。

Golang の技術的なパフォーマンスの最適化でメモリ リークを回避するにはどうすればよいですか? Golang の技術的なパフォーマンスの最適化でメモリ リークを回避するにはどうすればよいですか? Jun 04, 2024 pm 12:27 PM

メモリ リークは、ファイル、ネットワーク接続、データベース接続などの使用されなくなったリソースを閉じることによって、Go プログラムのメモリを継続的に増加させる可能性があります。弱参照を使用してメモリ リークを防ぎ、強参照されなくなったオブジェクトをガベージ コレクションの対象にします。 go coroutine を使用すると、メモリ リークを避けるために、終了時にコルーチンのスタック メモリが自動的に解放されます。

IDE で Golang 関数のドキュメントを表示するにはどうすればよいですか? IDE で Golang 関数のドキュメントを表示するにはどうすればよいですか? Apr 18, 2024 pm 03:06 PM

IDE を使用して Go 関数のドキュメントを表示する: 関数名の上にカーソルを置きます。ホットキーを押します (GoLand: Ctrl+Q; VSCode: GoExtensionPack をインストールした後、F1 キーを押して「Go:ShowDocumentation」を選択します)。

Go 同時関数の単体テストのガイド Go 同時関数の単体テストのガイド May 03, 2024 am 10:54 AM

並行関数の単体テストは、同時環境での正しい動作を確認するのに役立つため、非常に重要です。同時実行機能をテストするときは、相互排他、同期、分離などの基本原則を考慮する必要があります。並行機能は、シミュレーション、競合状態のテスト、および結果の検証によって単体テストできます。

Golang のエラー ラッパーを使用するにはどうすればよいですか? Golang のエラー ラッパーを使用するにはどうすればよいですか? Jun 03, 2024 pm 04:08 PM

Golang では、エラー ラッパーを使用して、元のエラーにコンテキスト情報を追加することで新しいエラーを作成できます。これを使用すると、さまざまなライブラリまたはコンポーネントによってスローされるエラーの種類を統一し、デバッグとエラー処理を簡素化できます。手順は次のとおりです。errors.Wrap 関数を使用して、元のエラーを新しいエラーにラップします。新しいエラーには、元のエラーのコンテキスト情報が含まれています。 fmt.Printf を使用してラップされたエラーを出力し、より多くのコンテキストとアクション性を提供します。異なる種類のエラーを処理する場合は、errors.Wrap 関数を使用してエラーの種類を統一します。

See all articles