Software Engineer Blog

エンジニアブログです。技術情報(Go/TypeScript/k8s)や趣味の話も書くかもです。

vim-goの便利コマンド一覧

概要

Goを開発している際に、vim-goを利用しています。

github.com

最低限のコマンドしか利用できていなかったため、
便利なコマンドを再洗い出ししてみます。
(個人的なまとめの意味合いが強いです。)

Commands

下記を参照しております。

vim-go/vim-go.txt at master · fatih/vim-go · GitHub

:GoRun

go run コマンドに相当します。
vim上から実行できるところが便利です。

:GoBuild

go build コマンドに相当します。build後のバイナリは排出しないです。
buildが成功するかどうかを確認する際に利用すると便利です。
成功すると、下記のように出力されます。

vim-go: SUCCESS

失敗すると、quickfix windowに一覧が出力されます。

1 main.go|16| syntax error: unexpected semicolon or newline, expecting comma or }
Quickfix  go build -i . errors
vim-go: FAILED

:GoDef

カーソル以下の、宣言元にjumpできます。
実際の実装がどうなっているか確認したりする際に利用します。
gd で同等の動作をします。
(基本的には、 gd で移動することが多い印象です。)

:GoCallers

カーソル以下のfuncの、呼び出し元を一括検索できます。
(ファイル全検索していたのが、馬鹿らしく思えます..)
注意点 として、複数packageで検索したい場合は、 :GoGuruScope でスコープを設定します。
(どのディレクトリ以下で検索をかけたいかを設定するイメージです。)

:GoGuruScope github.com/midorigreen/gprof

selectPeco()のカーソル上で

:GoCallers

quickfix window

1 main.go|93 col 6| github.com/midorigreen/gmd.selectPeco is called from these 3 sites:
2 /Users/midori/src/golang/src/github.com/midorigreen/gmd/exec.go|28 col 28| static function call from github.com/midorigreen/gmd.cmdExec
3 /Users/midori/src/golang/src/github.com/midorigreen/gmd/hist.go|38 col 28| static function call from github.com/midorigreen/gmd.cmdHist
4 /Users/midori/src/golang/src/github.com/midorigreen/gmd/del.go|29 col 25| static function call from github.com/midorigreen/gmd.cmdDel

:GoCallstack

カーソル以下のfuncのcallstackがquickfix windowで見れます。
(こちらも :GoGuruScope の指定が必要です。)

1 main.go|120 col 7| Found a call path from root to github.com/midorigreen/gmd.run
2 main.go|120 col 6| github.com/midorigreen/gmd.run
3 main.go|138 col 13| static function call from github.com/midorigreen/gmd.main

:GoTest

テストを実行します。

:GoTestFunc

カーソル以下のtest funcのみテストを実行します。

:GoDoc

カーソル以下のGoDocを別windowで参照することができます。 (Shift+k と同等の認識です。)

:GoDocBrowser

カーソル以下のGoDocをブラウザ上で参照することができます。
わざわざGoDocを検索する手間が省けます。

[range]:GoAddTags

range指定した、structにタグを自動で追加してくれます。 Before

type Prof struct {
    Cores     []Core
    Model     string
    ModelName string
    CacheSize int32 
}

After (defaultはjsonタグ)

type Prof struct {
    Cores     []Core `json:"cores"`
    Model     string `json:"model"`
    ModelName string `json:"model_name"`
    CacheSize int32  `json:"cache_size"`
}
  • dbタグ = [range]:GoAddTags db
  • omitempty = [range]:GoAddTags json,omitempty

:GoFillStruct

structの宣言時に、literalをdefault値で埋めてくれます。
初期化時に、各literalを打たなくて良いのが楽です。
Before

prof := Prof{}

After

prof := Prof{
    Cores:     nil,
    Model:     "",
    ModelName: "",
    CacheSize: 0,
}

:GoRename [to]

カーソル以下の文字を、一括でrenameしてくれます。
呼び出し元も、合わせて修正してくれろところが便利です。
func, struct, 変数名 のそれぞれ動作可能です。

:GoPlay

開いているファイルをGo Playgroundで見ることができます。
サンプルコード書いて、展開する場合とかに便利そうです。

所感

他にもまだまだ眠ってそうですが、追加され次第、追記していく形を取ろうかと思います。
ここまで揃っていると、vimで十分な効率で開発できそうです。