Emacs クイックリファレンス


1. 基本的なこと

emacs においては、全てをコマンド操作で行うことが可能です。 キーを押すと、そのキーに割り当てられている (これを、束縛あるいは バインドされているとも呼ぶ) コマンドが実行されます。 この「バインド」を変更することにより、自分の好みの emacs にすることができます。どのキーにも 割り当てられていないコマンドが沢山あって、 これらは M-x に続いてコマンド名を入力することで実行させることができます。 また、キー操作はコマンドの頭文字で覚えるようにすると楽です。 

emacs のキー操作では、大文字小文字は区別されます。


2. ファイル操作

 ・ C-x C-f (find-file) ファイルの読み込み
・ C-x C-s (save-buffer) カレントバッファを保存
・ C-x C-w (write-file) カレントバッファを別名で保存
・ C-x i (insert-file) カーソル位置にファイルを挿入

3. カーソル移動

 ・ C-f (forward-char) 1文字進む (→)
・ C-b (backward-char) 1文字戻る (←)
・ C-n (next-line) 次の (= next) 行へ (↓)
・ C-p (previous-line) 前の (= previous) 行へ (↑)
・ M-f (forward-word) 1語進む
・ M-b (backward-word) 1語戻る
・ C-e (end-of-line) 行末へ
・ C-a (beginning-of-line) 行頭へ
・ M-e (forward-sentence) 文末へ
・ M-a (backward-sentence) 文頭へ
・ M-> (end-of-buffer) 現在位置をマークしバッファ末尾へ
・ M-< (beginning-of-buffer) 現在位置をマークしバッファ先頭へ
・ C-v (scroll-up) 1画面分進む
・ M-v (scroll-down) 1画面分戻る
・ C-x L (goto-line) 指定した行へ移動...
・ C-l (recenter) カーソルが画面中央にくるようにする

4. カット / コピー / 削除

DelC-d を使い分けられるようになると便利です。 C-Space でマークした位置と現在のカーソル位置の間を regionと呼びます。 emacs ではいろいろな操作を region に対して行うことができます。
 ・ Del (delete-backward-char) カーソルのの文字を削除
・ C-d (delete-char) カーソルの文字を削除
・ C-k (kill-line) 行のカーソル以降を削除し kill-ring へ
・ C-w (kill-region) region の範囲を削除して kill-ring へ
・ M-w (copy-region-as-kill) region の範囲を削除せず kill-ring へ
・ C-y (yank) kill-ring の内容をカーソル位置にはき出す
・ M-y (yank-pop) yank した内容を消去し、前の kill-ring をはき出す (yank の直後しか実行できない)
・ C-Space (set-mark-command) 現在のカーソル位置をマーク
・ C-x h (mark-whole-buffer) 現在のバッファ全体を region にする
・ C-x C-x (exchange-point-and-mark) カーソル位置 ←→ マーク位置を交換
・ C-o (open-line) カーソル位置から一行スペースを空ける
・ --- (kill-rectangle) 長方形に kill-region
・ --- (yank-rectangle) 長方形に yank
・ --- (open-rectangle) 長方形にスペースを空ける

5. バッファ / ウインドウ操作

バッファとウインドウの概念は混同しやすいのですが、きちんと区別してください。
 ・ C-x b (switch-to-buffer) ウインドウのバッファを切り換える...
・ C-x C-b (list-buffers) 存在しているバッファ一覧を表示...
・ C-x k (kill-buffer) バッファそのものを消去する...
・ C-x 0 (delete-window) ウインドウを消去する
・ C-x 1 (delete-other-windows) ウインドウを画面いっぱいに広げる
・ C-x 2 (split-window-vertically) 上下に 2分割 (C-x ^ で広げる)
・ C-x 3 (split-window-horizontally) 左右に 2分割 (C-x { , C-x } で広げる)
・ C-x o (other-window) カーソルを次のウインドウへ移動 (時計回り)

6. 文字列検索 / 置換

正規表現による検索は重要です。検索はカーソルを移動させるとその位置で抜けることができ、C-g を押すと 最初の位置で抜けます。
 ・ C-s (isearch-forward) 順方向に検索...
・ C-r (isearch-backward) 逆方向に検索...
・ M-% (query-replace) 文字列置換... (「!」で一度に置換できる)
・ --- (isearch-forward-regexp) 順方向に正規表現で検索...
・ --- (isearch-backward-regexp) 逆方向に正規表現で検索...
・ --- (query-replace-regexp) 正規表現で置換...

