VIM全局正则替换问题:为无后缀行添加\tanalgesic
VIM全局搜索替换解决方案
问题原因
VIM默认采用基本正则表达式(BRE),和通用正则工具(多使用扩展正则表达式ERE)语法存在差异:+在BRE中不是表示“一个或多个”的元字符,直接写[0-9]+$无法匹配仅含数字的行。另外你之前的命令错误使用了(1)引用匹配内容,VIM中应该用\0或&来指代整个匹配结果。
正确命令
以下两种方式都能实现需求:
- 兼容BRE的写法(转义
+)
:%s/[0-9]\+$/\0\tanalgesic/g
[0-9]\+:匹配一个或多个数字(BRE中\+才表示“一个或多个”的含义)\0:引用匹配到的完整数字内容\t:插入制表符g:全局匹配(因是行尾匹配,不加g也可生效,添加后更严谨)
- 启用扩展正则(ERE)模式
在正则前加\v开启VIM的very magic模式,语法和通用正则工具一致:
:%s/\v[0-9]+$/\0\tanalgesic/g
\v:让VIM使用ERE语法,无需转义+等元字符- 其余部分作用和上面的命令一致
更精准的匹配(可选)
如果要确保只处理完全不含其他内容的纯数字行,可以用锚点限定整行范围:
:%s/\v^[0-9]+$/\0\tanalgesic/g
^匹配行首,$匹配行尾,确保整行仅包含数字。
内容的提问来源于stack exchange,提问作者Anthony Nash
相关产品推荐
相关产品推荐

