Если буквенные символы расположены последовательно в цели
кодирование 1 , используйте следующую команду подстановки 2 .
:%s/./\=nr2char(char2nr(submatch(0))+2)/g
Однако эта замена реализует некруговое смещение букв. Циркуляр
сдвиг может быть реализован двумя заменами, отдельно обрабатывая строчные буквы
и заглавные буквы.
:%s/\l/\=nr2char(char2nr('a') + (char2nr(submatch(0)) - char2nr('a') + 2) % 26)/g
:%s/\u/\=nr2char(char2nr('A') + (char2nr(submatch(0)) - char2nr('A') + 2) % 26)/g
Другим способом является перевод символов с помощью функции tr()
. Позволь нам
предположим, что переменная a
содержит строчные буквы алфавита
расположены в правильном порядке, а переменная a1
содержит строку символов
соответствует значениям в a
(ниже приведен пример для английских букв).
:let a = 'abcdefghijklmnopqrstuvwxyz'
:let a1 = a[2:] . a[:1]
Чтобы не вводить весь алфавит вручную, можно получить значение a
следующим образом,
:let a = join(map(range(char2nr('a'), char2nr('z')), 'nr2char(v:val)'), '')
Затем, чтобы заменить каждую букву в строке буквой на две позиции вниз
алфавит, используйте подстановку
:%s/.*/\=tr(submatch(0), a . toupper(a), a1 . toupper(a1))
1 Это верно для ASCII и некоторых алфавитов в UTF-8, например, Английский.
2 Перед запуском команды убедитесь, что опция encoding
устанавливается соответственно.