В чем разница между экранированием кода ключа в <expr>noremap? - PullRequest
2 голосов
/ 19 сентября 2019

Я пишу сценарий для циклического перемещения по всплывающему меню с помощью клавиши Tab , и я вижу, что люди часто избегают обозначений клавиш :

inoremap <expr> <CR> pumvisible() ? "\<C-y>" : "\<C-g>u\<CR>"

В настоящее время я использую следующее без косых черт \, и оно производит точно такое же поведение:

inoremap <expr> <CR> pumvisible() ? "<C-y>" : "<C-g>u<CR>"

Когда мне нужно добавить экранирование с обратной косой чертой, чтобы убедиться, что он наиболее совместим, или делает этообратная косая черта не имеет смысла в этом контексте?

1 Ответ

0 голосов
/ 19 сентября 2019

Как вы писали, \ экранирует все выражение внутри <>, превращая его в обычную строку.С веб-сайта vimhelp :

Примеры часто приводятся в примечании <>.Иногда это просто для того, чтобы прояснить, что вам нужно набирать, но часто это можно набирать буквально, например, с помощью команды :map.Правила:

  1. Любые печатаемые символы печатаются напрямую, кроме обратной косой черты и <
  2. Обратная косая черта обозначается "\\", двойной обратной косой чертой или "<Bslash>".
  3. Реальное < обозначается "\<" или "<lt>".Когда нет никакой путаницы, можно напрямую использовать <.

Далее приводится пример для отображения CH шести символам "<Домой>".Я заменил его на «<да>», потому что дом - это ключевое слово.

:imap <C-H> \<yes>

Попробуйте сами; CH напечатает буквенную строку "".

Итак, для вашей команды она экранирует последовательности клавиш Cy и Cg вих буквальные строковые представления;"<C-y>" и "<C-g>" соответственно.Первоначально это было сделано, потому что атрибут <expr> делает так, что команда ожидает получить строковое представление команды для выполнения, а не саму уже проанализированную последовательность управления.Но этот выход бесполезен, так как он уже в двойных кавычках.Вот почему поведение не меняется при удалении косой черты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...