Есть ли такой шаблон как ^ в vim?

20

В обычном режиме Vim 0команда переводит вас в первый столбец строки и ^возвращает вас к логическому началу строки (например, к первому непробельному символу). В мире регулярных выражений, ^соответствует первый символ в строке, пробел или нет. Есть ли в Vim шаблон, который ведет себя как его команда '^' - соответствует логическому началу строки?

Майкл
источник
Я думаю, что ^ в регулярном выражении обычно соответствует началу строки, а не первому символу. ^. будет соответствовать началу и затем первому символу, а не началу и затем второму символу.
bdsl

Ответы:

17

Там нет ярлыка для сопоставления с первым непробельным символом в строке, вы должны создать шаблон самостоятельно, например:

^\s*restofpattern

Если вы не хотите включать пробелы в соответствие, вы должны использовать утверждение нулевой ширины, например:

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

Не совсем красиво, но, по крайней мере, это делает работу.

Карл Билефельдт
источник
6

Для того, чтобы соответствовать первому нон -whitespace характер, вы бы просто использовать , \Sкак вы обычно делаете.


Если вы используете ^регулярное выражение в vim, оно будет соответствовать фактическому началу строки, даже если оно содержит пробелы.

Например, эта строка начинается с пробела:

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

Эта команда vim удалит начальный пробел:

:%s/^ //

в результате чего:

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

Таким образом, регулярное выражение будет вести себя так, как вы ожидаете, даже если команда этого не делает.

Майкл Хэмптон
источник
Я полагаю, вы собираетесь объяснить отрицательный голос. Этот ответ, насколько я знаю, является правильным.
Майкл Хэмптон
1
Я не понизил голос, но для пояснения: мне было интересно, есть ли в Vim оператор, соответствующий первому непробельному символу строки. ^Оператор (как и все здравомыслящие реализации регулярных выражений), будет соответствовать первый символ , даже если это пробел.
Майкл
Ну, как ты ожидал сделать это нормально? Обычно в регулярном выражении вы используете что-то вроде \Sсоответствия первому непробельному символу.
Майкл Хэмптон
2
\Sбудет соответствовать любому непробельному символу. Иными словами, мне интересно , если Vim имеет нулевой ширины стенографии для этого есть: ^\W*\S.
Майкл
1
Ни один из известных мне движков не обеспечивает такую ​​функциональность, но опять же - когда бы вы позаботились об универсальном движке? Vim не является движком регулярных выражений общего назначения. Это редактор с движком регулярных выражений, поэтому мне было интересно, есть ли у него какие-либо специальные конструкции для чего-то, что имеет значение только внутри редактора.
Майкл