有馬総一郎のブログ

(彼氏の事情)

2022年02月17日 23:03:28 JST - 3 minute read - Vim

スニペットプラグイン'hrsh7th/vim-vsnip'を導入する

これまでスニペットプラグイン SirVer/ultisnipsを使っていたのが、私はさすがにIDEの代わりにVimで全てまかなえる程、強者Vimmerでないので多機能すぎる。かつ、Python依存プラグインは極力使いたくない1ので、別のプラグインを導入することにした。

調べると hrsh7th/vim-vsnipを、使ってみることにした。

導入することにした理由は以下による。

  1. README.mdが分かりやすかった
  2. コードスニペットファイル形式がjson形式なので、学習コストが低い。
  3. Python非依存
  4. 現在もメンテナンスされてるプラグインである

以下、自分で作成したコードスニペットファイルを晒す。

hugo.json

{
  "Add": {
    "prefix": ["add"],
    "body": [
      "---",
      "**追記 ${CURRENT_YEAR}-${CURRENT_MONTH}-${CURRENT_DATE}**  ",
      "**追記ここまで**",
      "",
      "---"
    ],
    "description": "追記"
  },
  "LastMod": {
    "prefix": ["last"],
    "body": [
      "lastmod:${VIM:strftime(\"%Y-%m-%dT%H:%M:%S+09:00\")}"
    ],
    "description": "更新日"
  },
  "Link": {
    "prefix": ["link"],
    "body": [
        "[$TM_SELECTED_TEXT][]",
        "",
        "[$TM_SELECTED_TEXT]: url"
    ],
    "description": "Link for selected text"
  }
}

嬉しかったのは、現在年月日時刻、クリップボードなどがスニペット組込み変数として準備されていること。

しかも、${VIM:strftime(\"%Y-%m-%dT%H:%M:%S+09:00\")}といった形でvim関数を呼んだり、${VIM:system('python -c \"import uuid, sys;sys.stdout.write(str(uuid.uuid4()))\"')}pythonを利用することも可能ということだ。いやぁ、十分な程に多機能だわ。

" Select or cut text to use as $TM_SELECTED_TEXT in the next snippet.

また、クリップボード${CLIPBOARD}とは別に、$TM_SELECTED_TEXTとしてカット・ペイストするためのテキストを保存しておくができる。他にも現在編集中のディレクトリ、ファイル名、行数などといったものも組込み変数として使える。

let g:vsnip_snippet_dir = expand('~/.vim/vsnip')としてコードスニペットファイルの格納ディレクトリの指定も勿論、可能。

let g:vsnip_filetypes.markdown = ['hugo']といった形で複数のコードスニペットファイルを利用することも出来る。

Support many LSP-client & completion-engine by vim-vsnip-integ'

多くのLSP-client、補完エンジンをサポートしているらしいが、自分は使わないので"Plug 'hrsh7th/vim-vsnip-integ'として無効化したが、それでもちゃんと動いた。

VSCode拡張機能 golang/vscode-goのスニペットを読み込むこともできるようだ。

実際の使ってみての云々よりも README.md やドキュメントが分かりやすいのがありがたい。末永く使っていきたい。


  1. 他にPython依存のプラグインとして simplenote-vim/simplenote.vimも使っている。 ↩︎