我想将==
的所有匹配项更改为===
,但发出命令:%s/==/===/g
会将现有的标识运算符从===
转换为====
。我尝试发出命令:%s/\<==\>/===/g
但没有找到模式匹配。
答案 0 :(得分:6)
问题中给出的模式的非正式定义可以理解为
“连续两个相等的标志既不先于也不平等
签名“。将这种口头描述转化为简洁的Vim的自然方式
正则表达式表单是使用\@<!
和\@!
搜索模式多
项目(请参阅:help /multi
了解概述)。前者允许遗漏
以特定模式开始的事件(参见:help /\@<!
)。该
后者使得可以忽略以不合格的结尾的事件
模式(见:help /\@!
)。
:%s/=\@<!===\@!/&=/g
我可以从您的问题和答案的历史来判断
StackOverflow,替换可能是用JavaScript或者执行的
PHP文件。由于两种语言都具有!==
不等式运算符以及。{
前者===
平等,==
也是替代的主题
正如你在问题中描述的那样。如果不希望出现此行为,请修改
上面的替换命令如下。
:%s/[!=]\@<!===\@!/&=/g
答案 1 :(得分:2)
有点难看,但是:%s/\([^=]\)==\([^=]\)/\1===\2/g
修改强>
原来,ib。有更好的解决方案,所以看看他的答案。这会照顾!==
等的情况。所以请忽略这个并看看他。
答案 2 :(得分:1)
考虑在sed命令上添加c
标志:%s/==/===/gc
这样您就可以选择每次y
或n
。当然,如果有很多,那么这可能不是最好的计划。