在vim中映射数字小键盘键

时间:2011-09-08 02:36:55

标签: vim xterm

我无法让这个映射在xterm终端内的vim中工作。

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

我可以使用相同的映射在gvim中正常工作。如果我在终端上的vim中发出上述命令,它会接受它,当我输入:map时它会正确显示。但在正常模式下,如果按 0 键盘键,状态行上会显示“0”,然后在下一次按键时消失。

如果重要的话,我正在使用Fedora 14附带的vim,以及一个简单的xterm。键盘按键在插入模式下工作正常,两者都打开和关闭numlock。

我错过了什么?

2 个答案:

答案 0 :(得分:0)

尝试将此行添加到~/.Xdefaults

xterm*appkeypadDefault: false

并重新启动xterm。

“应用程序键盘模式”可能是您遇到麻烦的原因。

但我不认为你应该做你正在做的事情。在--NORMAL--模式下,数字输入用于指示“{”,如4dd中所示。将数字映射到其他命令会让你快速陷入困境。

您应该在问题中添加xterm标记。

答案 1 :(得分:0)

问题存在一些含糊之处,这可能表明实际问题。 vim接受k0的绑定,假设它是一个功能键。

大多数键盘,您会看到从 1 开始的数字功能键,以及一些终端描述将功能键1等同于k0,一些将它k0等同于功能键10.它也可能某人认为它是数字键盘的一部分,但不太可能(因为键盘使用的字符序列不同于功能键)。

假设您使用了解功能键的终端描述。 vt100终端描述没有这样做,因为vt100没有功能键(除了 PF1 PF4 ,它们是或者不是取决于你与谁交谈)。但是如果你有TERM=vt100,则可以根据终端描述识别数字键盘的部分(例如参见vt100+fnkeys description上方的冗长评论)。 / p>

但它不在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")},

但是没有编号键的条目; "\033O*p" 键没有0

如果vim(在终端说明中)k0,并且您还没有将其映射到任何内容,则vim会将其视为文字 0 k1等也是如此,实际上将功能键和数字键盘视为同样的事情。

对于它的价值,GNU screen做同样的事情,但对于数字键也是如此。如果我在vim内运行screen,则vim只会看到0&#39}。 vim中的文字 0 在命令模式下没有多大作用。

相关问题