Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 522
BergmannF Avatar asked Jul 27 '11 13:07

BergmannF


1 Answers

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
    
like image 78
rid Avatar answered Oct 31 '22 20:10

rid