сопоставление клавиш клавиатуры в vim не отвечает на клавишу управления

Я использую следующие сопоставления для управления размером окна:

:nnoremap <kPlus> <C-W>+
:nnoremap <kMinus> <C-W>-
:nnoremap <kDivide> <C-W><
:nnoremap <kMultiply> <C-W>>

Добавление управляющего префикса к переходу окна карты не имеет никакого эффекта:

:nnoremap <C-kDivide> <C-W>h
:nnoremap <C-kMultiply> <C-W>l

Нажатие <C-kMultiply> действует так же, как <kMultiply>

Есть идеи, почему?


person donnut    schedule 07.06.2012    source источник
comment
Потому что нет такого управляющего символа <C-kDivide>?   -  person sidyll    schedule 07.06.2012
comment
Хорошая точка зрения. Не подумал об этом ;-( С другой стороны, почему бы не быть такой комби?   -  person donnut    schedule 07.06.2012
comment
Пытался связать контроль-клавиатуру x с приложением в XUbuntu. Это работает, поэтому управляющий символ ‹C-kDivide› существует.   -  person donnut    schedule 07.06.2012
comment
Иногда он может поймать это, рассматривая клавишу управления как независимую клавишу-модификатор. Но когда речь идет о терминалах, что-то вроде <C-A> отправляется как символ ^A и, вероятно, он не знает ни о каком символе, который подходит <C-kMultiply>  -  person sidyll    schedule 07.06.2012
comment
Это проблема с внутренним представлением входного потока (если вы используете gvim), он просто не может обрабатывать большинство комбинаций <C-, потому что может представлять только управляющие коды ASCII. Если вы используете vim, управление отключается до того, как оно достигнет vim, поэтому не имеет значения, сможет ли vim его обработать.   -  person ZyX    schedule 07.06.2012


Ответы (1)


Чтобы расширить то, что сказал ZyX:

Такие клавиши, как <C-kMultiply>, будут нормально работать в GVim, который получает ввод с клавиатуры из среды графического интерфейса, но их невозможно представить в потоке, который служит вводом терминала Vim, из-за почтенного способа определения в нем управляющих символов:

Как управляющие символы отображаются на клавиатуре (Википедия)

Модификатор управления просто обнуляет два старших бита, так что, например, G (​10​00111) становится BEL (​00​00111 ). Это означает, что он может работать только с однобайтовыми символьными кодами: его невозможно применить к многобайтовым escape-последовательностям, таким как то, что на самом деле отправляет <kMultiply>.

(Вот почему вы обычно не можете комбинировать Ctrl с Shift в терминале: и <C-G>, и <C-g> становятся одним и тем же управляющим символом после обнуления старших битов. .)

Что происходит с такой непредставимой комбинацией клавиш, зависит от терминала к терминалу: xterm, например, проигнорирует модификатор и отправит <C-kMultiply> как <kMultiply>, а gnome-terminal вообще откажется отправлять нажатие клавиши.

person Pi Delport    schedule 26.07.2012