理系学生日記

おまえはいつまで学生気分なのか

smartparens.el での括弧処理

Emacs での括弧関係ソリューションとしては smartparens.el がモダンという噂を聞いて、こういうのは慣れなので、とりあえず使ってみることにしました。慣れなければそのまま使わなくなるだけだと思ってましたが、使って損になるタイプの elisp ではなかったので、このまま使っていく予定でございます。

smartparens.el はかなり高機能で、公式を見る限り、

あたりの、括弧とかデリミタの elisp を統合して良い感じにしました、という成り立ちの elisp のようです。使いはじめてからのファーストインプレッションですが、

  1. show-paren-mode を "()" の組以外にも自由に拡張できるようになっており、また、それをメジャーモード毎に簡単に定義できるようになっている
  2. 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)

ていうモードがあって、自分で定義した括弧の対応も表示してくれることだとおもいます。よろしくおねがいします。