用Vim中的标识运算符(===)替换等于运算符(==)

时间:2011-10-29 00:17:08

标签: vim sed

我想将==的所有匹配项更改为===,但发出命令:%s/==/===/g会将现有的标识运算符从===转换为====。我尝试发出命令:%s/\<==\>/===/g但没有找到模式匹配。

3 个答案:

答案 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

这样您就可以选择每次yn。当然,如果有很多,那么这可能不是最好的计划。