Как вы писали, \
экранирует все выражение внутри <>
, превращая его в обычную строку.С веб-сайта vimhelp :
Примеры часто приводятся в примечании <>
.Иногда это просто для того, чтобы прояснить, что вам нужно набирать, но часто это можно набирать буквально, например, с помощью команды :map
.Правила:
- Любые печатаемые символы печатаются напрямую, кроме обратной косой черты и
<
- Обратная косая черта обозначается
"\\"
, двойной обратной косой чертой или "<Bslash>"
. - Реальное
<
обозначается "\<"
или "<lt>"
.Когда нет никакой путаницы, можно напрямую использовать <
.
Далее приводится пример для отображения CH шести символам "<Домой>".Я заменил его на «<да>», потому что дом - это ключевое слово.
:imap <C-H> \<yes>
Попробуйте сами; CH напечатает буквенную строку "".
Итак, для вашей команды она экранирует последовательности клавиш Cy и Cg вих буквальные строковые представления;"<C-y>"
и "<C-g>"
соответственно.Первоначально это было сделано, потому что атрибут <expr>
делает так, что команда ожидает получить строковое представление команды для выполнения, а не саму уже проанализированную последовательность управления.Но этот выход бесполезен, так как он уже в двойных кавычках.Вот почему поведение не меняется при удалении косой черты.