Vim给斜杠间单词末尾加* 正则匹配无结果问题求解
问题原因
你写的Vim替换命令没有生效,主要有三个问题:
- Vim默认正则(magic模式)下,
()需要转义才会被识别为捕获组,你写的(.*?)会被识别为匹配字面量的括号字符,自然找不到匹配内容 - Vim默认正则不支持非贪婪匹配语法
.*?,就算你转义了括号,也会出现匹配范围过长的问题 - 你的替换规则直接写成
*,会把匹配到的「斜杠+中间内容+斜杠」整体替换成*,和你要给中间单词末尾加*的需求完全不符
正确替换命令
推荐使用very magic模式简化转义,命令如下:
:%s/\v\/([^\/]+)\//\/\1*\//g
如果你不想用very magic模式,也可以用默认模式的写法:
:%s/\/\([^\/]*\)\//\/\1*\//g
规则说明
- 匹配逻辑:只匹配被两个斜杠前后包裹的内容,用
[^\/]+匹配非斜杠的字符,精准取到两个斜杠中间的单词存入捕获组 - 替换逻辑:保留前后的斜杠,输出捕获组的单词后追加
*,正好符合你要的修改效果 - 不会匹配只有单个斜杠的行(比如
alpbeta/gamma),完全符合你的预期输出要求
内容的提问来源于stack exchange,提问作者Dimabytes
相关产品推荐
相关产品推荐

