yasnippetのインデントはやっぱりおかしい
たとえばブロック付きメソッド呼び出しのdoを定義してみる。
#name : do ... end # -- do $0 end
で、doを展開させるとこんなインデントになってしまう。
def x hogehoge do end end
ソースを読んだが、narrow-to-regionでnarrowingしてsnippetを挿入し、挿入開始時点のインデントをやっているからおかしい。
ruby-electric-spaceと相性が悪いのでyasnippetに置き換えようと思ったが、こんなんじゃだめだ。
snippet挿入開始ポイントと終了ポイントがわかれば、indent-regionできるのだが…。インデントするようなmetadataを作成するパッチを書くべきかな。
あと、injectのsnippetで初期値を入力しなかったらカッコごと省略するようなsnippetは作れないものか。そうすればMochaのmockやstubのsnippetもいい具合に作れるのだが。
#name : inject(...) {|...| ... } # -- inject(${1:0}) {|${2:s}, ${3:x}| $0 }
便利そうなのだが、現時点では正直まだ興奮するほどではない。興奮しないのはskeletonを常用してるからかな…
なにはともあれこれからの発展が楽しみだ。
追記:解決した?
こんな設定を加えておけばきちんとindentされるようになった。でもインデントしてほしくないsnippetとかはどうなんだろうね。
(defun yas/indent-snippet () (indent-region yas/snippet-beg yas/snippet-end) (indent-according-to-mode)) (add-hook 'yas/after-exit-snippet-hook 'yas/indent-snippet)