如何进入Vim搜索模式的最后一个匹配

时间:2012-11-09 05:21:15

标签: regex vim

在一行中,Vim如何只匹配搜索模式的最后一次出现?有点像非贪婪,但从一开始。

e.g。在以下行中,我想匹配Twinkle little star(以粗体突出显示):

  

Twinkle blah Twinkle blah blah Twinkle little star

我尝试了如下的负面预测,但它匹配整行:

Twinkle.*\(Twinkle\)\@!$

2 个答案:

答案 0 :(得分:6)

转义括号并在锚之前添加通配符:

Twinkle\(.*Twinkle\)\@!.*$
       ^          ^    ^^

答案 1 :(得分:2)

/\v.*\zsTwinkle.*
  • “。*”贪婪地匹配一切,回溯失败以匹配更少(并且可能没有)
  • “\ zs”设置“匹配开始”,对替换和光标放置很有用
  • 剩下的就是你要匹配的内容

使用“:set incsearch”,将一些文本加载到缓冲区中,然后开始键入模式以查看它是如何应用的。

例如,缓冲区:

Twinkle brightly little star
Twinkle brightly, Twinkle brightly little star

替换:

:%s/\v.*\zsTwinkle /&extra /

给出:

Twinkle extra brightly little star
Twinkle brightly, Twinkle extra brightly little star