8
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

yasnippetで任意個の引数を展開する

Last updated at Posted at 2014-03-11

yasnippetで任意個のfieldを作る方法を紹介する。
ソースコードはgithubに置いてある。
(そもそものyasnippetの使い方は上のリンク先を参考にしてください)

任意個の引数の展開

yasnippetはheaderに#type : commandを書くことでsnippetに直接emacs lispを記述でき、これによりsnippetの自動生成が可能になる。
この方法でnumpyで採用されているコーディング規約(PEP8,PEP257に準拠)に基づいたdocstringの引数の部分に関するsnippetを作った。

まずはデモ動画をどうぞ。!
snippet_parse.gif

  • 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)

を書いておく必要がある。

先ほどと同様まずはデモ動画をどうぞ。
snippet_successive.gif

  • yasnippetではfield内を編集中かどうかで様々な挙動が変わる。tabキーの動作もその一つ。
  • 通常、tab連打では編集中の動作に入れない。
  • ここではsnippet内に埋め込めるemacslispを用いて元の文字列を変換させることで強制的に編集中にさせている。
  • さらにその変換後の文字列を展開したいsnippetのkeyと同じにすることでそのまま展開が可能になる。
  • tab連打で展開できるため、あたかも通常通りにsnippetを展開しているかのように連続展開ができる。

以上。

8
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?