Vim:如何在减少一定数量的视觉块或行范围内替换

时间:2016-05-15 15:36:49

标签: vim

假设我有这样的意见:

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

输出应该是:

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

在'}'之前的':'之后的行开头递减数字。
请注意,这应仅适用于选定的可视块,而不适用于整个缓冲区/文件(或行的范围)

2 个答案:

答案 0 :(得分:1)

在视觉块中有一种可能的解决方案:

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

答案 1 :(得分:1)

另一个(甚至更短的)解决方案:

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

但如果您不介意使用 Ctrl - V Ctrl - X 来获取{ {1}},您可以使用以下代码:

^X

其中:'<,'>norm 0f:^X (来自:help CTRL-X):

  

从光标处或之后的数字或字母字符中减去。