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?
91
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
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
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
dodajey
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
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
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