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

puk*_*puk 3 vim sed

我想改变的所有匹配=====,但在发出命令:%s/==/===/g将现有的身份转换运营商从=======.我尝试发出命令:%s/\<==\>/===/g但没有找到模式匹配.

ib.*_*ib. 6

问题中给出的模式的非正式定义可以理解为"连续两个等号既不先于也不后跟等号".将这种口头描述转换为简洁的Vim正则表达式形式的一种自然方法是使用\@<!\@!搜索模式多项(参见:help /multi概述).前者允许从特定模式开始省略事件(参见参考资料:help /\@<!).后者使得可以忽略以不合格模式结束的事件(参见参考资料:help /\@!).

:%s/=\@<!===\@!/&=/g
Run Code Online (Sandbox Code Playgroud)

我可以根据您在StackOverflow上的问题和答案的历史来判断,替换可能是在JavaScript或PHP文件中执行的.由于两种语言都有!==不等式运算符和等式运算符===,因此==在前者中也是替换的主题,正如您在问题中描述的那样.如果不希望出现这种情况,请修改上面的替换命令,如下所示.

:%s/[!=]\@<!===\@!/&=/g
Run Code Online (Sandbox Code Playgroud)