¿Cómo hacer que vim funcione correctamente con tmux?

19

Estoy tratando de descubrir cómo jugar vimy tmuxjugar juntos.

Mi problema es: cuando lo uso xterm-256color, vimtrabajo bien, pero el fondo no se procesa correctamente.

Lo arreglé usando screen-256color. Esto se ve bien pero rompe el Ctrl + arrow keys(van en modo de inserción y eliminan 4 líneas). Quiero usar estas asignaciones para cambiar las pestañas vim.

¿Cómo hago para que esto funcione?

ser más astuto
fuente

Respuestas:

8

Corre catdentro tmuxy presiona las teclas en cuestión para descubrir los códigos de escape que generan. Para mí esto da ^[[Dy ^[[C. Luego simplemente mapee esos códigos de escape directamente.

nnoremap ^[[D gT
nnoremap ^[[C gt

donde el ^[es un carácter de escape, que puede insertar presionando <CTRL-v><ESC>vim.

Mika Fischer
fuente
Eso no cambió el comportamiento de mi vim.
Outmartin
¿Qué se imprime cuando inicia cat dentro de tmux y presiona las teclas?
Mika Fischer
^ [[1; 5C y ^ [[1; 5D. Buena idea, no sabía cómo conseguirlos. Solo lo intenté. ¡Funciona! Gracias.
Outmartin
Excelente. Edité mi contestador para incorporar el método para obtener los códigos de escape correctos.
Mika Fischer
22

Hay varios niveles de configuración que deben configurarse correctamente para la mejor funcionalidad.

  1. Configure tmux para reconocer las secuencias. Antes de iniciar tmux , configure un valor TERM que sea apropiado para su emulador de terminal (por ejemplo xterm-256color). La entrada de la base de datos terminfo identificado por la variable de entorno TERM dice tmux cómo reconocer las secuencias para la modificación teclas de flechas (las capacidades definidas por el usuario { kUP, kDN, kRIT, kLFT} {, 3.. 7}).
  2. Configure tmux para generar las secuencias. Establezca la xterm-keysopción de sesión para onque tmux genere su propia secuencia de estilo xterm cuando reciba una secuencia que identifica su TERM. En su ~/.tmux.conf:

    set-option -g xterm-keys on
    
  3. Configure los programas que se ejecutan dentro de tmux para usar / esperar la mayoría de sus secuencias. Asegúrese de estar usando un screenTERM basado en tmux (por ejemplo screen-256color). Esto le dice a los programas que se ejecutan dentro de tmux cómo controlar la (re) emulación de terminal de tmux y qué respuestas deben esperar de tmux .
  4. Desafortunadamente, las screenentradas de la base de datos terminfo basadas en frecuencia a menudo no definen ninguna secuencia para las teclas de flecha modificadas (es decir, pueden no tener kUP, etc.), por lo que los programas que se ejecutan dentro de tmux pueden no saber que esperan tales secuencias. Deberá configurar manualmente cualquier programa que desee reconocer estas teclas. En Vim , puedes poner esto en tu ~/.vimrc:

    if &term =~ '^screen'
        " tmux will send xterm-style keys when xterm-keys is on
        execute "set <xUp>=\e[1;*A"
        execute "set <xDown>=\e[1;*B"
        execute "set <xRight>=\e[1;*C"
        execute "set <xLeft>=\e[1;*D"
    endif
    

    Es posible que desee utilizar las variantes sin x(es decir, en <Up>lugar de <xUp>, etcétera) si encuentra que el uso de la xvariable hace que sus teclas de flecha normales dejen de funcionar.

    La ventaja de definir las teclas de esta manera es que no tiene que asignar cada una de las combinaciones de modificadores por separado (Shift, Control, Contol + Shift, Meta, Meta + Shift, Meta + Control, Meta + Control + Shift); la *obtiene interpretación especial para manejar todas las secuencias relacionadas (ver :help xterm-modifier-keys).

  5. Luego puede asignar las teclas en lugar de sus secuencias codificadas:

    nnoremap <C-Right> gt
    nnoremap <C-Left> gT
    
Chris Johnsen
fuente
1
¡Hey, esto funcionó perfectamente!
Pablo Olmos de Aguilera C.
2

Como se explica aquí , deshabilite el Borrado de color de fondo (BCE) borrando la t_utopción del terminal (ejecute :set t_ut=en Vim y luego presione Control+ Lpara actualizar la pantalla del terminal) para que los esquemas de color funcionen correctamente cuando se usa Vim dentro de la pantalla tmux y GNU.

¡De esta manera, puede mantener su TERMvalor en cuanto xterm-256colora la detección de clave adecuada y al mismo tiempo obtener el esquema de color Vim adecuado! :-)

sunaku
fuente
1

¿La configuración set t_Co=256en su ~ / .vimrc ayuda en absoluto? Esta es solo una configuración de color, pero puede ayudar a solucionar algunos problemas.

También puede volver a asignar las ctrl+Arrowteclas en su ~ / .vimrc ...

Editar: ¿intentaste ctrl+Arrowen una sesión de pantalla de GNU? Creo que este puede ser tu problema.

Sardathrion - Restablece a Monica
fuente
se ve y funciona bien en pantalla con xterm-256color
outsmartin
set t_Co = 256 también se hace
outmartin
¿Algo de eso ayudó?
Sardathrion - Restablece a Mónica el
Lamentablemente no. ¿Qué quieres decir exactamente con reasignar ctrl + flecha? Los uso ya reasignados para cambiar pestañas en vim.
Outmartin
está mapeado así: map <C-Right> gt
outsmartin