在 vim 中,control-left 和 control-right 是前后空格分隔的词(即 B 和 W 的同义词),与 web textareas 和 相同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(可能是 xterm)之前记下 $TERM 的值,然后在 screen 中启动 vim 后,将 'term' 选项设置为该值。例如,
:set term=xterm
另一种方法是定义这些字符序列的映射:
:map <esc>[1;5D <C-Left>
:map <esc>[1;5C <C-Right>
您可以在 ~/.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>