Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Vim中的标识运算符(==)替换相等运算符(==)_Vim_Sed - Fatal编程技术网

用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