前回『#1 なぜEmacsをお勧めするのか?』 に引き続き、
Software Design連載記事を掲載します。

株式会社技術評論社の許可を得て掲載しています。
草稿なので細かい部分は実際の記事とは異なることがあります。

さぁ、Emacsを使ってみよう

 前回はEmacsとは何なのかということを説明してきました。表面的には テキストエディタ の顔をしていますが、実際は Emacs Lisp によりコントロールされている「世界」です。Emacs Lispを書けば、テキストエディタとしての挙動をカスタマイズできるのはもちろんのこと、Emacs上で動くアプリケーションをも作れます。メーラ、ファイラ、シェル、Twitterクライアント、ゲームなどがEmacs Lispで書かれています。また、Emacsは 外部プログラム と連携するのがとても得意で、シェルを動かしたり、コンパイルエラー行やgrep検索結果にジャンプすることもお手のものです。

文字入力の一元化

 Emacsを使うことにおけるユーザサイドにおける最大のメリットというのは、なんといっても「 文字入力の一元化 」です。元々テキストエディタなのでプログラミングや文書作成にEmacsを使うことはもちろんできます。なにより嬉しいのが、Emacsアプリケーションと日常のプログラミングで操作を統一できることです。

 Emacsアプリケーションは多岐にわたりますが、ほぼどれもが文字入力を伴います。メーラでメールを書いたり、IMのメッセージを書いたり、ブラウザのフォームに入力することなど、ありとあらゆる文字入力をEmacsでまかなえます。もし目的を達成するEmacsアプリケーションがあれば、他のソフトを使わずにEmacsでやってしまう方法があります。そのEmacsアプリケーションの使い勝手はともかく、文字入力をする場面においてはいつものEmacsの操作で行えます。この安心感はとてつもなく大きいものです。

 たとえば、Webメールではブラウザで用意されたインターフェースでメールを書くことができます。対してEmacs Lispで書かれたメーラを使えば、Emacsから出ることなくメールが書けます。メールの内容を入力するときも、高度なコマンドがたくさん使えるEmacsならばストレスフリーです。見慣れた背景色やフォントなので目にも優しいです。それこそが筆者がEmacsを溺愛している理由なのです。

 それでは、文字入力一元化のメリットを亨受するために、テキストエディタEmacsの基本的な概念を見ていきましょう。確かにEmacs Lispを書けば操作方法は好き勝手に変更できます。しかし根底にはEmacs流のやりかたというのがあり、それを無闇に変更するとひずみが出てきかねません。Emacs入門者は基本的な操作方法をきっちり学んでおきましょう。カスタマイズするのは基本ができてからで遅くありません。

 Emacsでの効果的な編集方法を学んでおくことは投資効果が大きいです。筆者は20年近くEmacsを使っていますが、最初の頃に覚えた操作方法は今でも使っています。数ヶ月や数年使っていれば無意識に手が動くレベルになってきます。つまり、Emacsのスキルというのは一度覚えれば長年使い続けることができます。わずか数年で時代遅れになってしまうほど移り変わりの激しいIT業界において、長年使い続けられるテキストエディタの基礎スキルというのは異色を放っています。

さあ、始めましょう

 Emacsはシェルから「emacs」と引数をつけずに実行すれば立ち上がります。そして、終了はCtrl+Xの後にCtrl+C(C-x C-c)を押してください。

 本連載では入門者や初級者でもEmacsの魅力に触れていただけることをコンセプトとしています。そのため、しばらく中級者以上には釈迦に説法になりますがご容赦ください。さあ、始めましょう。

キー操作の表記法

 Emacsの世界では、キー操作を記述する独特の記法が存在します。EmacsではCtrlやAltを多用するため、なるべく簡潔な記法が求められてきたからです。

 テキストエディタとしての最も基本的なコマンドはファイルを開くことですが、Ctrl+Xの後にCtrl+Fを押します。これを「Ctrl+X Ctrl+F」と書くと長くなるので、Emacsでは縮めて「C-x C-f」と書きます。「C-」というのはCtrlを押しながらを意味するEmacs記法です。

 画面を逆スクロールするのは、Alt+vを押します。これもEmacs記法で「M-v」と書きます。「A-」ではなくて「M-」となっているのは歴史的理由です。かつてのキーボードにはメタキーというのが存在していて、現在ではAltキーに相当します。Emacsでメタキーと言えばAltキーのことです。

 CtrlとAltを同時に押すのは「C-M-」あるいは「M-C-」と書きます。たとえば、Ctrl+Alt+xは「C-M-x」となります。

 この Emacs記法 はEmacs関連の文書で使われているだけでなく、Emacs記法を解釈するLisp関数が存在します。つまり、Emacs Lisp内でEmacs記法を使ってキー割り当てを記述することもできます。

