Grupy przechwytywania Regex Vim [bau- > byau: ceu - > cyeu]

Mam listę słów:

bau
ceu
diu
fou
gau

Chcę zamienić tę listę na:

byau
cyeu
dyiu
fyou
gyau

Bezskutecznie próbowałem komendy:

:%s/(\w)(\w\w)/\1y\2/g

Biorąc pod uwagę, że to nie działa, co muszę zmienić, aby grupy przechwytywania regex działały w Vimie?

Author: Christian, 2013-11-11

4 answers

Jednym ze sposobów, aby to naprawić, jest upewnienie się, że wzór jest zamknięty przez nawiasy:

:%s/\(\w\)\(\w\w\)/\1y\2/g

Nieco krótszy (i bardziej magiczny -al) jest użycie \v, co oznacza, że we wzorze po nim wszystkie znaki ASCII oprócz '0'-'9', 'a'-'z', 'A'-'Z' i '_' mają szczególne znaczenie:

:%s/\v(\w)(\w\w)/\1y\2/g

Zobacz:

 161
Author: Johnsyweb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-11 08:52:05

Jeśli nie chcesz uniknąć przechwytywania grup za pomocą ukośników wstecznych( to jest to, co przegapiłeś), przygotuj \v, aby przekształcić silnik wyrażeń regularnych Vima w bardzo magiczny tryb :

:%s/\v(\w)(\w\w)/\1y\2/g
 36
Author: Ingo Karkat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-11 08:47:38

Możesz również użyć tego wzoru, który jest krótszy:

:%s/^./&y
  • %s stosuje wzorzec do całego pliku.
  • ^. pasuje do pierwszego znaku linii.
  • &y dodaje y Po wzorze.
 23
Author: Juan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-08 13:34:12

Musisz także uciec od Parantezy grupowej:

:%s/\(\w\)\(\w\w\)/\1y\2/g
To wystarczy.
 10
Author: Henkersmann,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-11 11:45:32