Kentaro Kuribayashi's blog

Software Engineering, Management, Books, and Daily Journal.

yasnippetがすごい!!!!1112345!

"Yet Another Snippet Package | M-x all-things-emacs"で知った、yasnippetがすご過ぎる!!!!1112345!これは、同じ作者が以前に作っていたsmart-snippet.elのリライト版?みたいなものらしいのだが、ともあれGoogle Codeにてプロジェクトが開始されたのが3/7というから、アツい。

まぁ、とりあえずこれを見てくださいよ(YouTubeの画質だとアレだという場合は、上記プロジェクトページからaviの動画が落とせるので、そちらを見るのが良いです)。

最初のあたりは、まぁ、emacs-railsでも使われているsnippet.elとかでも十分可能なことなのだけど、複数のテンプレート候補が選択リスト表示されたり、メニューバーからテンプレートを挿入できたりするのがいい感じだし、後半、どんどんヤバくなってくる。一箇所に入力していくだけで、複数箇所が同時に変更されていくあたりとか、なんだこれは!!!11123!つって、まじビビる。

また、動画だとわかりにくいんだけど、テンプレートにelispを埋め込んで、実行時にevalすることで高い表現力を実現している。elispの評価、結果挿入自体は、(使ったことないからよくわからないが)skelton-modeでも可能ではある。しかしながらyasnippetsは、たとえば`(current-time-string)'といった埋め込みelispを評価するだけでなく、`(capitalize text)'という感じで、入力文字列をtextという引数に取って評価、結果を挿入することが可能であるため、さらにヤバい。

よいところをまとめると、こんな感じ。

  • 設定が超簡単。
  • テンプレートの記法が簡単明瞭。
  • テンプレートをファイル内にテキストで書くので見通しがよく、いじりやすい(S式内のリテラルでも書けるけど、見づらい)。
  • テンプレートの配置が簡単明瞭。
    • ディレクトリがテンプレートを適用するメジャーモードを、ファイル名によりテンプレートを実行するトリガとなるキーを表す。
  • Synchronization!
  • Sexp evaluation!
  • Transformation!

……つってもわかりにく過ぎるので、HowtoDefineSnippet - yasnippetをざっとご覧になると良いと思う。

ただし、まだ開発が始まったばかりということもあって、問題もある。いま僕はemacs -nwで主にEmacsを使っているのだが、それだとあの動画のように複数候補の選択リストが出てこないというのはまぁ当然としても、そもそも複数候補があるテンプレート自体が正しく扱えずエラーとなる状態。 ver-0.2.3で修正された(http://code.google.com/p/yasnippet/issues/detail?id=7)

また、先にも書いた通り、テンプレートの定義は`(yas/define-snippets ... )'という感じで書くか、あるいは、テンプレートファイルに書いていく感じなのだけど、abbrevに比べると定義の自由度が高いのと引き換えに、新規テンプレートの追加がめんどくさい。そのあたりはまぁ、今後解決されていくのではないかと思われるので期待。

つーか、abbrevにしてもsnippetにしても、略語自体を記憶するのが困難であるという、そもそも的な問題がある。そこで、「略語の候補リスト表示、絞り込みをanything.elにより行うことができたら、これはもうヤバ過ぎ果てまくることになるのではないか lang:ja」という感じなのだが、ちょっと見てみたところでは、僕には簡単にはできそうになかった。是非とも、誰か!!!!1112345!