具体的にはバンドルスニペットを使いこなすための情報を記載する。自作スニペットについては述べない。
本記事を読む価値のある人
- yasnippetが何をしてくれるツールであるかは知っている
- 自分でM-xコマンドを打つ程度にEmacs操作に慣れている
- 自分のマシンで使える各メジャーモードのスニペットは把握できていない
現在のメジャーモードのスニペットを把握する
スニペットは各メジャーモードごとに有効/無効になっている。現在のメジャーモードで有効なスニペットを確認するのは以下のコマンド。
M-x yas-describe-tables
これでYASnippet tablesバッファに現在のメジャーモードで有効なスニペット一覧が確認できる。
このコマンドで現在使えるスニペットを知るだけでもだいぶ捗るはず。
helmを使っている人であればhelm-c-yasnippet
を使えばスニペットのインクリメンタルサーチができるのでこれで身につけていくのもありかもしれない。
公式バンドルスニペット集を把握する
以下のGithubレポジトリに色々なメジャーモードのofficialスニペットが公開されている。
https://github.com/AndreaCrotti/yasnippet-snippets
これらのメジャーモードのスニペットはyasnippetをインストールした際にバンドルされているはず。公式スニペットがあるにもかかわらず,自分の環境でM-x yas-describe-tables
でスニペットを確認できないようであればyas-snippet-dirs
にスニペットを読み込ませる設定を追加ことをお勧めする。
(内容を理解せずにWeb上の設定をコピペしただけの場合,デフォルトのyas-snippet-dirs
を上書きしてしまっていることもある)
メジャーモード間の親子関係を理解する
各メジャーモード間には親子関係を設定することができ,子は親のメジャーモードのスニペットも使える仕様になっている。
バンドルされている各言語のメジャーモードでバンドルスニペットが設定されていたりするが,自分でインストールした3rdパーティーのメジャーモードにはスニペットが登録されていなかったりする。その場合に上記の仕様が役に立つ。
例えば, js2-modeでjavascript-modeのバンドルスニペットを使いたい場合,js2-modeの親をjavascript-modeに設定すれば良い。設定の仕方としては js2-modeのyasnippetディレクトリ内に.yas-parentsファイルを作成し,そこでjavascript-modeと記載する。実装例はこちら。
ref. https://capitaomorte.github.io/yasnippet/snippet-organization.html
より詳細に
本記事で紹介したコマンド含めた,Major Commandはコードのドキュメント(Commentary)に記載されている。
おわりに
上記の情報で,日常的にyasnippetを使う習慣が作れるのではないだろうか。
まずバンドルされているスニペットを使う習慣がついてきた後にオレオレスニペットを登録するというさらに高度な技を身につけていく方が個人的には良い気がしている。