[Emacs] ブレース間で改行したときに空気を読んでくれるようにした
コーディング時にブレース間で改行したときの挙動が気に入らなかったので改善した。
状況
|
をカーソルだとして、下記のようなコード片があるとする:
func hoge() {|} // | はカーソル
問題は、ここで改行したときの挙動。 快適にコーディングするためには、以下のようになってほしい:
func hoge() {
| // | はカーソル
}
しかし実際には、下の状態になるのが不満だった:
func hoge() {
|} // | はカーソル
ふだん evil-mode でコーディングしているので、この状況から望む状態にするために毎回 ctrl-[
shitft-o
する必要があった。
いいかげん嫌になったので、これを改善した。
実装
(defun my-break-between-braces ()
(interactive)
(if
(and (eq ?} (char-after (point)))
(eq ?{(char-before (point))))
(progn
(open-line 1)
(newline)
(indent-according-to-mode))
(newline-and-indent)))
メモ
実装は素朴で、カーソルが {
と }
の間にあれば、行オープンと改行に続けて (indent-according-to-mode)
を呼び出すというもの1。
カーソルがブレースの間になければ、ふつうに改行することにした。
これが C-m
で呼ばれるようにして完了。
(global-set-key (kbd "C-m") 'my-break-between-braces)
-
当初は
(c-context-open-file)
と(c-context-line-break)
を使う実装だったが、JavaScript を書く時に閉じブレースが不必要にインデントされてしまったためこの実装にした。本来であれば根本原因を究明すべきだがたかがインデントなので対処療法的な解決に留めた ↩︎
comments powered by Disqus