gVIM Windows分组与反向引用报错E486:未找到匹配模式
问题分析与解决
你这问题主要是Vim替换命令格式不对,再加上正则的小失误,具体问题和修正方案如下:
1. 替换命令格式完全错误
你写的.s:\(\w+ \w+\) \w+:\1/有两个明显问题:
- 开头多了个
.,Vim的替换命令是直接从:s开始的,不需要额外加. - 分隔符混用了
:和/,Vim替换命令的分隔符要前后统一,要么全用/,要么全用:,不能前后换着用
2. 正则的小失误
报错里显示Pattern not found: \(\w+ \w+\) w+,说明你输入时w+前面的\丢了——不过就算补上,命令格式错误依然会导致执行失败。
修正后的正确命令
要删掉第三个单词,用下面任意一种命令都可以:
用默认的/分隔符(推荐)
:s/\(\w\+ \w\+\) \w\+/\1/
嫌转义麻烦的话,加\v开启very magic模式,正则可以简化:
:s/\v(\w+ \w+) \w+/\1/
用:做分隔符的版本
:s:\(\w\+ \w\+\) \w\+:\1:
额外提示
- Vim默认是nomagic模式,所以
+得写成\+才表示“匹配1次或多次”,开了\v就不用转义这些符号了,写起来更顺手 - 如果要一次性处理多行里的同类内容,在命令末尾加个
g就行,比如:s/\v(\w+ \w+) \w+/\1/g
内容的提问来源于stack exchange,提问作者Jakub
相关产品推荐
相关产品推荐

