zencoding-mode.el は既に、yasnippet との協調を実装している
スニペット補完後のカーソルの位置が、あまり使いやすくない。
zencoding-mode.el を眺めていて気づいたんだけど、zencoding-mode はすでにyasnippetとの協調を実装していて、これによって上の要望を解決している模様 (zencoding-mode:version 0.5(2009-11-20)版)。
zencoding-expand-yas という関数が、それ。
比較例
次の文字列を入力して、展開する。
div>p*2
zencoding-expand-line (yasnippetと協調しない) の場合
次のように展開される。[] は、展開直後のポイントの位置。まぁこれは確かにポイントをp要素に移動させるのが面倒くさい。
<div> <p> </p> <p> </p> </div>[]
例2
この自動ジャンプはどれぐらい賢いのか、コードを追うのは面倒くさいのでw ちょっと複雑なスニペットを試すことで確認してみる。
div>(p>ul>li*2)+p*2
上のを zencoding-expand-yas コマンドで展開すると
<div> <p> <ul> <li> [1] </li> <li> [2] </li> </ul> </p> <p> [3] </p> <p> [4] </p> </div>
[TAB] を押下するごとに、[1] - [4] の順番にポイントが移動する。どうやらツリー構造の末端を移動していく仕様のようだ。
結論
yasnippet を利用している環境でzencoding-modeを使う人は、zencoding-expand-line の代わりに zencoding-expand-yas を利用すべし。
(define-key zencoding-mode-keymap (kbd "<C-return>") 'zencoding-expand-yas)
*1:yasnippet.el で "yas/next-field-or-maybe-expand" にバインドされている