例如,如果我有一列数字:
4
6
8
10
12
Vim 有没有办法让我可以找到所有大于 8 的数字,而不是只用这些数字做数学?结果获得一个新列:
4
6
8
(10+2)=12
(12+2)=14
答案1
您可以使用特殊的替换表达式来实现这种替换\=
。查看:help sub-replace-special
了解所有详细信息,但以下是此特定替换的工作原理:
%s/\d\+/\=str2nr(submatch(0)) > 8 ? str2nr(submatch(0)) + 2 : submatch(0)
在命令的替换部分中,在,:substitute
之后为您提供完整匹配。全局函数将其转换为数字。\=
submatch(0)
str2nr
如果您希望逻辑更具可读性,可以将其提取到函数中:
function! IncrementNumber(number_string)
let number = str2nr(a:number_string)
if number > 8
let number += 2
endif
return number
endfunction
您可以将其放入您的 中.vimrc
,并对其进行调整,将阈值设置为8
参数等,然后在文件上调用它:
%s/\d\+/\=IncrementNumber(submatch(0))