如何使用vim替换前两个匹配?

时间:2013-12-30 03:53:11

标签: vim

示例:

cat abc.txt
foo g foo a foo

我只想把第一和第二个foo替换为goo。 我应该如何在VIM中做到这一点?

输出:

goo g goo a foo

4 个答案:

答案 0 :(得分:4)

有几种方法可以做到这一点。

  1. 从普通模式开始,/foo<CR>3sfoo<Esc>n.
  2. 切换到命令模式::s/foo/goo<CR>&
  3. 使用扩展正则表达式::s/foo\(.\{-}\)foo/goo\1goo
  4. (如果“foo”没有出现两次,#3将失败。)

    :help s
    :help .
    :help &
    :help sub-replace-special
    

答案 1 :(得分:0)

如果你不是高尔夫球手并且不想故意在角色限制下做事,那么如何运行:%s / foo / goo /两次?

答案 2 :(得分:0)

使用我的PatternsOnText plugin,您可以将匹配指定为yynyny的特殊:SubstituteSelected变体的计数或:substitute答案:

:SubstituteSelected/foo/goo/g 1,2

答案 3 :(得分:0)

除了所有其他答案,您还可以尝试:

:%s/foo/goo/gc

前两次会要求replace with abc (y/n/a/q/l/^E/^Y)?回复y,然后输入q退出。