control-left и control-right не работают в vim в сеансе screen

control-left и control-right не работают в vim в сеансе screen

В 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

Мой .vimrcUbuntu для обработки клавиш со стрелками 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>

Связанный контент