Vim

使 GNOME 終端向 vim 發送正確的數字鍵盤鍵碼

  • November 17, 2019

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

引用自:https://unix.stackexchange.com/questions/552297