次のSQLがあります。
update am.PERMISSIONS set PRM_ORDER = 35 PRM_VISIBLE = b'1' where PRM_ID = 3;
update am.PERMISSIONS set PRM_ORDER = [35] PRM_VISIBLE = b'1' where PRM_ID = 7;
update am.PERMISSIONS set PRM_ORDER = [40] PRM_VISIBLE = b'1' where PRM_ID = 10;
update am.PERMISSIONS set PRM_ORDER = [45] PRM_VISIBLE = b'1' where PRM_ID = 11;
...
角かっこで囲まれたビジュアルブロックを選択し、各数字を5ずつ増やしたいと思います。どうすればいいですか?
答え1
括弧内のテキストを視覚的に強調表示します。
Ctr+ V2jl
各数字を5ずつ増やします。
:norm 5
Ctr+ V Ctr+A 説明:
:norm
通常モードでフルコマンドを実行します。 +CtrがV必要です。それ以外の場合、カーソルは行の先頭に戻ります。
Ctr+A数字に1を加えて合計5回。コロンを押すと、可視範囲が自動的に挿入されます。
編集する: Stephaneが正しく指摘したように、前のコードはすべての行で見つかった最初の数を増やします。より良い解決策は次のとおりです。
%s/\[\zs\d\+\ze\]/\=(submatch(0)+5)
括弧内のすべての整数に5を加算します。一致から括弧を除いて一致する数値を返すために\zs
使用されます。\ze
submatch
答え2
数値を増やすためにビジュアルモードを終了する必要はありません。g
5 g Ctrl-a
5 ......... 5 times
g ......... globally
Ctrl-a .... increase numbers
私は実際にこの秘法を学んだ。ウィムゴルフ挑戦。
答え3
これら2つのコマンドは同じで、すべての数字が増加します。以内に 視覚的な選択(長方形でも!)
:'<,'>s/\%V\d\+\%V/\=submatch(0)+1/g
:s/\%V\d\+\%V/\=submatch(0)+1/g
切る::s
/
\%V
\d\+
\%V
/
\=submatch(0)+1
/
g
これは\%V
、現在(または最後の)選択項目内のどの位置にも一致する幅がゼロの一致子です。
vimヘルプから:
\%V Match inside the Visual area. When Visual mode has already been
stopped match in the area that gv would reselect.
This is a /zero-width match. To make sure the whole pattern is
inside the Visual area put it at the start and just before the end of
the pattern, e.g.:
/\%Vfoo.*ba\%Vr
This also works if only "foo bar" was Visually selected. This:
/\%Vfoo.*bar\%V
would match "foo bar" if the Visual selection continues after the "r".
Only works for the current buffer.
ctrl-a
残念ながら、これは負の数を理解していないので、あまりスマートではありません。