无法匹配Vim中的一个或多个空格

时间:2009-05-08 09:22:16

标签: vim

我希望在Vim

行的开头有匹配空格

我想做的PseudoCode

^( )*

我从手册中了解以下内容

notation        meaning             equivalent  decimal value(s)        
-----------------------------------------------------------------------

<Space>         space                            32     *space* 

我不知道如何使用十进制值32。

如何在Vim中匹配一个或多个空格?

9 个答案:

答案 0 :(得分:75)

打字

/^ \+

在命令模式下,将匹配一行开头的一个或多个空格字符。

输入

/^\s\+

在命令模式下,会在一行开头匹配一个或多个空格字符(制表符等以及空格)。

答案 1 :(得分:13)

顺便说一句,如果您使用hlsearch选项并且在输入/ *后整个文字亮起 - 而不仅仅是空格,请不要感到惊讶。那是因为零空间可以匹配任何地方!

因此,匹配零个或多个任何内容只有在与其他内容结合使用时才有用。

澄清问题后补充:

要匹配行开头的一个或多个空格,请执行以下操作:

/^\s\+

请参阅:

:help whitespace
:help /\+

答案 2 :(得分:7)

如果我理解正确..

/ *将匹配0个或更多空格

/ {0,n}将匹配0到n个空格(其中n是数字)

从行首开始匹配1个或多个空格:

/^ \+

答案 3 :(得分:6)

Vim行开头的空格:

/^  *

这是:

  • '/'进行搜索。
  • '^'开头行。
  • ' '至少有一个空格。
  • ' *'之后的零个或多个空格。

答案 4 :(得分:2)

如果您想要匹配任何类型的空白(无论是空格还是制表符),以下正则表达式都适用

^[\s]*

^匹配行的开头
[\s] / [\t]匹配空格或制表符(两者似乎都有效,但根据vim文档,您应该使用[\s]
*提供重复,0或更多。

当然使用/搜索其他人提到的内容。

答案 5 :(得分:1)

你快到了。你不需要()。正则表达式只是"^ *",在Vim中你使用/搜索,所以你输入/^ *

请注意,这与每个行匹配,因为每行都以零或多个空格开头!所以,你真的打算这样吗?如果您的意思是“一个或多个空格”,则需要将*替换为\+(在大多数正则表达式语言中,它是+,但+在vim中转义) 。所以,/^ \+

答案 6 :(得分:0)

/ *匹配零个或多个空格。

示例:

/foo *bar将匹配foobarfoo bar,foo bar ,等等。

请注意,如果您想在示例中使用括号,则需要使用\\来转义它们。 Vim表达式不是标准的Perl正则表达式,也不是POSIX正则表达式。你的例子是:

\\( \\)*

答案 7 :(得分:0)

要匹配行首的空格或制表符,您还可以使用:^\s*

答案 8 :(得分:0)

我认为你真的可以做的是匹配空格,直到某种非空格字符,对吧?试试这个:

^\( \+\)

或者,对于任何类型的空白:

^\(\s\+\)

在Vim中,正则表达式(,)和+需要进行转义。此外,如果您计划使用反向引用,则语法为\ 1(例如,第一组),而不是像Perl那样的$ 1。