9

n特定のパターンに一致するすべての数字を に置き換えるにはどうすればよいn+1ですか? たとえば、行内の括弧内のすべての数字を値 + 1 に置き換えたいとします。

1 2 <3> 4 <5> 6 7 <8> <9> <10> 11 12

なるべき

1 2 <4> 4 <6> 6 7 <9> <10> <11> 11 12
4

2 に答える 2

13

%s/<\zs\d\+\ze>/\=(submatch(0)+1)/g

説明として:

%s          " replace command
"""""
<           " prefix
\zs         " start of the match
\d\+        " match numbers
\ze         " end of the match
>           " suffix
"""""
\=          " replace the match part with the following expression
(
submatch(0) " the match part
+1          " add one
)
"""""
g           " replace all numbers, not only the first one

編集:特定の行だけを置き換えたい場合は、カーソルをその行に移動して実行します

s/<\zs\d\+\ze>/\=(submatch(0)+1)/g

または使用

LINENUMs/<\zs\d\+\ze>/\=(submatch(0)+1)/g

LINENUM(実際の行番号に置き換えます。例: 13)

于 2013-10-05T08:26:52.843 に答える
4

vim では、 を押すと、カーソルの上または後ろの数字をインクリメント (デクリメント) できます。

NUMBER<ctrl-a>      to add NUMBER to the digit 
(NUMBER<ctrl-x>      to substract NUMBER from the digit)

1 だけインクリメント (デクリメント) する場合は、NUMBER を指定する必要はありません。あなたの場合、これには単純なマクロを使用します。

qaf<<ctrl-a>q

100<altgr-q>a

マクロの簡単な説明は次のとおりです。find (f) コマンドを使用して、カーソルを開始 < ブラケットに配置します。カーソルを桁に合わせる必要はありません。カーソル上の数字またはカーソルの後の最も近い数字を押すと、インクリメントされます。

さらに短い一連のコマンドが必要な場合は、 を押してカーソルを配置f<し、 で数を増やしてctrl-aから、 を繰り返し押し;.ます。この;コマンドは、最後のカーソル移動、つまり find コマンドを繰り返します。この.コマンドは、最後のテキスト変更コマンドを繰り返します。

詳細については、このリンクを確認するか、組み込みのドキュメントを使用してください: h: ctrl-a.

于 2013-10-05T08:28:26.913 に答える