8

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

例如,在以下行中,我想匹配Twinkle little star(以粗体突出显示):

Twinkle blah Twinkle blah blah一闪一闪的小星星

我尝试了如下的负前瞻,但它与整行匹配:

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

2 回答 2

6

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

Twinkle\(.*Twinkle\)\@!.*$
       ^          ^    ^^
于 2012-11-09T05:25:55.953 回答
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
于 2013-11-19T01:33:47.153 回答