Search code examples
regexvimspecial-characterscharacter-class

Characters classes in ranges - vim


Given I have the following string:

This is a test {{ string.string.string }}.

And try to perform the following substitution:

%s/{{ [\w\.]\+ }}/substitute/g

It will not work with the error: Pattern not found.

When I use:

%s/{{ [a-zA-Z\.]\+ }}/substitute/g

It works.

Is there a way to use the meta-character-classes in ranges in VIM?


Solution

  • You can use:

    • A non capturing sub-expression, see :help E53 (you can use a capturing sub-expression as well, \(\), but the overhead of capturing is useless)

      %s/{{ \%(\w\|\.\)\+ }}/substitute/g
      
    • A sequence of optionally matched atoms - \%[], see :help E70

      %s/{{ \%[\w\.]\+ }}/substitute/g