読者です 読者をやめる 読者になる 読者になる

はてブロ@ama-ch

https://twitter.com/ama_ch

入門GNU Emacs 第6章まとめ

Emacs
  • 6章
    • マクロの記述

マクロの定義

キー操作 動作
F3 or C-x ( マクロ定義の開始
F4 or C-x ) マクロ定義の終了
F4 or C-x e 作成したマクロの実行

よいマクロを作るコツ

一般に、優れたマクロには次の3つの部分がある。

  • 作業を開始する正しい位置を(通常は検索によって)見つける。
  • テキストに対して実行する必要のある作業をする。
  • 繰り返し実行されることに備える。

マクロの編集

キー操作 動作
C-x C-k e マクロを編集する
C-c C-c マクロ編集の終了

マクロリング

キー操作 動作
C-x C-k C-d 最後に作成されたキーボードマクロの削除
C-x C-k C-t 1番目のマクロと2番目のマクロが入れかわる
C-x C-k C-p 以前に定義したマクロの順番を回転
C-x C-k C-n 以前に定義したマクロの順番を逆回転

"C-x C-k"が、キーボードマクロのコマンドを表す。

マクロにキーを割り当てる

Emacsには、ユーザーが作成したマクロのためにあらかじめ"C-x C-k 0"〜"C-x C-k 9","C-x C-k A"〜"C-x C-k Z"のキー操作が予約されている。
"C-x C-k b"でマクロの割り当てキーを聞かれるので、ここで割り当てるキーを押す。
この方法で設定したキーバインドは、このセッション内でのみ有効となる。

マクロの名前付け、保存、実行

  1. (マクロが定義されていなければ)マクロを定義する
  2. C-x C-k nを実行し、マクロ名を入力する。ここで入力したマクロは、セッションを終了するまで"M-x 入力したマクロ名"で実行できる。
  3. 2のマクロが消えないようにするには、".emacs"もしくは".emacsから呼び出すよう設定されたマクロファイル"に保存する。"C-x C-f ファイル名 Enter"で定義を保存したいファイルを開き、M->で末尾に移動する。
  4. "M-x insert-kbd-macro Enter"を実行し、Lispコードに変換されたマクロを挿入する。
  5. .emacsファイルに、キーバインドを永続的に利用するための記述を追加する。例えば「transpose-names」という名前を付けて"C-x C-k T"キーを割り当てるなら以下のようになる。
    • (global-set-key "\C-x\C-kT" 'transpose-names)
  6. マクロを.emacs以外のファイルに保存する場合、例えば~/macrosディレクトリ下の"html.macs"というファイルに保存したら、.emacsに次の行を追加することで自動的に読み込ませることができる。
    • (load-file "~/macros/html.macs")
  7. .emacsファイル、もしくは別のファイルに挿入した場合はそのファイルを保存しEmacsを再起動する。

MacのCarbon Emacsで実際にマクロを保存してみたら、.emacsではなく.emacs.elに記述しないとダメなようでした。Macユーザーは.emacs.emacs.elに置き換えてください。

8/5追記

.emacs.elと.emacsでは読み込み優先順位が違うのが原因でした。
Emacsのスタートアップファイルの読み込み優先順位

複雑なマクロの作成

マクロの一時停止とキーボード入力
キー操作 動作
C-u C-x q マクロ定義中に、再帰編集を挿入する
C-M-c 再帰編集を終了
問い合わせの追加
キー操作 動作
C-x q マクロ定義中にユーザーに問い合わせを行う

マクロを実行すると、C-x qを挿入した位置で問い合わせが行われる。

キー操作 動作
y そのまま実行。繰り返し実行が指定されていれば、次の繰り返しを実行
n マクロの実行が中止されるが、繰り返し実行が指定されていれば、次の繰り返しを実行
Enter or C-g マクロの実行が中止されて繰り返し作業もすべてキャンセル
C-r 再帰編集の開始。編集の終了にはC-M-c。その後実行を継続するか尋ねられるので、継続するならyを、しないならnかEnterを押す。
C-l カーソル位置の行が画面中央に表示される(前後の文脈を見たい時に便利)。


今回はマクロについてでした。
マクロを使って平文をはてな記法(表組みとか)に整形する処理を自動化してみたら便利すぎwww