vim 中的字符串替换:为啥 %s/foo/bar 有效? [复制]
Posted
技术标签:
【中文标题】vim 中的字符串替换:为啥 %s/foo/bar 有效? [复制]【英文标题】: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
更好吗?为什么?
【问题讨论】:
【参考方案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
【讨论】:
以上是关于vim 中的字符串替换:为啥 %s/foo/bar 有效? [复制]的主要内容,如果未能解决你的问题,请参考以下文章