control-left e control-right não funcionam no vim, dentro de uma sessão de tela

control-left e control-right não funcionam no vim, dentro de uma sessão de tela

No vim, control-left e control-right são palavras separadas por espaços em branco para frente e para trás (ou seja, sinônimos para B e W), o mesmo que áreas de texto da web e bash.

Mas durante a execução screen, essas chaves param de funcionar. Quando pressionado, o vim alterna para sua linha de comando e entra 5Cou 5Dlá.

Aqui está a codificação que tenho para essas chaves:

$ cat >/dev/null    # pressing control-left, then control-right:
^[[1;5C^[[1;5D

BTW: tentei remapear essas chaves .screenrc, assim:

bindkey ^[[1;5D stuff B
bindkey ^[[1;5C stuff W

Isso funciona para o vim, mas agora essas chaves não funcionam na bashlinha de comando (em vez disso, apenas gerando Bor W).

Acho que isso é algum termcapmistério, que nunca entendi... obrigado por qualquer esclarecimento!

Responder1

Existem algumas maneiras de corrigir isso. Uma é anotar o valor de $TERM antes de iniciar a tela (provavelmente xterm) e, depois de iniciar o vim na tela, defina a opção 'term' para esse valor. Por exemplo,

:set term=xterm

Outra maneira é definir mapeamentos para essas sequências de caracteres:

:map <esc>[1;5D <C-Left>
:map <esc>[1;5C <C-Right>

Você poderia executar qualquer uma dessas soluções em seu ~/.vimrc condicionalmente usando a tela, assim:

if &term == "screen"
    map <esc>[1;5D <C-Left>
    map <esc>[1;5C <C-Right>
endif

Responder2

Meu .vimrcno Ubuntu para lidar com as teclas de seta 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>

informação relacionada