11

I'm trying to replace all occurrence of hello(...) by hello[...]

I tried things like %s/hello\((.*?)\)/hello\[$1\]/ without any success

Any help pls ?

1 Answer 1

16

That's Perl syntax, not Vim. In Vim regular expressions, at least by default, parentheses match themselves and backslashed parentheses capture - the opposite of Perl. Also, Vim doesn't understand the non-greedy modifier ?, and capture groups are interpolated with \n, not $n. Try this:

%s/hello(\([^)]*\))/hello[\1]/

Alternatively, you can use the \v ("very magic") modifier to make the behavior with respect to special characters and backslashes more Perl-like, though it doesn't make Vim understand *? or change its interpolation syntax:

%s/\vhello\(([^)]*)\)/hello[\1]/

Also, note that you don't need backslashes on the square brackets in the replacement text - the right hand side of a substitution command is not a regular expression, so you don't have to worry about most of the characters that are special in one. Pretty much only the backslash itself is special, and can be used to include capture groups or a literal instance of itself or the delimiter.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.