Emacs での括弧関係ソリューションとしては smartparens.el がモダンという噂を聞いて、こういうのは慣れなので、とりあえず使ってみることにしました。慣れなければそのまま使わなくなるだけだと思ってましたが、使って損になるタイプの elisp ではなかったので、このまま使っていく予定でございます。
smartparens.el はかなり高機能で、公式を見る限り、
あたりの、括弧とかデリミタの elisp を統合して良い感じにしました、という成り立ちの elisp のようです。使いはじめてからのファーストインプレッションですが、
- show-paren-mode を "()" の組以外にも自由に拡張できるようになっており、また、それをメジャーモード毎に簡単に定義できるようになっている
- Emacs の mark (範囲指定)を有効化した上で開き括弧を入力すると、範囲の最後に自動的に閉括弧が補完される
という点が使いやすいと思いました。
Emacs における全作業を効率化する」タイプの elisp としてはシンプルですし、取捨選択の判断もつきやすいので、まず試してみるというのも一興だと思います。幸いにも package.el に対応してるので、
(add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/"))
した上で、 M-x package-list-packages からインストールするなりしてみて頂ければ。
とりあえずの設定としては、
(require 'smartparens-config) (smartparens-global-mode t)
という 2 行だか 3 行だかを書いていれば、デフォルトの「いいかんじ」の設定が全てのモードに適用されて幸せだと思います。
"括弧"の定義
何を"括弧"とみなすのか、というのが elisp から簡単に定義できるようになっています。
(sp-pair "<#" "#>")
たとえば、上記のようにすれば、"<#" を開き括弧、"#>" を閉じ括弧とした括弧の組が定義できて、それを smartparens.el から制御できるようになります。
範囲指定後に開き括弧を入力すると、範囲の最後に閉括弧を補完
で、括弧を定義して個人的に何がうれしかったかというと、それがこの閉括弧の補完機能。yasnippet を使ってもできるんでしょうけど。
例えば、括弧のペアとして、
(sp-pair "$" "$")
を定義して、
3^2=9
とか書いてあるのを範囲指定して"$"を入力すると、全体が "$" で囲まれて、LaTeX の一行数式モードになってアラ便利、みたいなかんじ。
ほか
html-mode とか使ってると、
<span> hoge </span>
とかになっているのを範囲指定して "<" を入れると全体が開きタグと閉じタグに補完されて、さらに html> って打てば
<html><span> hoge </span></html>
という形にできます。それ yasnippet でできるよ!、zen coding でやれ!などの声が聞こえてきそうですね。はい。
まぁ、その他うれしいかんじだったのは、
(show-smartparens-global-mode t)
ていうモードがあって、自分で定義した括弧の対応も表示してくれることだとおもいます。よろしくおねがいします。