В vim control-left и control-right — это слова, разделенные пробелами (т. е. синонимы для B и W), то же самое, что и текстовые области в Интернете и 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
Есть несколько способов исправить это. Один из них — запомнить значение $TERM перед запуском screen (вероятно, xterm), а затем после запуска vim в screen установить опцию 'term' на это значение. Например,
:set term=xterm
Другой способ — определить сопоставления для этих последовательностей символов:
:map <esc>[1;5D <C-Left>
:map <esc>[1;5C <C-Right>
Вы можете выполнить любое из этих решений в вашем ~/.vimrc при условии использования screen, например так:
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>