control-left 和 control-right 在 vi​​m 中在螢幕會話中不起作用

control-left 和 control-right 在 vi​​m 中在螢幕會話中不起作用

在 vim 中,control-left 和 control-right 是前後空格分隔的單字(即 B 和 W 的同義詞),與 Web 文字區域和 相同bash

但是當運行時screen,這些鍵停止工作。按下時,vim 會切換到命令列並輸入5C5D

這是我對這些鍵的編碼:

$ 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(而是僅輸出BW)。

我猜這是一些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>

相關內容