Pages

自己紹介

某IT技術情報誌に連載記事を持っていたテクニカルライター。またもや休刊してしまったよ。
Copyright © 2011-2016 Daregada. All rights reserved. Powered by Blogger.

ParEditのチュートリアルを書いてみた

2012-03-07

GNU EmacsでLispコードを書くときに括弧類のバランスを維持してくれるParEdit(paredit.el)の日本語チュートリアルを書いてみたよ、という話。

Abstract

理由
ParEditに関するまとまった日本語解説が見つからなかったため
解説
分量が多くて、このブログに書くのを断念した(以下に書かれているのは単なる雑談)。 EmacsのOrg(org-mode)で書いて、HTML形式と(LaTeX経由で)PDF形式にエクスポートしたものを、Daregada Archivesで公開している。

理由

ParEdit(paredit.el)は、GNU Emacsのマイナーモードで、Lispコードを書くときに各種メジャーモード(emacs-lisp-modeやscheme-modeなど)と組み合わせて使う。 簡潔に言うと、S式で使われる括弧類のバランスをEmacsに維持させるためのモードだ。 使い慣れると手放せなくなるのだが、日本語のまとまった解説がWeb上に見つからなかったため自分で書くことにした。 Daregada Archivesの「ParEdit チュートリアル」だ。

さて、Lispを使っていない人にLispのコードを見せると、たいていは(内容ではなく)括弧の多さについての感想が返ってくる。 特に、閉じ括弧が連続する関数/手続きの終端あたりを指して、「こんなのどうやって数えてんの?」とかね。

そこで、「カッとなって実際に数えたらJavaより少ない」と実際のコードで証明(?)してみせるのもいいだろうし、「(抽象)構文木を直接プログラムに書き下しているんだ。しかもマクロを使えば(以下略)」と、真実だけどLispの素養のない人にとってはわけのわからない説明で煙に巻くのもいいだろう。 いっそ、「君の指しているそれは何と呼ぶ記号で、何に使うんだい」と老紀昌のごとく真剣に尋ねるのもいいかもしれない。

実際には、インテリジェントなエディターに括弧類の対応関係を明示する機能がある(Emacsだとshow-paren-mode)ため、プログラマーはいちいち閉じ括弧の数を数えたりしない(そういうエディターがないころは? →「スーパー括弧」でググレ)。 眼鏡を常用する人が、視界内のフレームやフレーム外のぼやけた風景を普段は意識しないのと同じだ。 閉じ括弧を入力するときだけ、バランスが取れるように気をつければいい。

さらに、ParEditで括弧類のバランスをEmacsに維持させれば、プログラマーが閉じ括弧を入力する必要もなくなる。 これは、単に「(を押すと()がペアで挿入される」というだけでなく、C-dによる1文字削除やC-kによるキルなどの編集操作を行なっても括弧類のバランスが維持されることを意味する。

さらに、)を左右に移動させてリストにS式を飲み込む/吐き出す(リストの伸縮)や、内容の一部を残してリストを削除する(上位リストに接合)といったキー操作も用意されており、Lispコードの編集が大いに捗る。 たとえば、「let式の本体(body)部分だけを残して残りは削除する」ことが一回のキー操作(M-r)で可能だ。

ただし、行単位のキル&ヤンクによって括弧類のバランスが崩れてしまう可能性は残されている。 その場合、不足した(あるいは過剰な)閉じ括弧を単独で挿入/削除できる特殊な状態になる。 また、いつでも括弧類を(バランスを無視して)挿入/削除できるキー操作も別途用意されている。

詳細は、Daregada Archivesの「ParEdit チュートリアル」を参照されたい。

解説

いつものようにこのブログの記事として書き始めたのだが、分量が多くなって(PDF版はA4サイズ12枚ほど)断念した。 同じ内容の文書をHTML+CSSとPDF形式で独立して作成するのが面倒だったということもある。

そこで、EmacsのOrg(org-mode 7.8.02)を利用して文書を作成し、HTML形式とPDF形式にエクスポートすることにした。 PDF形式は、LaTeX形式でエクスポート→platexでDVI形式の生成→dvipdfmxでPDF形式に変換している。

日本語のしおりを含める場合の設定など、いくつかノウハウがあるので別の機会に記事にしたい。

0 件のコメント:

コメントを投稿