ファイル・バッファ・ミニバッファ

 Emacsを使うということはバッファを編集することに他なりません。 バッファとは テキストを入れる器のことです。ファイルを編集するということは、ファイル名に関連付けられたバッファを編集することに他なりません。

 このように、Emacsではファイルとバッファを切り離しているので、ファイル編集以外のことができます。ファイルと関連付けられていないバッファには、シェルコマンドの実行結果やヘルプを表示したり、メモやブラウザのフォーム入力などがあります。

 ファイルを開くと、それに対応するバッファが作られます。複数のファイルを同時に開いて編集できますが、一度ファイルを開いてしまえば、バッファ名の先頭数文字を指定するだけで切り替えられます。すでに開かれているファイルを再び開こうとすれば、対応するバッファに切り替わります。

 「 ミニバッファ 」という特別なバッファがあります。それは、Emacsがユーザに情報を尋ねるときに、プロンプトとともに画面下部に出てくる領域です。GUIだとダイアログボックスが使われるところですが、Emacsはシンプルです。C-x C-fでファイルを開くとき、ミニバッファでファイル名を聞いてきます。C-x bでバッファを切り替えるとき、ミニバッファでバッファ名を聞いてきます。M-xの後はコマンド名を聞いてきます。

 ファイル名やバッファ名を聞かれたとき、フルネームを入力する必要はありません。最初の数文字を入力した後にTABを押せば足りない文字列を補ってくれます。それを「 補完機能 」といいます。補完候補が複数個ある場合は補完候補を教えてくれます。

コマンドの覚え方

 Emacsには無数のコマンドが存在します。長年にわたってEmacsを使っている筆者でさえも、知らないコマンドはたくさんあります。

 詰め込み教育に慣らされた日本人は、まず使い方をたくさん勉強してから使うような傾向があると思います。Emacsはたしかに複雑で多機能ですが、そこまで肩肘張ってやる必要はありません。なぜコマンドがたくさんあるかを理解すれば、必要なコマンドが自然と身に付いていきます。

 逆説的な言い方ですが、ただ単にEmacsを使いたければコマンドなど覚える必要はありません。ファイルはツールバーやメニューから開けますし、カーソル移動はマウスや矢印キーも使えます。コピー&ペーストなどの基本的な編集操作もマウスから行えます。このようにごくごく普通のテキストエディタとしてEmacsは使えます。

 最初の取っ掛かりとしては、マウスや矢印キーでもよいです。でも、わざわざ本記事を読んでEmacsに入門しようとしているあなたはそれで満足ですか?ホームポジションから手を離して、マウスに手をやって、再び手をキーボードに戻すことにあなたは耐えられますか?面倒だと思うはずです。面倒なことはなるべく避けてより効率的に操作したくなるものです。GUIでもマウスでコピー&ペーストするのは面倒なのでショートカットキーがありますよね。

 そこで基本的なコマンドを覚えれば、Emacsはもっと使いやすくなります。面倒なことを回避するという明確な目的意識さえあれば、それで十分です。

 カーソル移動も1文字ごとに動かす(C-b、C-f)以外に、行単位(C-p、C-n)・単語単位(M-b、M-f)で動かしたり、行頭・行末(C-a、C-e)、バッファ先頭・バッファ末尾(M-<、M->)に移動できます。なぜそれらのコマンドがあるのでしょうか?1文字ごとに動かしていては、遅すぎるからです。目的地にスパッとカーソルを移動させたいからこそたくさんのコマンドが存在するのです。

 このように多くのコマンドを知れば知るほどEmacsは使いやすくなってきます。コマンドを覚えなくても一応使えますが、覚えるに越したことはありません。しばらくコマンドを使っていれば無意識に手が動くようになります。慣れるまでは不自由ですが、1年使えば、Emacsが手足の一部になった感覚になることでしょう。

 覚えることが少ないことと、使いやすいということはまったく別です。覚えることが少ないと確かに簡単に使えるものの、しばらくしたら操作が面倒になってきます。使える操作が少なすぎるのは不便です。より便利に使うためにコマンドを覚えるのです。

 多くのコマンドを知れば知るほどEmacsは使いやすくなりますが、普段使わないコマンドを無理矢理詰め込んで覚えるのもよくありません。使わないものはあっさり忘却曲線の彼方へ飛んでいってしまいます。ある操作をしたときに不便だと思ったその時こそ、よりよい方法・コマンドを覚えるチャンスです。

