В этом вопросе есть некоторая неопределенность, которая может указывать на реальную проблему. 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 мало что делает в командном режиме.