Действительно, проблема вызвана особой обработкой символа
команды создания карт.
Механизм сопоставления клавиш в Vim - это способ выполнения последовательности нажатий клавиш.
быть интерпретированным как другая последовательность ключей; нет семантической интерпретации
Язык сценариев Vim сделан на этом уровне. Так как для создания отображения это
необходимо разделить оба аргумента последовательности ключей, чтобы установить соответствие
между командами :map
-семейства начинаются с определения границ
эти два аргумента. Чтобы использовать символы, которые могут помешать этому
процесс в отображении, необходимо использовать экранирующий синтаксис, предусмотренный для этого
символы (среди которых возврат каретки, пробел, обратная косая черта и строка).
Поскольку символ бара можно использовать для отделения команды отображения от
следующую команду Ex и, таким образом, определить конечную границу
с правой стороны сопоставления, его нельзя использовать как есть в последовательности клавиш.
Согласно :help map_bar
, в зависимости от настроек, символ бара может быть
экранированный как <bar>
, \|
или ^V|
(где ^V
обозначает буквальный
Ctrl + V код клавиши).
Имея это в виду, давайте проследим рассматриваемые отображения (вокруг
\|
/ \\|
часть) как они интерпретируются в конфигурации по умолчанию. В
В первом сопоставлении последовательность \|
обрабатывается как один символ |
.
Следовательно, после выполнения этой команды сопоставления нажатие t
будет
так же, как печатать
:call search('\m\(a|b\)', 'W')
Введите
Когда запускается вторая команда отображения, строка \\|
интерпретируется как
буквенный символ обратной косой черты (нет необходимости экранировать \
в
справа от отображений, кроме вложенных), за которыми следует \|
спецификатор, представляющий символ бара. Итак, эта команда отображает t
на
следующее:
:call search('\m\(a\|b\)', 'W')
Введите
Однако при вводе сопоставленных поисковых запросов в режиме командной строки, в отличие от
последовательности клавиш в отображениях, они сразу же интерпретируются как команды Ex.
Эти штриховые символы встречаются в строковых литералах, поэтому нет возможности
неправильно интерпретировать их как разделители для команд Ex. При прямом наборе,
Команды отправляются на выполнение, как они написаны. Таким образом, разница
в работе между ними из-за значения регулярных выражений
\m\(a\|b\)
и \m\(a\\|b\)
, не из-за побега.