Vim单条替换命令保留text+数字模式失效的技术问询
解决Vim中保留
text\d\+模式时的内容截断问题 问题原因
你修改后的命令出现截断,是因为正向预查\(text\d\+\)\@=会匹配任意符合text\d\+的位置——比如text34里,text3已经满足text\d\+,预查会在3和4之间匹配,导致后续的4被误判为需要删除的内容。
单条命令解决方案
直接用\zs(标记删除起始)和\ze(标记删除结束)精准定位要删除的非目标内容,避免预查的歧义:
:%s/\(^\|\text\d\+\)\zs.\{-}\ze\(\text\d\+\)\|$//g
命令解释
\(^\|\text\d\+\)\zs:从文本开头或完整的text\d\+匹配项之后,开始标记要删除的内容.\{-}:尽可能少地匹配任意字符(避免过度匹配覆盖目标内容)\ze\(\text\d\+\)\|$:到下一个完整的text\d\+匹配项之前或文本结尾结束标记删除内容- 整条命令会删除所有不在
text\d\+中的内容,同时完整保留所有text后跟数字的匹配项
示例验证
输入内容:abctext34deftext100xyz
执行命令后结果:text34text100,text34和text100均完整保留,无截断问题
内容的提问来源于stack exchange,提问作者Fuad
相关产品推荐
相关产品推荐

