【问题标题】:Mapping numeric keypad keys in vim在vim中映射数字键盘键
【发布时间】:2011-09-08 02:36:55
【问题描述】:

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

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

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

如果这很重要,我正在使用 Fedora 14 附带的 vim,以及一个普通的 xterm。键盘按键在插入模式下工作正常,无论是打开还是关闭数字锁定。

我错过了什么?

【问题讨论】:

    标签: vim xterm


    【解决方案1】:

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

    xterm*appkeypadDefault: false
    

    并重新启动 xterm。

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

    但我认为你不应该做你正在做的事。在--NORMAL-- 模式下,数字输入用于表示“计数”,就像在4dd 中一样。将数字映射到其他命令会让你很快陷入困境。

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

    【讨论】:

    • 嗯,谢谢,但这不起作用。此外,'false' 是 xtermappkeypadDefault 的默认值,如 xterm 手册页中所示。十多年来,我一直使用 vim 来处理所有事情,而且我从未使用我的 *keypad 来指定重复(不必将手从原位移开是 vim 的优势之一)。所以我可以映射键盘。
    【解决方案2】:

    问题中有一些模棱两可的地方,这可能表明了实际问题。 vim 接受 k0 的绑定,假设它是一个功能键。

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

    假设您使用了了解功能键的终端描述。 vt100 终端描述没有这样做,因为 vt100 没有功能键(除了 PF1PF4 之外,这取决于您与谁交谈)。但是如果你有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 会将其视为文字 0k1 等也会发生同样的情况,实际上将功能键和数字键盘视为同一事物。

    对于它的价值,GNU screen 做同样的事情,但也适用于编号键。如果我在screen 内运行vimvim 将只看到0。 vim 中的字面值 0 在命令模式下作用不大。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-19
      • 1970-01-01
      • 2012-12-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多