頭の行数を合計するのではなく、選択範囲のすべての行でマクロを実行したいと思います。例えば、変換するマクロを書くかもしれません:
Last, First
に
First Last
そして、これらすべての行で実行したいと思います:
Stewart, John
Pumpkin, Freddy
Mai, Stefan
...
Vimの達人のアイデアはありますか?
編集:これは単なる例であり、明らかにこれは些細な正規表現ですが、マクロを使用したいほど簡単ではない他のインスタンスがあります。
1行で実行された(残った)マクロq
があるとします。次に、選択したすべての行でそれを実行できます:
:'<,'>normal @q
(すでに行のグループが選択されている場合、:
を押すとコマンドラインで:'<,'>
が生成されます)
たとえば、次のマクロは、行の最初を除くすべてのWordを大文字にします。
:let @q="^dwgU$P"
したがって、以下で実行します(+
行が選択されている場所)
0000: a long long time ago
0001: in a galaxy far away
+0002: naboo was under an attack
+0003: and i thought me and qui-gon jinn
+0004: could talk the federation in
0005: to maybe cutting them a little slack.
上記のnormal @q
コマンドを使用すると、以下が生成されます。
0000: a long long time ago
0001: in a galaxy far away
0002: naboo WAS UNDER AN ATTACK
0003: and I THOUGHT ME AND QUI-GON JINN
0004: could TALK THE FEDERATION IN
0005: to maybe cutting them a little slack.
行を選択し、:
を押してコマンドモードに入ります。 Vimは'<,'>
を自動的に入力し、範囲を選択した行に制限します。例では、:s
コマンドを使用してスワップを実行できます。
:'<,'>s/\(\w\+\), \(\w\+\)/\2, \1/
これにより、ビジュアル選択のすべての行でコンマで区切られた2つの単語が交換されます。
'<
と'>
を他のブックマークや行の位置と同様に使用することもできます。移動コマンドの一部として、したがって、通常モードではd'<
は現在のカーソル位置からビジュアル選択の最初の行の先頭までを削除します。ブロックが視覚的に強調表示されなくなっても、マークは引き続き有効です。
記録されたマクロをすべての行で再生する場合は、:normal
コマンドでマクロを実行する必要があります。残念ながら、:normal
コマンドは一連の行では機能しませんが、:global
コマンドを使用して修正できます。これは、正規表現に一致するすべての行で:ex
コマンドを実行するため、これを行うことができます。
:'<,'>g/^/ norm @a
説明:
:'<,'> for every line in the visual block
g/^/ on every line that matches the regex /^/ - i.e. every line
norm run in normal mode
@a the macro recorded in a
以下の関数を~/.vimrc
に追加するか、ブラウザにコピーして:@+
を実行するだけです
fun! RunMacroOverSelection(macroname)
execute "'<,'>normal @". a:macroname
endfun
com -nargs=1 Rover :call RunMacroOverSelection(<f-args>)
nnoremap <leader>r :Rover<space>
利点は、ビジュアル選択に任意のマクロを適用できることです。次のように、マクロ文字を引数として与える必要があります。
:Rover a