我用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。