用Vim中的标识运算符(==)替换相等运算符(==)
我想将所有出现的用Vim中的标识运算符(==)替换相等运算符(==),vim,sed,Vim,Sed,我想将所有出现的==更改为==,但发出命令:%s/==/====/g会将现有标识运算符从==转换为=。我尝试使用命令:%s/\/===/g,但是没有找到匹配的模式。有点难看,但是:%s/\([^=]\)=\([^=]\)/\1==\2/g 编辑 事实证明,伊布有更好的解决方案,所以看看他的答案。这就解决了的问题==等等。所以忽略这个,看看他的。考虑在sed命令上添加c标志:%s/=/==/gc 这将允许您使用y或n选择每次。当然,如果有很多,那么这可能不是最好的计划。问题中给出的模式的非正式定义
==
更改为==
,但发出命令:%s/==/====/g
会将现有标识运算符从==
转换为=
。我尝试使用命令:%s/\/===/g
,但是没有找到匹配的模式。有点难看,但是:%s/\([^=]\)=\([^=]\)/\1==\2/g
编辑
事实证明,伊布有更好的解决方案,所以看看他的答案。这就解决了
的问题==代码>等等。所以忽略这个,看看他的。考虑在sed命令上添加c
标志:%s/=/==/gc
这将允许您使用y
或n
选择每次。当然,如果有很多,那么这可能不是最好的计划。问题中给出的模式的非正式定义可能是
读作“一行中的两个等号,前后不加
以等号表示”
这是一种自然的方式,可以将这种口头描述转换为简洁的Vim
正则表达式将使用\@和\@代码>零宽度断言
(有关概述,请参阅:help/multi
)。前者允许省略
以特定模式开始的事件(请参见:help/\@)。
后者可以忽略以
不合格的模式(请参见:help/\@!
)
为了学习正则表达式,你能解释一下它的作用吗?(另外,该命令对我不起作用)。\(\)
零件保留在那里,然后稍后通过\1
和\2
检索。您使用的每一对\(\)
都将获得\1、\2等。在本例中,我在==之前保存了一个字符,在==之后保存了一个字符。但是对于每一个字符,我都使用了[^=]
,这意味着除了=
之外的任何字符。使用[]
,您可以列出要选择的字符,^
作为列表中的第一个字符,您可以取消列表。我认为许多不同种类的正则表达式都支持这种标记。只有当==
周围有两个(可能是空白)字符时,该命令才起作用。我意识到没有人会把==
放在一行的开头,或者放在一行的末尾(或者两者都放)。我只是指这个out@puk:你说得对。。。。我不太喜欢C、C++、java、JavaScript,这些灵活的格式语言,所以我的隐含假设可能不太好。可能需要先看一行,然后再看一行,如果这是一个问题的话,让表情更难看。虽然我会责怪原来的编码员:p.我不知道发生了什么,但当我发出命令时,:bufdo%s/\([^=]\)=\([^=]\)/\1===\2/ge;update
===代码>开始到处出现。感谢上帝的回复。我知道基本情况,大体上我会同意你的看法,但是=
有44个匹配项,我有几百个文件。而且。。。请问替换部件中的&
是什么?@yosukesabai:匹配的模式替换(请参见:help s/\&
).ic,必须记住这一点。谢谢;作为参考,这些被称为“零宽度断言”。另外+1用于的心理先发制人调试==代码>问题:)\
无法按预期工作,因为=
不是“单词”字符,因此单词边界标记不匹配。
:%s/=\@<!===\@!/&=/g
:%s/[!=]\@<!===\@!/&=/g