最近Vimの設定を整理してcoc.nvimに乗り換えるにあたり、snippetのプラグインもneosnippetからcoc-neosnippetに乗り換え、snippet集もvim-snippetsに変更した。

概ね問題はなかったのですが、Goを書くときにiferrで戻り値をいい感じに補完してくれる機能がなくなったのは若干不便だった(参考)。

一応coc.nvimにneosnippetの機能を取り込む機能はついているようでしたがうまく動かなかったことと、もうちょっと高級な機能が欲しいと前々から思っていたのもあり、せっかくなのでsnippetを提供するプラグインを。

それで作ったのが、vim-goiferr-snippetsになる。 以下のgifのように動作する。

demo

iferrのsnippetに関して以下の機能を提供している。

  • 戻り値の型を構造体でも補完してくれる
  • 構造体がポインタかどうかを判別してくれる
  • pkg/errorsWrap関数でerrorをWrapする補完の提供
  • 名前付き戻り値のときはreturnしか出力しない
  • インラインのエラーハンドリング用snippetも提供
  • 上記機能を持ったVimScirptの関数として提供している
    • pkg/errors以外のerrorライブラリ等でカスタマイズできる

また、作っている最中に「iferr用の正規表現はそのままreturnのsnippetとしても使えるのでは」と思ったので、そのままreturnを補完するsnippetとしても提供してみた。 戻り値をいい感じに展開して、それぞれにジャンプ用のマーカーを付けているので、サクサク戻り値を設定できる。

自分用に作ったのでオレオレ設定な部分もありますが、生暖かい見ていただければ幸い。

最後に、プラグイン内の正規表現部分は@pockeさんの「Vim で Go 言語を書いている時、Neosnippet でいい感じに if する」という記事を参考にさせていただきました。ありがとうございました。