Отображение клавиш цифровой клавиатуры в vim - PullRequest
1 голос
/ 08 сентября 2011

Я не могу заставить это отображение работать в vim внутри терминала xterm.

:map <k0> :echo 'Hello'<CR>

Я могу заставить то же отображение нормально работать в gvim.Если я выполняю указанную выше команду в vim на терминале, он принимает ее и корректно отображается, когда я набираю :map.Но в обычном режиме, если я нажимаю клавишу клавиатуры 0 , в строке состояния появляется «0», а затем исчезает при следующем нажатии.

Я использую vimэто пришло с Fedora 14, если это имеет значение, и простой xterm.Клавиши клавиатуры работают нормально в режиме вставки, как при включенном, так и при выключенном numlock.

Чего мне не хватает?

Ответы [ 2 ]

0 голосов
/ 21 ноября 2016

В этом вопросе есть некоторая неопределенность, которая может указывать на реальную проблему. vim принимает эту привязку для k0, предполагая, что это функциональная клавиша.

Большинство клавиатур, на которых вы увидите цифровые функциональные клавиши, начинающиеся с 1, и несколько описаний терминалов приравнивают функциональную клавишу 1 к k0, а некоторые приравнивают ее к k0 для функционирования. -key 10. Также возможно , что кто-то предполагает, что это часть цифровой клавиатуры, но маловероятно (поскольку клавиатура использует последовательности символов, отличные от функциональных клавиш).

Предполагается, что вы использовали описание терминала, которое знает о функциональных клавишах. Описание терминала vt100 этого не делает, поскольку у vt100 не было функциональных клавиш (кроме PF1 - PF4 , которые являются или не зависят от того, с кем вы разговариваете). Но если бы у вас было TERM=vt100, то некоторые цифровой клавиатуры могли бы быть распознаны на основе описания терминала (см., Например, длинный комментарий над vt100+fnkeys описанием ) .

Однако не в TERM=xterm.

Что вы упускаете, так это то, что vim (возможно, полезно) изменяет описание терминала, используя его встроенные термины. Он распознает PF1 и т. Д., Используя такие записи в таблице:

{K_XF1,             IF_EB("\033O*P", ESC_STR "O*P")},
{K_XF2,             IF_EB("\033O*Q", ESC_STR "O*Q")},
{K_XF3,             IF_EB("\033O*R", ESC_STR "O*R")},
{K_XF4,             IF_EB("\033O*S", ESC_STR "O*S")},

Но для нумерованных ключей нет записей; "\033O*p" для клавиши 0 нет.

Если vim имеет (в описании терминала) k0, и вы не сопоставили его ни с чем, vim будет рассматривать его как литерал 0. То же самое происходит с k1 и т. Д., Фактически рассматривая функциональные клавиши и цифровую клавиатуру как одно и то же.

Для чего бы то ни было, GNU screen делает то же самое, но и для пронумерованных ключей. Если я наберу vim внутри screen, vim увидит только 0. Литерал 0 в vim мало что делает в командном режиме.

0 голосов
/ 08 сентября 2011

Попробуйте добавить эту строку в ~/.Xdefaults:

xterm*appkeypadDefault: false

и перезапустить xterm.

«Режим клавиатуры приложения», вероятно, является причиной ваших проблем.

Но я не думаю, что вы должны делать то, что делаете.В режиме --NORMAL-- числовой ввод используется для индикации «счета», как в 4dd.Преобразование чисел в другие команды быстро доставит вам неприятности.

Вы должны добавить тег xterm к своему вопросу.

...