Vim

xterm 或 AAABBBBBBCCDDD 問題中的 TERM=(linux|xterm) vi

  • November 30, 2016

通常當我想vim在桌面konsole會話中執行時,我確保將 TERM 變數設置為linux,因為箭頭鍵在插入模式下不起作用TERM=xterm。它們顯示大寫 A..D 而不是移動游標。

現在我認為這是錯誤的做事方式,konsole或者xterm實際上是類型xterm

有沒有更好的方法讓箭頭鍵在vi/下工作vim

作業系統:Kubuntu 13.04(乾淨安裝)

我想我知道發生了什麼。

您尚未配置vim為禁用vi兼容模式。

vi中,您只能在命令模式下按箭頭鍵。在插入模式下,按箭頭鍵發送的字元序列被視為單獨輸入的字元。

現在,在啟動時,vi將終端設置為鍵盤傳輸模式(kx)。在該模式下,終端通常在按下箭頭鍵時發送不同的字元序列。

例如,Up密鑰\eOA在 kx 模式下發送,而\e[A在不發送時。

要將終端設置為 kx 模式,它會smkx在 terminfo 數據庫中查找 (Set Mode Keypad Transmit) 功能以獲取 的目前值$TERM

如果您查看 和 的功能smkxxterm您會看到:konsole``linux

$ infocmp -1 linux | grep smkx
$ infocmp -1 xterm | grep smkx
   smkx=\E[?1h\E=,
$ infocmp -1 konsole | grep smkx
   smkx=\E[?1h\E=,

這在條目smkx中沒有定義。linux

這意味著當你開始vimTERM=linux,vim 不會將終端設置為 kx 模式,這意味著它發送\e[A而不是\eOA當你按下Up鍵時。

現在,\eOA當您處於插入模式時,vim 會做什麼?\e(ESC),離開插入模式並返回命令模式。O打開一個新行並再次進入插入模式,A插入A字元。

\e[A, \e(ESC) 離開插入模式,[A是一個未知的組合(在vim,[中是一個前綴,後面總是跟另一個字元),所以什麼也不做。

因此,您需要做的是:保持$TERM原樣,在 vi 兼容時不要在插入模式下使用箭頭鍵,或者添加 aset nocp以便~/.vimrc您可以在插入模式下使用箭頭鍵。

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