Pages

2011-03-05

Emacs で連番を挿入する (register 編)

Emacs で連番を挿入する方法について、ブログが続かないわけさんがまとめてらっしゃる。

Ruby のワンライナーを使ったり、キーボード・マクロの C-x C-k C-c (Macro counter value) を使う方法など、ぼくの知らない方法が目白押し。気になる方は是非上記エントリーを参照されたし。

Emacs の register を使う方法

ぼくが「連番」を振る時は、Emacs の register 機能を使っていた。この方法は、上記エントリーに記述がなかったので簡単に書いてみる。

Emacs には register というマーカーやウィンドウ状態を保存できる領域がある。この register には数字も保存できる。数字を操作するのに使うコマンドは、以下の 3 つ:

C-u NUMBER C-x r n R
レジスター文字「R」に数「NUMBER」を保存する
C-u NUMBER C-x r + R
レジスター文字「R」に保存されている数に「NUMBER」を足す
C-x r i R
レジスター文字「R」に保存されている数を挿入する

例えば、レジスター文字「a」に数字を入れて、「1234」と入力する場合、次の様にコマンドを打つ。

C-u 1 C-x r n a  ; レジスター「a」に数字 1 を保存
C-x r i a        ; レジスター「a」(中身 1) を挿入 
C-u 1 C-x r + a  ; レジスター「a」の数字を 1 増やす
C-x r i a        ; レジスター「a」(中身 2) を挿入
C-u 1 C-x r + a  ; レジスター「a」の数字を 1 増やす
C-x r i a        ; レジスター「a」(中身 3) を挿入
C-u 1 C-x r + a  ; レジスター「a」の数字を 1 増やす
C-x r i a        ; レジスター「a」(中身 4) を挿入

Keyboard Macro との併用

レジスターを使った連番挿入は、キー・ストロークが多くて大変。そこで、キーボード・マクロを併用する。例えば

1. 
2. 
3. 
4. 

という結果が欲しい場合は次の様にする。

C-u 0 C-x r n a  ; レジスター「a」に数字 0 を保存
C-x (            ; キーボード・マクロ開始
C-u 1 C-x r + a  ; レジスター「a」の数字を 1 増やす
C-x r i a        ; レジスター「a」を挿入 
C-e              ; 行末へ移動
. RET
C-x )            ; キーボード・マクロ終了
C-x e            ; キーボード・マクロ実行
e e e            ; 連続実行

以上。

レジスターの扱いに慣れると、複雑な処理をキーボード・マクロで組むことができる様になる。憶えておいて損はない。

No comments:

Post a Comment