Vim
使 GNOME 終端向 vim 發送正確的數字鍵盤鍵碼
我使用vim-mark外掛,它允許我製作不同顏色的多個高光。它有一些使用數字鍵盤(
<k1>
…<k9>
和<C-k1>
…<C-k9>
)的預設鍵映射,這使我可以在出現的亮點之間來回跳轉。目前,key maps 只能在 gvim 中使用,但 gvim 有自己的渲染怪癖,我不會展開。如果我嘗試在 GNOME 終端的普通 vim 中使用數字小鍵盤,vim 會收到鍵盤上字母上方數字的鍵碼,並且不會在高亮顯示之間進行跳轉。
有沒有辦法讓 GNOME 終端將真正的數字鍵盤鍵碼發送到 vim?
我真的不想更改外掛的預設按鍵映射,因為任何其他按鍵映射要麼不那麼令人難忘,要麼幾乎保證需要更多按鍵。
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
,您可以通過添加:XTerm.sunKeyboard: true
到你的
~/.Xresources
.編輯:如果您想重新編譯libvte,您可能應該將條目修改為:
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。