禁断の果実cua-mode

 現在のGUI環境でのショートカットキーはだいたい統一されています。たとえば、C-cでコピー、C-xでカットみたいな感じになっていますね。そのため、使い慣れているいつものショートカットキーをEmacsで使いたいという欲求も出てきます。

 これを実現するのが cua-mode です。 CUA(Common User Access) というのは、GUIでの操作を決めている規格であり、その規格に従うことでアプリケーションごとに操作方法を覚える必要をなくすものです。おかげさまでWindowsでもMacでもUnixでも同じ操作が使えます。CUAが制定される以前は操作体系が乱立していました。Emacsの歴史はCUAより古いので現代人から見て変則的なキーバインドになっています。

 M-x cua-modeを実行すると、Emacs本来の操作体系に加え、CUAの操作体系が使えるようになります。

  • C-z: undo
  • C-x: cut
  • C-c: copy
  • C-v: paste

 さらに、Shiftを押しながら矢印キーを押せばその部分を範囲選択できますし、範囲選択時に文字キーを打てば、その部分が置き換わります。つまりEmacsがよりいっそう「普通の」エディタとしてふるまうようになります。

 しかし残念なことにEmacsとCUAは本質的に相容れない操作体系です。C-vは本来次ページにスクロールをするコマンドで、Emacsチュートリアルで最初に出てくるほど超初歩的なものですが、cua-modeではペーストに変更されてしまいます。EmacsにおいてC-xとC-cは2ストローク以上のコマンドのためにすでに使われています。そこで、cua-modeでは強引な方法でEmacsとCUAの操作体系を共存させています。

  1. 範囲が選択されているときのみカット・コピーを行う
  2. C-xやC-cから始まり範囲に対して作用するコマンドは以下の方法で動作する
    • 0.2秒以内に次のキーを打つ
    • C-x、C-cの代わりにShiftも押してC-S-x、C-S-cと打つ
    • C-xの代わりにC-x C-x、C-cの代わりにC-c C-cと打つ

 2のケースに該当するコマンドはさほど多くないので、cua-modeはなんとか使いものになるでしょう。しかし、「郷に入っては郷に従え」という言葉があります。あえてEmacsを選んだ以上、Emacs本来の方法から学ぶべきです。

 EmacsにはCUAのショートカットキーをはるかに超えるコマンドがあり、高度な編集作業も楽々こなす力があります。あらゆる入力作業をEmacsで行うようになれば、CUAに執着する必要はなくなります。

 cua-mode自体が多機能で便利な機能もありますが、Emacsの挙動を大幅に変更してしまいます。よって、初心者救済的な位置付けと思ってください。

チュートリアル

 Emacsには最初から優れた 日本語チュートリアル が存在します。実践形式のテキストになっているので、これを一通りやればEmacsの操作体系の概要が身に付きます。<f1> tを押せば始められます。

 基本的なコマンドを効率的に学ぶには、チュートリアルをやりながら御自身でチートシートを作ることをおすすめします。コマンドは実際に手を動かして学ぶのが一番です。そのため、あえてコマンド一覧を本稿に載せませんでした。

 もっとEmacsについて学びたいのであれば、筆者のEmacs専門メルマガに登録してみませんか?無制限メール相談権付きであなたを徹底サポート致します。http://rubikitch.com/juku/ Happy Emacsing!

本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。