En vim, control-left y control-right son palabras separadas por espacios en blanco hacia adelante y hacia atrás (es decir, sinónimos de B y W), al igual que las áreas de texto web y bash
.
Pero cuando se ejecuta screen
, estas teclas dejan de funcionar. Cuando se presiona, vim cambia a su línea de comando e ingresa 5C
o 5D
allí.
Aquí está la codificación que tengo para estas claves:
$ cat >/dev/null # pressing control-left, then control-right:
^[[1;5C^[[1;5D
Por cierto: intenté reasignar estas claves .screenrc
, así:
bindkey ^[[1;5D stuff B
bindkey ^[[1;5C stuff W
Esto funciona para vim, pero ahora esas teclas no funcionan en la bash
línea de comando (en lugar de eso, solo generan B
o W
).
Supongo que esto es un termcap
misterio que nunca he entendido... ¡gracias por cualquier aclaración!
Respuesta1
Hay un par de formas de solucionar este problema. Una es anotar el valor de $TERM antes de iniciar la pantalla (probablemente xterm), luego, después de iniciar vim dentro de la pantalla, establezca la opción 'término' en ese valor. Por ejemplo,
:set term=xterm
Otra forma es definir asignaciones para esas secuencias de caracteres:
:map <esc>[1;5D <C-Left>
:map <esc>[1;5C <C-Right>
Podrías ejecutar cualquiera de esas soluciones en tu ~/.vimrc condicionalmente al usar la pantalla, así:
if &term == "screen"
map <esc>[1;5D <C-Left>
map <esc>[1;5C <C-Right>
endif
Respuesta2
Mi .vimrc
en Ubuntu para manejar las teclas de flecha 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>