У меня есть список слов:
bau
ceu
diu
fou
gau
Я хочу превратить этот список в:
byau
cyeu
dyiu
fyou
gyau
Я безуспешно попробовал команду:
:%s/(\w)(\w\w)/\1y\2/g
Учитывая, что это не работает, что мне нужно изменить, чтобы группы захвата регулярных выражений работали в Vim?
regex
vim
capturing-group
regex-group
Кристиан
источник
источник
:%norm ay<CR>
.l
, войти в режим визуального блока с помощьюCtrl+v
, пометить весь столбец сShift+g
помощьюl
, затем войти в режим вставки с помощьюShift+i
и ввести 'y'. 7 нажатий клавиш, включая завершениеEsc
для выхода из режима вставки. Не публиковать как ответ, потому что это не совсем о группах захвата (это то, что я искал, когда нашел это). :-)Ответы:
Один из способов исправить это путь обеспечения шаблона обнесен сбежавших скобкой:
Чуть меньше (и больше магии -al) заключается в использовании
\v
, что означает , что в образце после него все ASCII - символы , за исключением'0'-'9'
,'a'-'z'
,'A'-'Z'
и'_'
имеют особое значение:Видеть:
:help \(
:help \v
источник
Если вы не хотите выходить из групп захвата с помощью обратной косой черты (это то, что вы пропустили), добавьте
\v
в начало, чтобы превратить механизм регулярных выражений Vim в очень волшебный режим:источник
:exmode
; есть ли способ сделать это в диалоговом окне поиска / замены gvim?\v...
regexp work find; в строке замены&
работает, но\
защищено (\1\r
потеряно):s
) с помощьюinputdialog()
Vimscript и немного его.\1 \r
лечение - это ошибка gvim. Я постараюсь разместить его в каком-нибудь конкретном списке vim. А пока я попробую свой единственный vimscript-inputdialog.Вы также можете использовать этот шаблон, который короче:
%s
применяет шаблон ко всему файлу.^.
соответствует первому символу строки.&y
добавляетy
после шаблона.источник
Вы также должны избежать парантезы группировки:
Это трюк.
источник