代码之家  ›  专栏  ›  技术社区  ›  user697911

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

  •  1
  • user697911  · 技术社区  · 6 年前
    This  is  test
    

    此行有两个选项卡(\t)。我想去掉从开始到第一个tab键的部分,即“This”,我使用了以下模式:

    :s/.\{-}\t//g
    

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

    :s/.*\t//g
    
    2 回复  |  直到 6 年前
        1
  •  6
  •   Bill    6 年前

    您的第一次尝试不起作用,因为您匹配的是任何字符中后跟制表符的最少数字。任何字符中最少的数字是零(0)。所以你的两个标签匹配没有任何其他字符。

    根据评论,上述解释是不正确的。

    这里有一个可能的解决办法。

    :s/^[^\t]*\t//
    

    这是从一开始 ^ ,捕获任意数量的非制表符字符 [^\t]* \t .

        2
  •  2
  •   sidyll    6 年前

    你的模式 /.\{-}\t 不起作用是因为 g 中的标志 :s 更换 参与 :

    :s/.\{-}\t
    

    完整的 :s/.\{-}\t// 也很好。注意,在这两种情况下,都不应该像您描述的那样说“找不到模式”。如果你看到了这个信息,那么你的例子和你的实际文本之间还有一些不同之处。