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 5C
ou 5D
lá.
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 bash
linha de comando (em vez disso, apenas gerando B
or W
).
Acho que isso é algum termcap
misté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 .vimrc
no 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>