为什么我的非贪婪的比赛在vim中不起作用?

use*_*911 1 regex vim

This  is  test
Run Code Online (Sandbox Code Playgroud)

此行中有两个选项卡(\ t).我想摆脱从开头到第一个tab键的部分,即"This",我使用了以下模式:

:s/.\{-}\t//g
Run Code Online (Sandbox Code Playgroud)

它说无法找到模式.如果我使用以下内容,则会替换两个选项卡,这不是我想要的.为什么第一种模式不起作用?

:s/.*\t//g
Run Code Online (Sandbox Code Playgroud)

Bil*_*ill 6

您的第一次尝试不起作用,因为您匹配任意字符后面跟一个标签的最少数量.任何字符的最少数量为零(0).因此,两个标签都匹配,没有任何其他字符.

根据评论,上述说明不正确.

这是一种可能的解决方案.

:s/^[^\t]*\t//
Run Code Online (Sandbox Code Playgroud)

这从头开始^,捕获任意数量的非制表符,[^\t]*直到它到达制表符\t.

  • 你这里不需要`/ g`标志; 从一开始它只是一场比赛. (3认同)