如何在Vi/Vim中为每行第2列的数字添加指定整数?
在Vim中仅修改每行第2列的数字并添加指定值
你的问题很典型——直接匹配所有数字的正则会把行内所有数字都改掉,我们需要精准定位到第2列的数字(也就是HEAD后面的那个数值)来修改。
解决方案:精准匹配目标数字的替换命令
直接在Vim命令模式下执行这条命令(这里以加5为例):
:%s/HEAD \zs\d\+/\=submatch(0)+5/
命令拆解(为什么这样写就对了):
:%s:表示对所有行执行替换操作HEAD \zs\d\+:这部分是精准匹配目标数字的正则:HEAD:先匹配行首的HEAD和后面的空格,确保我们定位到第1列之后的位置\zs:Vim专属的正则标记,意思是“从这里开始算作匹配内容”——这样替换时只会修改\zs后面的部分,不会动前面的HEAD\d\+:匹配1个或多个数字,也就是我们要修改的第2列数值
\=submatch(0)+5:替换规则,\=表示用表达式计算结果替换,submatch(0)就是我们刚才匹配到的数字,加上5之后作为新的数值
效果验证
拿你的示例行来说:
HEAD 100 ABC 12 24 12.5
执行命令后会变成:
HEAD 105 ABC 12 24 12.5
完全符合你的需求——只有第2列的数字被加了5,其他位置的数字丝毫不受影响。
扩展:如果要加其他数值?
只需要把命令里的+5改成你需要的数值就行,比如要加3就写成\=submatch(0)+3。
内容的提问来源于stack exchange,提问作者Huiwen wu
相关产品推荐
相关产品推荐

