最近Vimの設定を整理してcoc.nvimに乗り換えるにあたり、snippetのプラグインもneosnippetからcoc-neosnippetに乗り換え、snippet集もvim-snippetsに変更した。
概ね問題はなかったが、Goを書くときにiferr
で戻り値をいい感じに補完してくれる機能がなくなったのは若干不便だった(参考)。
一応coc.nvimにneosnippetの機能を取り込む機能はついているようでしたがうまく動かなかったことと、もうちょっと高級な機能が欲しいと前々から思っていたのもあり、せっかくなのでsnippetを提供するプラグインを。
それで作ったのが、vim-goiferr-snippetsになる。 以下のgifのように動作する。
iferr
のsnippetに関して以下の機能を提供している。
- 戻り値の型を構造体でも補完してくれる
- 構造体がポインタかどうかを判別してくれる
pkg/errors
のWrap
関数でerrorをWrapする補完の提供- 名前付き戻り値のときは
return
しか出力しない - インラインのエラーハンドリング用snippetも提供
- 上記機能を持ったVimScriptの関数として提供している
pkg/errors
以外のerrorライブラリ等でカスタマイズできる
また、作っている最中に「iferr
用の正規表現はそのままreturn
のsnippetとしても使えるのでは」と思ったので、そのままreturn
を補完するsnippetとしても提供してみた。
戻り値をいい感じに展開して、それぞれにジャンプ用のマーカーを付けているので、サクサク戻り値を設定できる。
自分用に作ったのでオレオレ設定な部分もあるが、生暖かい見ていただければ幸い。
最後に、プラグイン内の正規表現部分は@pockeさんの「Vim で Go 言語を書いている時、Neosnippet でいい感じに if する」という記事を参考にさせていただきました。ありがとうございました。