Vim全局替换不能代替一行中的所有匹配项


12

有时,我的全局专长不能替代一行中的所有匹配项。通过以下事实证实了这一点:当我进行确认替换时,可以看到它,在具有多个可能匹配项的行中找到一个匹配项,但随后转到另一行。

我使用ggc参数对整个文件进行操作%

在此文件上:

hello hello
hello
hello hello hello
hello

如果%s/hello/goodbye/g我知道

goodbye hello
goodbye
goodbye hello hello
goodbye

.vimrc关于搜索/替换,我只有

set hlsearch
set ignorecase
set incsearch

3
请给我们一个真实的例子,并向我们展示您的vimrc
romainl '16

2
什么是的输出:echo &gd,如果你添加第二个会发生什么g标志是这样的:%s/hello/goodbye/gg如果删除或g完全国旗?如果输出:echo &gd1,请尝试set nogdefault在末尾添加vimrc
user9433424 '16

1
精细!我不知道为什么,但是默认情况下将其设置为0,所以我按照set nogdefault您所说的进行了添加,并且顺便说一句,现在可以使用了。谢谢!
Nicolas Scotto Di Perto '16

Answers:


12

也许您或一个插件已启用该选项'gdefault'g每当执行替换时,此选项都会自动添加标志。

因此,当您g'gdefault'启用时手动添加标志时,就好像您有2个g标志与没有标志的效果相同。因此,Vim只替换每行上第一次出现的模式。

默认情况下,该选项被禁用,但要确保它是,你可以在你的末尾添加vimrcset nogdefault

另外,如果您怀疑某个插件可能启用了该选项,则可以使用以下命令对其进行跟踪: verb set gd?

否则您可能会习惯该选项,这意味着当您想要替换所有出现的模式时,您不必添加g标志(因为gdefault已经这样做了),而当您仅希望替换第一出现的模式时,在一行上,添加g标志(因为2个g标志与没有标志相同)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.