Преобразование <Esc> в MacVim раздражает сам Vim

5

У меня есть следующая строка в моем .vimrc:

nnoremap <Esc> :noh<Cr>

Это отлично работает в MacVim. Всякий раз, когда я открываю сам Vim, его «командная строка» начинается с:

.2c

Для чего стоит, когда войти, чтобы выполнить команду, Vim жалуется E16: Invalid range.

Это небольшое раздражение, но как мне решить эту проблему?

Закрытие Ковбой
источник
@ Пет у меня нет! :( Я временно отказался от попыток сделать это - я очень часто заходил в Vim и выходил из него, поэтому этот вопрос становился очень раздражающим. Я определенно был бы признателен за эту награду. :)
Закрытие Cowboy

Ответы:

3

Картографирование Escвсегда немного сложнее и, как правило, создает проблемы такого рода, даже если это не должно происходить.

«Канонический» метод для вашего отображения:

nnoremap <silent> <C-l> :nohlsearch<CR><C-l>

Таким образом Ctrl+L(который обычно перерисовывает ваш экран) перестанет выделяться и перерисовывается экран.


Я думаю, что выяснил, что происходит, но у меня все еще нет решения. Я предположил, что Vim получил строку, содержащую " <ESC>и 2c", поэтому я использовал следующее отображение, чтобы сделать его видимым:

nnoremap <Esc> :"

Это привело к следующей подсказке при запуске:

:"[>0;261;0c

Что означает, что что-то отправлено <ESC>[>0;261;0cпри запуске. Теперь, глядя на оригинальные xtermпоследовательности управления , мы находим, что:

ESC [         Control Sequence Introducer (CSI is 0x9b)

а также

CSI> P s c

Отправить атрибуты устройства (вторичный DA).

P s = 0 или опущено → запросить идентификационный код терминала. Ответ зависит от настройки ресурса decTerminalID . Он должен применяться только к VT220 и выше, но xterm расширяет его до VT100.

→ CSI> P p ; P v ; P cc

где P p обозначает тип терминала

P p = 0 → '' VT100 ''.
P p = 1 → '' VT220 ''.

и P v - версия прошивки (для xterm это был первоначально номер патча XFree86, начиная с 95). В терминале DEC P c указывает регистрационный номер картриджа ПЗУ и всегда равен нулю.

Поэтому в моем случае что-то отправляется CSI >с P p = 0 (→ тип терминала VT100), P v = 261 (→ моя xtermверсия) и P c = 0.

Тем не менее, я понятия не имею, откуда оно или как его остановить. Мое лучшее предположение, что некоторый обмен информацией между терминалом и Vim не выполняется, и что-то происходит с ошибками.

Peth
источник
Спасибо за ваш ответ, но добавление этого в мой .vimrcне решило проблему. Крысы! Я использую Snow Leopard.
Закрытие Ковбой
Потрясающие исследования. +1 От меня. Поскольку я не был человеком, который «финансировал» награду, я собираюсь подождать до завтра, чтобы пометить ваш ответ как правильный, предполагая, что никто не ответит.
Закрытие Ковбой
* GASP * Я не заметил , что вы также тот , кто поставил Баунти !! Я чувствую себя идиотом! В свою защиту я уже пометил ваш ответ как решение ранее сегодня - до этого откровения ...
Закрытие Cowboy
0

Проблема в том, что для некоторого терминала vim получает [> 0; 261; 0c таким образом. И последнее "c" делает запуск vim болезненным, но я нашел простой способ пропустить первую "c" при запуске:

nnoremap c :nunmap c<Cr>
oselivanov
источник