Vimでは、コマンドの前に数字を追加するだけでコマンドを繰り返すことができることをよく知っています。たとえば、次の方法で5行を削除できます。
5dd
多くの場合、コマンドを適用する行の範囲を指定することもできます。たとえば、
:10,20s:hello:goodbye:gc
「垂直編集」を実行するにはどうすればよいですか?たとえば、特定の記号、たとえばカンマを挿入します(空白をスキップ、つまりコマンドモードでShift-Iの後にコンマを入力した場合に取得されるもの)。範囲。どのようにこれを達成することができますか(ダウン期間-ダウン期間-ダウン期間に頼ることなく)?
:10,20s/^/,/
または、マクロを使用して、以下を記録します。
q a i , ESC j h q
で使用:
@ a
説明: q a
は、a
を登録するマクロの記録を開始し、q
は記録を終了します。これに使用できるレジスタa
からz
があります。
Ctrl-v ブロックごとに視覚モードに入ります。その後、移動できます(hjkl-wise、通常どおり)、および複数行に何かを挿入する場合は、 Shift-i。
したがって、テキストの場合:
abc123abc
def456def
ghi789ghi
あなたがヒットした場合 Ctrl-v カーソルを1の上に置いて、 j 2列で2列下に移動してから、 Shift-i,ESC 、テキストは次のようになります。
abc,123abc
def,456def
ghi,789ghi
(複数行の挿入には少し遅れがあり、ヒットした後までレンダリングされません ESC)。
それが:norm(al)コマンドの目的です:
:10,20ノーマルI、
すでに「。」を使用している場合最後のコマンドを何度も繰り返すと、今のところ this が最も便利なソリューションであることがわかりました。を使用して、視覚ブロックの各行で最後のコマンドを繰り返すことができます
" allow the . to execute once for each line of a visual selection
vnoremap . :normal .<CR>
これを行う最も簡単な方法は
1)1行のマクロを記録し、「a」と呼びます。この場合、1つのタイプ
q a I、ESC j q
2)マクロを適用する行のブロックを選択します
3) 'norm'関数を使用して、この行ブロックでマクロ 'a'を実行します。
:'<,'>norm@a
最も簡単な方法は、マクロを記録してから、必要な回数だけマクロを繰り返すことだと思います。たとえば、各行の先頭にカンマを追加するには、次のように入力します。
q a I , ESC j q
それを5回繰り返すには、次のように入力します
5 @ a
block visual mode を使用します。これにより、複数行にわたって挿入/編集を実行できます(別名「垂直編集」)。
マクロとは別に、既に回答したように、特定の行範囲にコンマを挿入する場合(10行目から20行目など)には、次のようなことができます。
:10,20s/\(.*\)/,\1
つまり、\(および\)を使用して番号付きグループの一致を作成し、置換文字列で\ 1を使用して「一致の内容で置換」と言うことができます。
編集が.
演算子に既に保存されている状態で、次を実行します。
:norm .
を実行します