vim-vsnip で複数のディレクトリからスニペットをインポートする

vimスニペットを使うために vim-vsnip を使いはじめました。

vim-vsnip はファイル形式ごとに JSONスニペットを定義します。

ex: typescript.json

{
  "ReactFC": {
    "prefix": "fc",
    "body": [
      "import React from 'react';\n",
      "const $1: React.FC = () => {",
      "  return (",
      "  );",
      "};\n",
      "export default $1;"
    ],
    "description": "React関数コンポーネントの雛形"
  }
}

このようなファイルを g:vsnip_snippet_dir に設定したディレクトリに置くと、スニペットとして展開できるようになります。

let g:vsnip_snippet_dir = expand($HOME . '/dotfiles/vsnip')

自分はこのファイルを dotfiles として公開しています。

github.com

しかし、そうすると公開できるような内容しかスニペットに登録できず、公開できないコード、例えば仕事でよく使うコードなどを登録できません。 それは不便なので、スニペットJSON ファイルを参照するディレクトリを複数登録したくなります。 そんなときはg:vsnip_snippet_dirs に配列で複数のディレクトリを渡すことで解決できます。

let g:vsnip_snippet_dirs = [expand($HOME . '/dotfiles/vsnip'), expand($HOME . '/dotfiles/vsnip-local')]

こうしたうえで、 vsnip-local/.gitignore に登録しておき、 vsnip-local/ に仕事等で使う公開したくないスニペットを保存します。 (自分は gitignore する前に vsnip-local/.gitkeep を Git 管理下に置いておいて、その後 gitignore して git clone しても vsnip-local/ が存在するようにしています)