我使用
g
或gc
参数操作在整个文件上都带有%
。在此文件上:
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
#1 楼
也许您或插件已启用选项'gdefault'
。此选项在执行替换时自动添加标志g
。因此,当启用
g
时手动添加标志'gdefault'
时,就好像您有2个g
标志,其作用与否相同。 。因此,Vim只替换每行中第一个出现的模式。默认情况下,此选项是禁用的,但是要确保是正确的,您可以在
vimrc
:set nogdefault
的末尾添加。 或者,如果您怀疑某个插件可能启用了该选项,则可以使用以下命令对其进行跟踪:
verb set gd?
或者您可以习惯该选项,这意味着当您想要替换所有出现的模式,您无需添加
g
标志(因为已经由gdefault
完成了),而当您仅希望替换一行的第一个模式出现时,您可以添加g
标志(因为2个g
标志与没有标志相同。#2 楼
无需更改任何设置。语法错误。您应该使用所有%,如下所示:hello hello
hello
hello hello hello
hello
:%s%hello%goodbye%g
goodbye goodbye
goodbye
goodbye goodbye goodbye
goodbye
通常在更改特定行时使用/,例如:像这样:
:1,3 s / hello / goodbye / g
goodbye goodbye
goodbye
goodbye goodbye goodbye
hello
评论
欢迎来到Vi和Vim!抱歉,但这个答案不正确,使用斜杠的语法没有任何问题,也没有理由必须使用%。你自己尝试过吗?
–filbranden♦
20 Dec 1'在15:07
评论
请给我们一个真实的例子,并向我们展示您的vimrc。:echo&gd的输出是什么,如果添加这样的第二个g标志:%s / hello / goodbye / gg还是完全删除g标志,会发生什么?如果:echo&gd的输出为1,请尝试在vimrc的末尾添加set nogdefault。
精细!我不知道为什么,但是默认情况下将其设置为0,所以我像您说的那样添加了set nogdefault,现在它可以工作了。谢谢!