问题中有一些模棱两可的地方,这可能表明了实际问题。 vim 接受 k0 的绑定,假设它是一个功能键。
您会看到数字功能键以 1 开头的大多数键盘,一些终端描述将功能键 1 等同于 k0,少数将其等同于 k0功能键 10. 可能有人认为它是数字小键盘的一部分,但不太可能(因为小键盘使用与功能键不同的字符序列)。
假设您使用了了解功能键的终端描述。 vt100 终端描述没有这样做,因为 vt100 没有功能键(除了 PF1 到 PF4 之外,这取决于您与谁交谈)。但是如果你有TERM=vt100,那么可以根据终端描述识别一些数字键盘(例如,参见vt100+fnkeys description上方的冗长评论)。
不过,它不在TERM=xterm 中。
您忽略的是 vim(也许有帮助)使用其内置的 termcaps 修改终端描述。它使用如下表项识别 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 做同样的事情,但也适用于编号键。如果我在screen 内运行vim,vim 将只看到0。 vim 中的字面值 0 在命令模式下作用不大。