【问题标题】:Vim, find the n'th occurence of a wordVim,找到一个单词的第 n 个出现
【发布时间】:2015-11-03 16:26:44
【问题描述】:

我尝试在 Vim 中使用以下语法来查找第 n 次出现的单词(我想用另一个单词替换那个单词)

:6:myWord 

我想用 newWord 替换它

我不明白我做错了什么,有人可以帮助我吗?

【问题讨论】:

  • (1) 使用 vim 打开文件,(2) 键入 6/myWord,然后 (3) 按 Enter。在可视模式下,输入一个数字后跟一个命令会执行该命令该命令的次数。所以这会执行/myWord 6 次,找到myWord 的第6 次出现。

标签: linux vim


【解决方案1】:
s/\%(\(myWord\).\{-}\)\{6}\zs\1/newWord/
           ^             ^             ^
            Pattern       Occurrence    Replace pattern

它将第 6 次出现的 myWord 替换为 newWord。

【讨论】:

  • 酷! (+1) 但是:它替换了同一行中的第 7 个 oco。 :1s/\v%((myWord)\_.{-}){5}\zs\1/newWord/
【解决方案2】:

Gnu-sed 这不是问题的答案:它只是改变第 n 次出现的另一种方法。有关正确答案,请参阅@sureshkumar 的答案和@lurker 的评论。

sed -z -i.bak s/myWord/newWord/6  file

地点:

-i.bak    infile editing (creating file.bak as a bakup)
-z        null separeted registers (all file = one register) (gnu sed)
/6        6'th occurence

【讨论】:

  • 请仔细阅读问题。 vim 编辑器中的问题我们必须在命令行中替换。
  • @sureshkumar,这并不是一个正确的答案......(我添加了一个免责声明)。我们当然可以::%!sed -z s/myWord/newWord/6
  • @sureshkumar:谢谢你。你又是对的。添加了一条注释——就在 gnu sed 中。
  • 谢谢@JJoao,我一直在寻找使用 vim 进行替换的解决方案,这就是我进入此页面的方式。你的答案好多了。使用 vim 的人很可能对命令行也很满意。我不得不替换第 5 次出现的分隔符并在每一行上删除它。所以我这个没有-z。完美运行!
猜你喜欢
  • 2011-03-05
  • 2014-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多