Невозможно найти один или несколько пробелов в Vim - PullRequest
42 голосов
/ 08 мая 2009

Я хочу совпадения пробелов в начале строк в Vim

Псевдокод того, что я хочу сделать

^( )*

Я знаю следующее из руководства

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

<Space>         space                            32     *space* 

Я не уверен, как использовать десятичное значение 32.

Как вы можете сопоставить один или несколько пробелов в Vim?

Ответы [ 9 ]

76 голосов
/ 08 мая 2009

Набор текста

/^ \+

В командном режиме будет соответствовать один или несколько пробелов в начале строки.

Typing

/^\s\+

В командном режиме будет соответствовать один или несколько пробельных символов (табуляции и т. Д., А также пробелы) в начале строки.

13 голосов
/ 08 мая 2009

Кстати, не удивляйтесь, если вы используете опцию hlsearch и весь текст загорается после ввода / * - вместо пробелов. Это потому, что нулевые пробелы могут совпадать где угодно!

Таким образом, сопоставление нуля или более чего-либо полезно только в сочетании с чем-то другим.

Дополнение после уточнения вопроса:

Чтобы найти один или несколько пробелов в начале строки, выполните:

/^\s\+

См:

:help whitespace
:help /\+
7 голосов
/ 08 мая 2009

Если я правильно понимаю ..

/ * будет соответствовать 0 или более пробелам

/ {0,n} будет соответствовать от 0 до n пробелов (где n - число)

Для соответствия 1 или более пробелов, начиная с начала строки:

/^ \+
6 голосов
/ 08 мая 2009

Пробелы в начале строки в Vim:

/^  *

Это:

  • '/' для поиска.
  • '^' для начала строки.
  • ' ' хотя бы для одного пробела.
  • ' *' для нуля или более пробелов после этого.
3 голосов
/ 08 мая 2009

Если вы хотите найти какие-либо пробелы (будь то пробел или табуляция), применимо следующее регулярное выражение

^[\s]*

^ соответствует началу строки
[\s] / [\t] соответствует пробелу или символу табуляции (оба работают, хотя согласно документации vim вы должны использовать [\s]
* обеспечивает повторение, 0 или больше.

конечно, используя / для поиска, как было упомянуто другими.

1 голос
/ 08 мая 2009

Ты почти у цели. Вам не нужно (). Регулярное выражение просто "^ *", и в Vim вы выполняете поиск с помощью /, поэтому вы вводите /^ *

Обратите внимание, что это соответствует каждой строке, потому что каждая строка начинается с нуля или более пробелов! Итак, вы действительно намерены это? Если вы имели в виду «один или несколько пробелов», вам нужно заменить * на \+ (в большинстве языков регулярных выражений это +, но + экранируется в vim). Итак, /^ \+

0 голосов
/ 08 мая 2009

Я думаю, что вы действительно можете сопоставить пробелы до какого-то непробельного символа, верно? Попробуйте это:

^\( \+\)

Или, для любого типа пробела:

^\(\s\+\)

В Vim регулярные выражения (,) и + необходимо экранировать. Кроме того, если вы планируете использовать обратную ссылку, синтаксис будет \ 1 (например, первая группа), а не $ 1, как Perl.

0 голосов
/ 08 мая 2009

Чтобы сопоставить пробелы или символы табуляции в начале строки, вы также можете использовать: ^\s*.

0 голосов
/ 08 мая 2009

/ * соответствует нулю или более пробелов.

Пример:

/foo *bar будет соответствовать foobar, foo bar, foo bar , etcetera`.

Обратите внимание, что если вы хотите использовать круглые скобки, как в вашем примере, вам нужно экранировать их с помощью \\. Выражения Vim не являются стандартными регулярными выражениями Perl или регулярными выражениями POSIX. Ваш пример будет:

\\( \\)*
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...