Vim中的替代品似乎没有在全球范围内运作?

eva*_*ent 1 vim macvim

global我的选项substitute似乎不起作用.即使我用gset替换它,它也仅在当前行中替换文本.如果我在停留在没有任何更多匹配的当前行时再次运行它,它会给我

E486:未找到模式:{patt}

如果我去下一场比赛并再次运行它对那条线路工作正常.但是使用g和不使用它几乎没有区别.

关于什么是错的任何想法?

printf("abc");
printf("def");
Run Code Online (Sandbox Code Playgroud)

做:s/printf/print/g突出显示printf's但只替换第一个.我需要做n下一场比赛并重新运行替补.

Sto*_*ica 6

该g标志是多次替代图案每行.

您正在寻找的是运行s///整个缓冲区的命令:

:%s/pattern/replacement/g
Run Code Online (Sandbox Code Playgroud)

注意%在前面s///,选择整个缓冲区.它也可以是这样的一系列行:

:10,21s/pattern/replacement/g
Run Code Online (Sandbox Code Playgroud)

在第10行和第21行之间进行替换.

如果没有g那里的标志,每行只会替换第一次出现的模式.

  • 如果您不想每次都手动添加 g 标志,您可以设置选项 `gdefault`,这将使您的搜索默认为全局。 (2认同)
  • 使用gdefault时,请记住,在末尾添加`/ g`将会颠倒含义。因此在这种情况下,`/ g`将是非全局的。 (2认同)