僕は今まで競プロ用のライブラリをファイルとして保存しておいて、それをコピペするスタイルを取っていました。しかし、いささか面倒になってきたのでスニペット化してみました。
実現したいこと
たとえばmint.cppというファイルがあるとします。
template<int MOD>struct MInt { // 実装 }; using mint = MInt<1000000007>;
これをlibmint
でスニペットとして呼び出せるようにします。
スニペット設定を生成
以下のようなディレクトリ構造を想定しています。
./create.sh ./library - mint.cpp ./snippets
このとき、以下のcreate.shを実行するだけでNeosnippet用の設定ファイルが生成されます。
#!/bin/bash absolute_pwd=$(cd $(dirname $0); pwd) # create.shがあるディレクトリの絶対パス snip_dir=$absolute_pwd/snippets mkdir -p $snip_dir # snippetファイルが生成されていくディレクトリ for path in $(ls ./library/*.cpp); do filename=$(basename $path .cpp) echo "snippet lib${filename}" > $snip_dir/${filename}.snip cat $path | sed -e 's/^/ /g' >> $snip_dir/${filename}.snip done # 使いやすい場所へシンボリックリンクを張る [ -e "$XDG_CONFIG_HOME/nvim/snippets/library" ] || ln -sf $absolute_pwd/snippets $XDG_CONFIG_HOME/nvim/snippets/library
あとは$ bash create.sh
を実行するだけでスニペットファイルが生成されます。
備考
最後のシンボリックリンクは必要に応じて使ってください。たとえばneosnippetが読み込むディレクトリ以下にあるcpp.snip(~/.config/nvim/snippets/cpp.snip
など)に以下のように書いていた場合はシンボリックリンクを張っておくと便利です。
include ./library/*.snip