【问题标题】:String replace in vim: Why does %s/foo/bar work? [duplicate]vim 中的字符串替换:为什么 %s/foo/bar 有效? [复制]
【发布时间】:2018-08-04 14:05:38
【问题描述】:

:%s/foo/bar/g

这个 vim 命令为我节省了很多时间。但是今天我不小心打字了

:%s/foo/bar 没有全局 (g) 结尾,但它仍然有效!我很困惑。这是怎么回事?使用/g 更好吗?为什么?

【问题讨论】:

    标签: regex vi


    【解决方案1】:

    即使您不指定 /g 它也可以工作,但它只会替换文件中第一次出现的匹配项,而不是第二次和连续出现的匹配项。

    【讨论】:

    • 它“有效”,但它做了一些不同的事情。如果每行只有一个匹配项,那么 /g 当然是多余的。
    • 意识到这是一个冲动的问题,我可以很容易地查到。请关闭问题。如果我可以自己关闭它,我会这样做
    【解决方案2】:

    %s/foo/bar/g 为每一行运行s/foo/bar/g。这会将foo 的所有实例替换为bar。

    %s/foo/bar 为每一行运行s/foo/bar。这会将foo 的第一个实例替换为bar。

    假设您的文件包含

    foo foo foo
    foo foo foo
    foo foo foo
    

    然后%s/foo/bar/g变成了

    bar bar bar
    bar bar bar
    bar bar bar
    

    但是%s/foo/bar 把它变成了

    bar foo foo
    bar foo foo
    bar foo foo
    

    【讨论】:

      猜你喜欢
      • 2015-03-27
      • 2017-06-23
      • 2014-03-24
      • 2017-03-04
      • 1970-01-01
      • 2011-12-27
      • 2018-02-04
      • 1970-01-01
      • 2020-05-09
      相关资源
      最近更新 更多