让 GNOME 终端将正确的数字键盘键码发送到 vim

让 GNOME 终端将正确的数字键盘键码发送到 vim

我用vim 标记插件,它允许我制作不同颜色的多个亮点。它有一些使用数字键盘(<k1>...<k9><C-k1>... <C-k9>)的默认键映射,这允许我在突出显示的出现之间来回跳转。

目前,按键映射只能在 gvim 中使用,但 gvim 有自己的渲染怪癖,我不会对此进行扩展。如果我尝试在 GNOME 终端中的普通 vim 中使用数字键盘,vim 会接收键盘上字母上方数字的键码,并且不会在突出显示的事件之间进行跳转。

有没有办法让 GNOME 终端将真实的数字键盘键盘代码发送到 vim?

我真的不想更改插件的默认按键映射,因为任何其他按键映射要么不太容易记住,要么几乎保证需要更多按键。

答案1

GNOME 终端,因为每个终端模拟器都会映射按键符号它从X(或您正在使用的任何显示服务器)接收到字符或转义序列。不幸的是它有一个固定映射没有配置空间。

键盘可以在两种模式下工作: 当处于正常模式它发送与上一行中的数字相同的字符。然而,如果它是在应用方式它发送转义序列。 GNOME 终端对两种模式的映射是相同的,但vim期望看到以下转义序列(使用 进行检查:set termcap):

t_KC <k0>        ^[O*p
t_KD <k1>        ^[O*q
t_KE <k2>        ^[O*r
t_KF <k3>        ^[O*s
t_KG <k4>        ^[O*t
t_KH <k5>        ^[O*u
t_KI <k6>        ^[O*v
t_KJ <k7>        ^[O*w
t_KK <k8>        ^[O*x
t_KL <k9>        ^[O*y

为了使用这些快捷键,您需要一个终端,它可以在进入时正确发送转义序列应用方式。例如,您可以使用xterm并将其切换为VT220型功能键, 通过增加:

XTerm.sunKeyboard: true

给你的~/.Xresources.

编辑:如果你想重新编译自由软件您可能应该将条目修改为:

static const struct _vte_keymap_entry _vte_keymap_GDK_KP_0[] = {
    {cursor_all, keypad_all, 0, "0", 1},
    {cursor_all, keypad_app, VTE_NUMLOCK_MASK, "0", 1},
    {cursor_all, keypad_app, 0, _VTE_CAP_SS3 "p", -1},
    {cursor_all, keypad_all, 0, X_NULL, 0},
};

并将补丁发送给 GNOME。

相关内容