サーチ…
マクロの記録
マクロを作成する1つの方法は、それを記録することです。
マクロの記録を開始し、それをレジスタに保存します(この例ではa
を使用a
ますが、通常はテキストを取り消すことができる任意のレジスタです)。
qa
次に、マクロに記録するコマンドを実行します(ここでは、行の内容を<li>
タグで囲みます)。
I<li><ESC>A</li>
マクロに記録するコマンドが終了したら、記録を停止します:
q
今度は、 a
に格納されa
コマンドの記録されたシーケンスを実行したいときはいつでも:
@a
vimは記録されたシーケンスを繰り返します。
次回、最後に使用したマクロを繰り返す場合は、 @
をダブル入力してください:
@@
特別なボーナスとして、コマンドの前に数字を置くと何度もそれを繰り返すことを覚えておくとよいでしょう。したがって、登録簿に保存されa
マクロを20回繰り返します:
20@a
vimマクロの編集
長いマクロで間違いを犯すこともありますが、完全に再記録するよりもむしろ編集してください。これは次のプロセスを使用して実行できます。
"<register>p
空行にマクロを置きます。マクロがレジスタ
a
に保存されてa
場合、コマンドは"ap
。必要に応じてマクロを編集します。
カーソルを行の先頭に移動し、
"<register>y$
を使用して、マクロを正しいレジスターにヤンクします。元のレジスターを再使用するか、別のレジスターを使用することができます。レジスタ
b
を使用する場合、コマンドは"by$
によって、または"<register>d$
使用して(未使用の行を削除して)
再帰マクロ
Vimマクロは再帰的に使うこともできます。これは、すべての行(または他のテキストオブジェクト)をファイルの終わりまで実行する必要がある場合に便利です。
再帰マクロを記録するには、空のレジスタで開始します。 (レジスタはq<register>q
を使用して空にできます)。
各行で開始と終了の一貫した開始点を選択します。
記録を終了する前に、マクロ自体を最後のコマンドとして呼び出します。 (これは、レジスタが空でなければならない理由です:マクロはまだ存在しないので、何もしません)。
例を示します。
line 1
line 2
line 3
foo bar
more random text
.
.
.
line ???
通常モードでは、最初の行にカーソルを置き、空のレジスタa
、次のマクロを記録できます。
qaI"<Esc>A"<Esc>j@aq
@a
を一回呼び出すと、ファイルのすべての行が二重引用符で囲まれます。
マクロとは何ですか?
マクロとは、Vimが遅延なく "再生"することを意図した一連のキーストロークです。マクロは、レジスタや変数に格納したり、キーにバインドしたり、コマンドラインで実行することができます。
ここでは、行の3番目のword
を大文字にする簡単なマクロを示します。
0wwgUiw
そのマクロはレジスタq
記録することができます:
qq start recording into register q
0wwgUiw
q stop recording
またはレジスタq
直接保存されます。
:let @q = '0wwgUiw'
と再生する:
@q
しかし、コマンドラインで直接入力することもできます:
:normal 0wwgUiw
:normal
コマンドで瞬時に再生することができ:normal
。
または、変数に入れる:
:let myvar = '0wwgUiw'
と再生する:
@=myvar
または、マッピングとして保存:
nnoremap <key> 0wwgUiw
<key>
押すと再生され<key>
。
後で再利用できるようにマクロを保存する場合は、挿入モードで入力できます。
<C-r>q
これは、マクロをレジスタq
挿入します(この例では: 0wwgUiw
)。この出力を使用して、例えばあなたのvimrc
マクロを定義することができます:
let @q='0wwgUiw'
そうすることで、レジスタq
はvimを起動するたびにこのマクロで初期化されます。
アクション(マクロ)の記録と再生
q
コマンドを使うと、vimで面倒な作業を簡単にすることができます。
アレイシーケンス(1〜20)を生成する。
ステップ1. i
を押して挿入モードに入り、入力1
1
ステップ2.次のアクションを記録します:「最後の数字を次の行に追加し、数字を増やす」
-
esc
を入力して入力モードを終了する - レコードモードに入るには
qa
をタイプし、バッファーa
-
yy
とp
して現在の行をコピーし、次の行として貼り付ける -
ctrl
+a
を押して数字を増やす -
q
もう一度入力してレコードを終了する
1
2
ステップ3:アクションを18回再生します。
手順2でアクション3とアクション4を再生18@a
には18@a
と入力します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20