Вы можете использовать словарь:
:let replacements = {'a': 'b', 'b': 'c', 'c': 'a'}
:s/[abc]r\@!/\=replacements[submatch(0)]/g
r\@!
предотвращает изменение c
из cross
.
Добавьте %
перед s
, если вы хотите сделать это для всего файла, а не только для текущей строки. Обратите внимание, что это изменит ЛЮБОЕ «a», «b» или «c» в строке, в том числе внутри слов (например, c
в cross
). Чтобы ограничить это, вы могли бы изменить шаблон на \<[abc]\>
, но это не соответствовало бы тому, где у вас есть a2
, поэтому было бы предложено: \<\([abc]\)\d*\>
(и заменить submatch(0)
на submatch(1)
. если вы хотите найти совпадение с z
, это просто:
:let replacements = {'a': 'b', 'b': 'c', 'c': 'a'}
:s/z\.\zs[abc]/\=replacements[submatch(0)]/g
См:
:help Dictionary
:help :substitute
:help :s\=
:help \@!
:help \zs
:help \(\)
:help \<