vim全球运营的一致性

Moe*_*oeb 4 vim sed

考虑这两个vim命令

  1. :% s/one/two/g
  2. :% g/found/d

我想知道为什么g信号全局替换和删除分别需要在替换和删除开始时放在最后.

这些是否遵循我错过的模式,或者这是一个vim角落案例?

Ken*_*ent 8

我想你很困惑:g[lobal],:s[ubstitute]而且:[range]delete

让我们举一些例子:

g是一个标志:s:

  • :s/foo/bar/ :只替换第一个 foobar当前
  • :s/foo/bar/g :更换所有 foobar当前
  • %:s/foo/bar/ :在每一行整个文件,只替换第一个 foobar
  • %:s/foo/bar/g :更换所有 foobar整个文件(所有行)

: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)