7. ヘルプの使いかた

ヘルプモードへは、 C-h を押すことによって入ります。そのあとどんなキーを 押すかによって、ヘルプの機能が決定されます。“?” を押すと、機能の一覧が表示されます。 ヘルプの出力は、たいてい *Help* という名前のバッファが作られそこに表示されます。
 ・ C-h f (describe-function) このコマンドは何をする ?
・ C-h k (describe-key) このキー操作は何をする ?
・ C-h w (where-is) このコマンドはどこのキーにある ?
・ C-h v (describe-variable) この変数は何を設定するもの ?
・ C-h b (describe-bindings) 現在のキー割り当ての一覧は ?
・ C-h a (command-apropos) 正規表現でコマンド名を検索
・ --- (apropos) 正規表現で関連するすべての名前を検索
  [apropos は与えられた正規表現について emacs が知っているすべてのことを出力するため、非常に長大な出力が得られることがあるので注意しましょう。]

8. その他覚えておくと便利なコマンド

 ・ C-g (keyboard-quit) 現在実行中の操作を中止
・ C-z (suspend-emacs) Emacs を一時停止する (アイコン化)
・ C-u (universal-argument) 次に入力するコマンドを 4回実行する
(2回押せば 16回)
・ ESC 数字 次に入力するコマンドを数字の回数だけ実行
(ESC 1 0 0 a なら 100個の a を入力)
・ C-x u (advertised-undo) ひとつ前の操作を取り消し、元に戻す(undo)
・ C-x C-c (save-buffers-kill-emacs) すべてのファイルを保存し emacs を終了
・ C-x C-q (vc-toggle-read-only) バッファの変更禁止を on/off 切り替え
・ C-x ( (start-kbd-macro) マクロの記録を開始
・ C-x ) (end-kbd-macro) マクロの記録を終了
・ C-x e (call-last-kbd-macro) 記録したマクロを実行
・ M-q (fill-paragraph) 今いる段落を強制的に桁揃え (= fill)
・ C-x f (set-fill-column) M-q の桁揃え位置を現カーソル位置に設定
・ --- (auto-fill-mode) 自動的に桁揃えするモードに
・ --- (untabify) region 内のタブ文字をスペースに変換

9. 正規表現とは

正規表現とは文字列を検索するためのパターンのことですが、ただ単に「これと 一致しているか」だけではなく、非常に複雑なパターンを検索することが できます。正規表現によって実際に文字列を検索したり置換したりする方法は、 文字列検索 / 置換のほうを見てください。
 . 任意の 1文字に一致
