Я не понимаю, почему эти команды делают разные вещи.
Вставляется в файл vimrc, активируется нажатием t
в обычном режиме:
nnoremap t :call search('\m\(a\|b\)', 'W')<CR>
nnoremap t :call search('\m\(a\\|b\)', 'W')<CR>
Вводится непосредственно в командную строку:
:call search('\m\(a\|b\)', 'W')
:call search('\m\(a\\|b\)', 'W')
Чтобы быть точным: «Предполагаемое» поведение требует \\|
в примере nnoremap
, но для этого требуется \ |
в примере поиска call
Я знаю, что специальная обработка bar ( :help :bar
) является одной из тех ловушек, которые расставил Vim. для меня, но это все равно не имеет смысла. В документации четко сказано, что «этот список команд будет видеть bar как часть своего аргумента», но ни одно из этих исключений здесь не применимо. Все команды, участвующие в этом примере, рассматривают bar как символ мета-конкатенации. Также в этой ситуации полоса находится внутри строки, и (я думаю?) разбор ее как части строки имеет приоритет над синтаксисом мета-конкатенации.