control-left y control-right no funcionan en vim, dentro de una sesión de pantalla

control-left y control-right no funcionan en vim, dentro de una sesión de pantalla

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 5Co 5Dallí.

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 bashlínea de comando (en lugar de eso, solo generan Bo W).

Supongo que esto es un termcapmisterio 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 .vimrcen 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>

información relacionada