10

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?

dreftymac
  • 31,404
  • 26
  • 119
  • 182
BergmannF
  • 9,727
  • 3
  • 37
  • 37

1 Answers1

8

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
    
rid
  • 61,078
  • 31
  • 152
  • 193