regexp magic in vim

Some characters in the pattern are taken literally. They match with the same character in the text. When preceded with a backslash however, these characters get a special meaning.

Other characters have a special meaning without a backslash. They need to be preceded with a backslash to match literally.

If a character is taken literally or not depends on the magic option and the items mentioned next.

*/m* */M*

Use of m makes the pattern after it be interpreted as if magic is set, ignoring the actual value of the magic option.

Use of M makes the pattern after it be interpreted as if nomagic is used.

*/v* */V*

Use of v means that in the pattern after it all ASCII characters except 0-9, a-z, A-Z and _ have a special meaning. very magic

Use of V means that in the pattern after it only the backslash has a special meaning. very nomagic

Examples

after: v m M V matches ~
$ $ $ $ matches end-of-line
. . . . matches any character
* * * * any number of the previous atom
() () () () grouping into an atom
| | | | separating alternatives
a a a a alphabetic character
\ \ \ \ literal backslash
. . . . literal dot
{ { { { literal `{`
a a a a literal `a`
{only Vim supports m, M, v and V}

It is recommended to always keep the magic option at the default setting, which is magic. This avoids portability problems. To make a pattern immune
to the magic option being set or not, put m or M at the start of the pattern.

Without v:

:%s/^%(foo){1,3}(.+)bar$/1/

With v:

:%s/v^%(foo){1,3}(.+)bar$/1/

See also :h /v