yasnippetで任意個のfieldを作る方法を紹介する。
ソースコードはgithubに置いてある。
(そもそものyasnippetの使い方は上のリンク先を参考にしてください)
任意個の引数の展開
yasnippetはheaderに#type : command
を書くことでsnippetに直接emacs lispを記述でき、これによりsnippetの自動生成が可能になる。
この方法でnumpyで採用されているコーディング規約(PEP8,PEP257に準拠)に基づいたdocstringの引数の部分に関するsnippetを作った。
-
def
のdocstringであればその引数、class
のdocstringであればdef __init__
の引数をparseする。 - parseには関数定義部分をpythonインタプリタに渡している。
- 関数定義部分は最大5行としている。(5という数字に積極的な理由はない)
さらにemacs lispを頑張ることでより複雑で便利なsnippetsを作ることができるはず。
皆様の熱いsnippetをお待ちしております。
またもうひとつ、上記のsnippetとdocstring付きの関数を作るsnippetを組み合わせた連続展開を紹介しておく。
tab連打でのsnippetの連続展開
またこれを実現するためには.emacs
に
.emacs
(setq yas-triggers-in-field t)
を書いておく必要がある。
- yasnippetではfield内を編集中かどうかで様々な挙動が変わる。tabキーの動作もその一つ。
- 通常、tab連打では編集中の動作に入れない。
- ここではsnippet内に埋め込めるemacslispを用いて元の文字列を変換させることで強制的に編集中にさせている。
- さらにその変換後の文字列を展開したいsnippetのkeyと同じにすることでそのまま展開が可能になる。
- tab連打で展開できるため、あたかも通常通りにsnippetを展開しているかのように連続展開ができる。
以上。