Vim Regex Capture Groups
У меня есть список слов:
bau
ceu
diu
fou
gau
Я хочу превратить этот список в:
byau
cyeu
dyiu
fyou
gyau
Я попробовал команду:
:%s/(\w)(\w\w)/\1y\2/g
Что мне нужно изменить, чтобы заставить группы захвата работать в Vim?
Ответы
Ответ 1
Один из способов исправить это - обеспечить, чтобы шаблон был заключен в скобки:
:%s/\(\w\)\(\w\w\)/\1y\2/g
Слегка короче (и, что еще лучше) использовать \v
, что означает, что в шаблоне после него все символы ASCII, кроме '0'-'9'
, 'a'-'z'
, 'a'-'z'
и '_'
имеют особое значение:
:%s/\v(\w)(\w\w)/\1y\2/g
См:
Ответ 2
Если вы не хотите скрывать группы захвата с помощью обратных косых черт (это то, что вы пропустили), добавьте \v
, чтобы превратить движок регулярного выражения Vim в очень волшебный режим:
:%s/\v(\w)(\w\w)/\1y\2/g
Ответ 3
Вы также можете использовать этот шаблон, который короче:
:%s/^./&y
-
%s
применяет шаблон ко всему файлу.
-
^.
соответствует первому символу строки.
-
&y
добавляет y
после шаблона.
Ответ 4
Вам также нужно избегать группировки группировки:
:%s/\(\w\)\(\w\w\)/\1y\2/g
Это трюк.