Ответ 1
Этот синтаксис Perl, а не Vim. В регулярных выражениях Vim, по крайней мере по умолчанию, круглые скобки соответствуют самим себе и обратным скреплениям скобок - противоположность Perl. Кроме того, Vim не понимает неживого модификатора ?
, а группы захвата интерполируются с помощью \
n, а не $
n. Попробуйте следующее:
%s/hello(\([^)]*\))/hello[\1]/
В качестве альтернативы вы можете использовать модификатор \v
( "очень волшебный" ), чтобы сделать поведение по отношению к специальным символам и обратным косым чертам более похожим на Perl, хотя оно не позволяет Vim понять *?
или изменить его интерполяцию синтаксис:
%s/\vhello\(([^)]*)\)/hello[\1]/
Также обратите внимание, что вам не нужны обратные косые черты в квадратных скобках в заменяющем тексте - правая часть команды подстановки не является регулярным выражением, поэтому вам не нужно беспокоиться о большинстве символов, которые специальные в одном. В значительной степени только обратная косая черта является специальной и может использоваться для включения групп захвата или буквального экземпляра самого себя или разделителя.