在 vim 中,control-left 和 control-right 是前後空格分隔的單字(即 B 和 W 的同義詞),與 Web 文字區域和 相同bash
。
但是當運行時screen
,這些鍵停止工作。按下時,vim 會切換到命令列並輸入5C
或5D
。
這是我對這些鍵的編碼:
$ cat >/dev/null # pressing control-left, then control-right:
^[[1;5C^[[1;5D
順便說一句:我嘗試重新映射這些鍵.screenrc
,如下所示:
bindkey ^[[1;5D stuff B
bindkey ^[[1;5C stuff W
這適用於 vim,但現在這些鍵在命令列中不起作用bash
(而是僅輸出B
或W
)。
我猜這是一些termcap
神秘的東西,我從來沒有理解過......感謝您的啟發!
答案1
有幾種方法可以解決這個問題。一種是在啟動 screen 之前記下 $TERM 的值(可能是 xterm),然後在 screen 中啟動 vim 後,將 'term' 選項設為該值。例如,
:set term=xterm
另一種方法是定義這些字元序列的映射:
:map <esc>[1;5D <C-Left>
:map <esc>[1;5C <C-Right>
您可以在使用 screen 時有條件地在 ~/.vimrc 中執行這些解決方案中的任何一個,如下所示:
if &term == "screen"
map <esc>[1;5D <C-Left>
map <esc>[1;5C <C-Right>
endif
答案2
我.vimrc
在 Ubuntu 中處理 ctrl 箭頭鍵
map <Esc>[1;5A <C-Up>
map <Esc>[1;5B <C-Down>
map <Esc>[1;5D <C-Left>
map <Esc>[1;5C <C-Right>
cmap <Esc>[1;5A <C-Up>
cmap <Esc>[1;5B <C-Down>
cmap <Esc>[1;5D <C-Left>
cmap <Esc>[1;5C <C-Right>
map <Esc>[1;2D <S-Left>
map <Esc>[1;2C <S-Right>
cmap <Esc>[1;2D <S-Left>
cmap <Esc>[1;2C <S-Right>