Vim regex grouping

Posted on Tue 28 July 2020 in dev-journal

Wrote a regex in vim today that used a grouping in the find and replace. Needed to update 936 instances..

From a statement that calls a custom module function {% if entry.getEnableVal('conveyorDevToggle') == 1 to be a simple statement.. {% if entry.conveyorDevToggle %}

This is the regex used: :%s/\ventry.getEnableVal\('(\w+)'\) \=\= 1/entry.\1/gc

The key notes are:

\v

:help \v

Use of "\v" means that after it, all ASCII characters except '0'-'9', 'a'-'z',  
'A'-'Z' and '_' have special meaning: "very magic"                              

Use of "\V" means that after it, only a backslash and terminating character     
(usually / or ?) have special meaning: "very nomagic"         

Grouping

s:\(\w\+\)\(\s\+\)\(\w\+\):\3\2\1:
where \1 holds the first word, \2 - any number of spaces or tabs in between and \3 - the second word. How to decide what number holds what pair of \(\) ? - count opening "\(" from the left.

Using the above documentation the regex was constructed with the (\w+) grouping being used with the \1 group

:%s/\ventry.getEnableVal\('(\w+)'\) \=\= 1/entry.\1/gc