在vim中是否有类似^的模式?


20

在Vim普通模式下,该0命令将您带到该行的第一列,并^带您到该行的逻辑开头(例如,第一个非空白字符)。在正则表达式世界中,^匹配行上的第一个字符,不管是否有空格。Vim是否具有行为类似于'^'命令的模式-匹配行的逻辑开头?


我认为正则表达式中的^通常匹配行的开头,而不是第一个字符。^。会匹配开头和第二个字符,而不是开头和第二个字符。
bdsl 2014年

Answers:


17

没有匹配任何行中第一个非空白字符的捷径,您必须自己构建模式,例如:

^\s*restofpattern

如果您不想在匹配项中包含空格,则必须使用零宽度的断言,例如:

\(^\s*\)\@<=restofpattern

不完全漂亮,但至少可以完成工作。


6

要匹配第一个非-空格字符,只需像平常一样使用\S


如果^在vim中使用正则表达式,则即使该行包含空格,它也将匹配行的实际开头。

例如,此行以空格开头:

 <- there's a space there you can't see :)

此vim命令将删除前导空格:

:%s/^ //

结果如下:

<- there's a space there you can't see :)

因此,即使命令不执行此操作,正则表达式也将按您预期的方式运行。


我想你要解释一下反对意见。据我所知,这个答案是正确的。
迈克尔·汉普顿

1
我没有投票,但为了澄清起见:我想知道Vim是否有一个运算符来匹配该行的第一个非空白字符。该^运营商(像所有理智的regex实现),将匹配的第一个字符,即使它是空白。
Michael

好吧,您期望平时如何做?通常在正则表达式中,您会使用类似\S第一个非空白字符的匹配项。
迈克尔·汉普顿

2
\S将匹配任何非空白字符。换句话说,我想知道Vim是否为此使用零宽度的简写:^\W*\S
Michael

1
据我所知,没有哪个引擎能够提供该功能,但是话又说回来,您什么时候会在意通用引擎?Vim不是通用的正则表达式引擎。它是一个具有正则表达式引擎的编辑器,因此我想知道它是否具有仅在编辑器内部重要的特殊构造。
Michael
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.