Чи є такий зразок, як ^ in vim?


20

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


Я думаю, що ^ в регулярному виразі зазвичай відповідає початку рядка, а не першому символу. ^. буде відповідати початковому, а потім першому символу, а не старту, а потім другому символу.
bdsl

Відповіді:


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 оператора, який відповідає першому символу рядка без пробілу. ^Оператор (як і всі розсудливі реалізації регулярних виразів), буде відповідати перший символ , навіть якщо це пробіл.
Майкл

Ну як ви розраховували це зробити нормально? Зазвичай у регулярному вираженні ви б використовували щось на зразок, \Sщоб відповідати першому символу, який не пробігає.
Майкл Хемптон

2
\Sвідповідатиме будь -яким символам, що не мають пробілів. Іншими словами, мені цікаво , якщо Vim має нульовий ширини стенографії для цього є: ^\W*\S.
Майкл

1
Жоден двигун, про який я знаю, не забезпечує такої функціональності, але знову ж таки - коли ви б піклувалися про двигуни загального призначення? Vim не є двигуном загального призначення. Це редактор, який має механізм регулярних виразів, тому мені було цікаво, чи є у нього спеціальні конструкції для чогось, що має значення лише в редакторі.
Майкл
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.