xterm 或 AAABBBBBBCCDDD 問題中的 TERM=(linux|xterm) vi
通常當我想
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
。如果您查看 和 的功能
smkx
,xterm
您會看到: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
這意味著當你開始
vim
時TERM=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
您可以在插入模式下使用箭頭鍵。