Vim:如何在可视块或行范围内用递减的特定数字进行替换

Vim:如何在可视块或行范围内用递减的特定数字进行替换,vim,Vim,假设我有这个输入: {3:3} abc {3:4} def hjkl 输出应为: {3:2} abc {3:3} def hjkl 所以,在“:”之后“}”之前递减行首的数字。 请注意,这应仅适用于选定的可视块,而不适用于整个缓冲区/文件(或行范围)在可视块中,一种可能的解决方案: :`<,`>s/:\(\d\+\)}/\=":".(submatch(1) -1)."}"/g :`s/:\(\d\+\)}/\=“:”(子匹配(1)-1)。“}”/g 在可视块中,一种

假设我有这个输入:

{3:3} abc  
{3:4} def hjkl 
输出应为:

{3:2} abc  
{3:3} def hjkl 
所以,在“:”之后“}”之前递减行首的数字。

请注意,这应仅适用于选定的可视块,而不适用于整个缓冲区/文件(或行范围)

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

:`<,`>s/:\(\d\+\)}/\=":".(submatch(1) -1)."}"/g
:`s/:\(\d\+\)}/\=“:”(子匹配(1)-1)。“}”/g

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

:`<,`>s/:\(\d\+\)}/\=":".(submatch(1) -1)."}"/g
:`s/:\(\d\+\)}/\=“:”(子匹配(1)-1)。“}”/g
另一个(甚至更短)解决方案:

:exe "'<,'>norm 0f:\<C-X>"
其中
^X
(从):

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

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

:exe "'<,'>norm 0f:\<C-X>"
其中
^X
(从):

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


请注意:即使您使用的是可视块,您的命令实际上也会在整行上运行(请参阅和问题)。顺便说一句,它可以缩短为“@JairLopez:
:”请注意:即使您使用的是可视块,您的命令实际上也会在整行上运行(请参阅和问题)。顺便说一下,它可以缩短为
:“@JairLopez:
:”