Чи можу я використовувати регулярні вирази perl у командному рядку vim?


27

Я хочу використовувати регулярні вирази perl у командному рядку vim. Наприклад, щоб виписати великі літери у поточному рядку, ви можете ввести:

:s/(\w+)/\u$1/g

З : довідка perl-шаблонів ... Регекси Vim найбільш схожі на Perl, що стосується того, що ви можете зробити. Різниця між ними здебільшого полягає лише в позначенні ухммм ... це як сказати, що китайська схожа на грецьку, з точки зору того, що ви можете спілкуватися. Різниця здебільшого просто позначення. Регекс - це не що інше, як позначення! Відмінності дратують, якщо одна позначення менш знайома, ніж інша. Ось чому люди питають про перл у першу чергу!
dreftymac

Відповіді:


19

Ви можете фільтрувати будь-який рядок або діапазон рядків за допомогою зовнішньої команди в vim, використовуючи !. Наприклад, ви можете:

:.!perl -pe "s/(\w+)/\u\1/g"

який буде фільтрувати поточний рядок через цю команду perl. (Тут :потрібно перейти в режим командного рядка, і .наступне значення означає поточний рядок; ви також можете вказати діапазон рядків або %для всього файлу тощо)

Якщо ви хочете використовувати вбудований vim в шаблонах заміни, найближчим до вас підійде параметр "дуже магічний" vim, \ v, наприклад:

:s/\v(\w+)/\u\1/g

див. :help patternта :help substituteдля отримання детальної інформації. Я не думаю, що "дуже магія" зовсім ідентична шаблонам Perl, але дуже близька. У будь-якому випадку, ви завжди можете використовувати perl, якщо вам це зручніше, як вище.


1
Крім того, з дуже магією вам не потрібно запам’ятовувати, що (обробляється спеціально, поки {це не так: "всі символи ASCII, крім" 0 "-" 9 "," a "-" z "," A "-" Z "і '_' мають особливе значення. " Спасибі!
Айрат

10

Ні, ви не можете використовувати регулярні вирази Perl таким чином. Про допомогу в вивченні еквівалентів Vim для компонентів регулярного вираження Perl див

:help perl-patterns

Однак ви можете використовувати Perl як зовнішній фільтр, як пояснено frabjous. Ви також можете виконати команди Perl у Vim, використовуючи інтерфейс Perl, якщо ваш Vim був складений з цією +perlфункцією. Побачити

:help if_perl.txt

2
+1, :help perl-patternsвирішив одне, що я раніше ненавидів про vim
Марк К Коуан

8

Ви також можете використовувати:

/\v"your regex"

замість:

/"your regex"

Це відповідь, яку я шукав!
alextercete

Ви також можете допомогти собі, додавши nnoremap / /\vі vnoremap / /\vу свій .vimrc, щоб при введенні /він просто працював.
mattmc3


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.