В вопросе есть некоторая двусмысленность, которая может указывать на реальную проблему. vim принимает эту привязку для k0
, предполагая, что это функциональная клавиша.
Большинство клавиатур, которые вы видите, нумеруются функциональными клавишами, начинающимися с 1
, и в некоторых описаниях терминалов функциональная клавиша 1 приравнивается к k0
, а некоторые приравнивают ее k0
к функциональной клавише 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")},
Но записей для цифровых ключей нет; для ключа 0
нет "\033O*p"
.
Если у vim есть (в описании терминала) k0
, и вы ни на что не сопоставили его, vim будет рассматривать его как литерал 0
. То же самое происходит с k1
и т. д., фактически рассматривая функциональные клавиши и цифровую клавиатуру как одно и то же.
Что бы это ни стоило, GNU screen
делает то же самое, но также и для пронумерованных ключей. Если я запущу vim
внутри screen
, vim
увидит только 0. Литерал 0
в vim мало что делает в командном режиме.
person
Thomas Dickey
schedule
21.11.2016