考虑这两个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在整个文件(所有行):gas :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)