考虑这两个vim命令
:% s/one/two/g
:% g/found/d
我想知道为什么g
信号全局替换和删除分别需要在替换和删除开始时放在最后.
这些是否遵循我错过的模式,或者这是一个vim角落案例?
我想你很困惑:g[lobal]
,:s[ubstitute]
而且:[range]delete
让我们举一些例子:
g
是一个标志的:s
:
:s/foo/bar/
:只替换第一个 foo
用bar
在当前行:s/foo/bar/g
:更换所有 foo
与bar
在当前行%:s/foo/bar/
:在每一行整个文件,只替换第一个 foo
用bar
%:s/foo/bar/g
:更换所有 foo
与bar
在整个文件(所有行):g
as :global
命令:不仅:g
可以执行任何命令d
:g/foo/d
:删除所有匹配的行默认范围是%
:%g/foo/d
:和上面一样:1,30g/foo/d
:从第1-30行,删除所有包含的行 foo
:g/foo/normal >>
:缩进所有匹配的行foo
(不仅适用于d
):g/foo/y A
:yank所有匹配(/foo/
)行注册a
(不仅适用于d
):d
命令:( :[range]d[elete]
)
:/foo/d
:/foo/
这是一个范围.删除下一个匹配的行:%d
:删除所有行(清空文件):%/foo/d
:这不行.因为你有两个范围(%和/ foo /):/foo/dg
:这也行不通.没有dg
命令:g/foo/d
:这个工作,与上面(该:g
部分)相同,但它来自:global
命令我希望你有点清楚.(或者更混乱?我希望不会...... ^ _ ^)
你可能想看看以下
:h :s
:h :g
:h :d
:h range
Run Code Online (Sandbox Code Playgroud)