2016-05-15 14 views
0

レッツをデクリメントして、視覚的ブロックまたは行の範囲で置換することは、私は、この入力を持っていると言う:Vimの:どのように特定の数

{3:3} abc 
{3:4} def hjkl 

出力リレーは次のようになりますので、先頭に番号をデクリメント

{3:2} abc 
{3:3} def hjkl 

':'の後の ':'の直前の '}'。
視覚的なブロックで

答えて

1

を(より短いです)解決策:

:exe "'<,'>norm 0f:\<C-X>" 

しかし、あなたはCtrlキーを使用して気にしない場合 - VCtrlキー - X^Xを取得するには、次のコードを使用することができます

:'<,'>norm 0f:^X 

^X:help CTRL-Xからの):

は、カーソルの位置にまたは後の数またはアルファベットから減算します。

1

これが唯一の選択された視覚的なブロックのため、全体ではなく、バッファ/ファイル(または行の範囲内)のために働く必要があることを一つの可能​​な解決策に注意してください:別の

:`<,`>s/:\(\d\+\)}/\=":".(submatch(1) -1)."}"/g 
+1

注意:ビジュアルブロックを使用していても、コマンドは実際には行全体で実行されます([this](http://vi.stackexchange.com/q/6898/6698)を参照)。 [this](http://vi.stackexchange.com/q/7388/6698)の質問)。ちなみに、 ':' <,'> s /:\ zs \ d \ + \ ze}/\ = submatch(0)-1/g' –

+1

@JairLopez: ': '<,'> s/\%V:\マッチが完全にビジュアルブロック内にあることを保証します(ビジュアルブロックで覆われていない行の部分は除外します)。%\ V \ \ \ submatch(0)-1/g' – Amadan

関連する問題