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