Emacsチートシートの次ぐらいに覚えるとハッピーなこと3つ

自作のEmacsチートシートを公開してみる - UNIX的なアレを読んだ後にEmacsを立ち上げようとしてFirefoxに「M-x emacs」って打ち込みそうになった(実際にM-xまで打った)俺がお送りします。すごく便利だと思うのだけど周りのEmacs使いにも使いこなせている人が少ない機能を3つ紹介します。2と3が特におススメ。

universal-argument

C-uで実行できるuniversal-argumentは非常に奥深い機能です。C-u aと入力するとaが4つ入力されます。これがスタート地点。C-u 100aとうつとaが100個入力されます。同様にC-u 50 C-dと打つとC-dを50回やったのとほぼ同じ結果になります。*1 *2

universal-argumentのもう一つの役目はコマンドの挙動をちょっとだけ変える機能です。たとえば、C-u C-yを実行するとyank(貼り付け。C-yと同じ)が行われるわけですが、この場合は4回yankが行われるわけではなく、「yankするけどyank後のカーソル位置は今のまんまに」という挙動になります。

keyboard-macro

keyboard-macroはEmacsに打ち込んだキーボードの入力を簡単なアクションで再現する機能です。VBAとかの機能とたぶんおんなじですね。

C-x (
kmacro-start-macro。キーボードマクロの記録を開始する。
C-x )
kmacro-end-macro。キーボードマクロの記録を終了する。
C-x e
kmacro-end-and-call-macro。キーボードマクロを実行する。

簡単な例をやってみましょう。

text
text
text
text
text
text

こんなデータがあったとします。これを1行につなげたいと思ったとします。カーソルは先頭の行にあるものとします。

  1. C-x (でキーボードマクロの記録を開始。
  2. C-eで行末へ移動。
  3. C-dでカーソル位置で1文字削除。
  4. C-x )でキーボードマクロの記録を終了。

これで準備は完了です。今実行した「行末へ移動&1文字削除」を何度も繰り返したいとします。C-x eを何度か実行します。するとこうなります。

texttexttexttexttexttext

これはものすごく応用範囲が広いですよ。C-u C-y C-nの繰り返しなんかはしょっちゅう使います。C-u C-yの機能は先ほど説明しましたね。これは「C-nで一行下に移動、C-u C-yでカーソル位置を動かさずに貼り付け」を延々繰り返すことができ、バッチファイルを作る場合などに使うと死ぬほど便利です。

C-x eを100回も繰り返すと小指は逝ってしまいますが、Emacs22あたりから C-x eeeeeeとやるだけでeの回数分だけ実行できるようになっています。これもものすごく便利。もちろんC-u 100 C-x eという方法もあります。実行前に、必要な実行回数を考えなくちゃいけないのは面倒なので俺はあまり使いませんが。

矩形編集機能

Emacsにも矩形編集機能があります。そろそろめんどくさくなってきたのでコマンドの概略だけ説明します。

C-x r k
矩形で削除を行う。削除したデータは矩形編集専用のバッファに退避されます。
C-x r y
矩形で貼り付け。C-x r kで削除された内容を矩形チックに貼り付けます。

やっぱり

Emacsと聞いて俺がきましたよ - 日記を書く [・w・] はやみずさんの次ぐらいでいいと思います。

*1:C-dを50回打ってもkill-ring(クリップボード)には何もたまりませんが、C-u 50 C-dでは削除された内容がkill-ringに保存されます。

*2:C-u C-vとかC-u C-kは一風変わった挙動をします。