2016年7月3日日曜日

Emacs カッコの自動挿入で困っている方へ

閉じカッコの自動挿入は便利なのに・・・

Emacs では、カッコを書く時に自動的に閉じカッコを挿入してくれる設定があります。(リンク:Emacs 閉じカッコの自動挿入)

開きカッコ "(" を書くと自動で閉じカッコ ")" を書いてくれて、更にカーソルはカッコの中にあるのですぐに中身を書き始められます。

自動挿入でなかった時には、カーソルを行ったり来たりさせていたのがなくなってスムーズに書けるようになり、絶対に外せない機能です。


これは、何もないところにカッコを書き始める場合は非常に便利な機能です。

でも、すでに中身が書いてある所でそれをカッコでくくろうとすると、とたんに煩わしい機能になります。

カッコでくくりたい部分の先頭にカーソルを持ってきてカッコを書くとこんな風になります。

 y = ()a + b * c          // y = (a + b) * c と書きたいのに・・・


"M-(" で解決

これを解決するのが、リージョンを選択して M-( です。

上の場合だと、a + b の部分を選択して、M-( すると (a + b) になります。

直観的で非常に良いアイデアだと思います。

でも、惜しむらくは、()カッコにしか対応していないところです。

ダブルクォーテーションに対応した、M-" はないのか・・・。



別のアプローチ

方針は違うのですが、こんな対策を考えてみました。

「() カッコを書くとカーソルを () の中に持ってきてくれる。」

() カッコは自分で書きます。実は、閉じカッコを書くのが面倒くさいのではなくてカーソルをカッコの中に戻すのが面倒なのではないかという発想です。

よろしければ使ってみてください。 () と {} と [] と <> と "" と '' に対応しています。

https://github.com/tbhby39g/backalittle.el


インストールするには、backalittle.el を load-path のフォルダ(例えば、~/.emacs.d/lisp/)に置いて、.emacs(または、init.el) に (require 'backalittle) を書き加えれば OK です。

これを使う場合は、electric-pair-mode (or その他のカッコ自動挿入機能)は無効にしておいてください。


リンク: Emacs 閉じカッコの自動挿入
リンク: https://github.com/tbhby39g/backalittle.el