x* x の 0回以上のくり返しに一致 (つまり、空列にも一致)
x+ x の 1回以上のくり返しに一致 (空列には一致しない)
x? x の 0回または 1回の出現に一致
x\|y x または y に一致
[...] [ ] 内の文字にどれでも一致
[^...] [ ] 内の文字以外ならどれでも一致
^ 行頭に一致
$ 行末に一致
\< 単語の始まりに一致 (すぐ前が空白や改行で、直後が英字など)
\> 単語の終わりに一致 (すぐ前が英字で、直後が空白など)
\( ... \) グループ化。これで囲んだ文字列は 1つの文字のように扱われる
(またこれで囲まれた文字列は置換の際に \1, \2 ... 等で利用可)
\\ 「\」に一致
正 規表現の例 :
\<[1-9][0-9]*\>
1〜9 の文字で始まり、あとに 0〜9 の文字が 0個以上つづく。 0個以上だから、ひとつもなくてもかまわない。ここで注意すべきなのは *という正規表現は「この直前のパ ターン」だけに かかります。したがってここでは [1-9][0-9] というくり返しが 0個以上続くのではなくて [0-9] というパターンだけが 0個以上 つづくという意味です。よってこのパターンに一致するのは数字ですが、 さらにこのパターンは\<お よび\>で 囲まれているため、たとえば「a=123455;」の「234」だけに一致してしまう、 というようなことはありません。数字の前後は必ず単語の境界でなければいけない のです。よってこのパターンは上の例では必ず「123455」に一致します。
\<0x[0-9A-Fa-f]+\>
前のパターンと似ていますが、これは C で使われている 16進表現 (0x7e など) に一致します。[0-9A-Fa-f]の ようにいくつもの文字を指定できる ことを覚えてください。A-Fa-f をわざわざ書くのは、 大文字でも小文字でも受けつけるようにするためですね。また、+ を使ったのは、 前のパターンと違って、* を使うとまったくの空列にも一致してしまうからです。
^[ ^I]*$ (^I を入力するにはタブキーを押す)
最初に ^ があり、最後に $ があるパターンだったら、 そのパターンが一行にまるまる一致しなければ一致とみなされません。 ここではそれを利用しています。正規表現の意味は「行頭があって、 空白またはタブだけが 0個以上続いて、行末になる」、つまり 一行がスペースまたはタブだけからなる、いわゆる「空白行」に 一致します。
<[^<>]+>
これは HTML のタグを捜すものです。最初に < ではじまり、 次に「< でも > でないもの」が 1個以上続きます。最後は > で終わる、 このようなパターンが含まれている行を捜します。[^>] の代わりに . を使ったらと思うかもしれませんが、これではだめです。 正規表現はなるべく広い範囲に一致するように検索されるので、 <.+>とい うパターンでは 「<title>hoge</title>」 などという文字列にもまるまる一致してしまうのです (先頭の < と、 最後の > に囲まれている)。それから + ではなくて * ではどうか。 これでもいいのですが、これだと <> なんかにも 一致してしまうのです。<[a-zA-Z]+>にすると、今度は </h1>などに一致できませんね。
\(おい\)+
上の例までは * や + は一文字に対してだけでしたが、 \(\) を使ってパターンをグループ化 することにより、文字列のくり返しに一致することができます。 この例はいささかバカっぽいですが「おいおいおいおい…」という 「おい」の一回以上のくり返しに一致します。
「\([^」]+\)\1」
ちょっと複雑になります。ま ず“「”と“」& rdquo;で囲まれているものを 捜すのは先の HTML タグの例と同じですね。ところがこの“「”“」”の間の パターンは \(\)で囲まれています。 こうすることにより、ここで一致した文字列が\1という 変数に入ると考えてください。よって、ここでは\(\)で 囲まれたパターンのすぐあとに \1 がくることにより「同じ文字列が 2度くり返す」ような文字列 (例えば「はおはお」など) を 見つけることができるのです。なお、パターンの中に 2度 \(…\) が出てくると、2度目の文字列は \2 という変数に入るように なっています。\3、\4 …など以下同様です。
「\([^」]+\)」 → (置換) → <h1>\1</h1>
\1 は置換においても使えます。これは正規表現を使った置換 (query-replace-regexp) で使うもので“「”“」”により 囲まれている文字列を“<h1>”“< /h1>”で囲むようにします。 このように正規表現を使った置換を覚えると、今まで手作業で やっていたことがウソのように楽になります。

10. バッファメニューの使いかた

emacs ではいくつものバッファを開くことができます。また、ヘルプや mh-e や dired なども それを使うと勝手にバッファを生成します。沢山のバッファを開いていると、今どの バッファが存在していて、自分が編集しているのはどれなのか、わからなくなって しまいます。このようなときはバッファメニューモードに入っていらないバッファを 削除できます。
 ・ C-x C-b (list-buffers) バッファメニュー モードに入る
・ d (Buffer-menu-delete) バッファに削除マークをつける
・ C-k (Buffer-menu-delete) バッファに削除マークをつける
・ x (Buffer-menu-execute) 削除マークをつけたバッファを本当に削除
・ o (Buffer-menu-other-window) バッファを別ウインドウで開く
・ f (Buffer-menu-this-window) バッファをこのウインドウで開く
・ s (Buffer-menu-save) バッファを保存
・ % (Buffer-menu-toggle-read-only) バッファの変更禁止を切り替え
・ m (Buffer-menu-mark) バッファをマーク
・ 1 (Buffer-menu-1-window) ウインドウを全開にしてバッファを開く
・ 2 (Buffer-menu-2-window) マークしたバッファを 2つのウインドウに開く
・ q (Buffer-menu-quit) バッファメニュー モードを抜ける

mh、dired、バッファメニューを使ってみると、たいていの操作は 似ていることに気づくでしょう。どのモードでもマークして実行するという点では 同じです。このように、コマンド体系の「くせ」を早くつかむことが、 emacs を早く体得するうえでのポイントです。