Forma del cursor debajo de vim + tmux


14

¿Cómo puedo tener diferentes formas de cursor cuando ejecuto vim dentro de tmux bajo cygwin?

SIN tmux, estas líneas serían suficientes para lograr lo que quiero:

let &t_SI = "\e[5 q"
let &t_EI = "\e[2 q"

Pero de alguna manera mi tmux lo rompe: el cursor tiene forma de bloque sin importar en qué modo vim esté.

Mis especificaciones:

  • Windows 7 x64
  • Cygwin x86
  • TMUX 1.9a
  • Vim 7.4.726 (compilado con + cursores)
  • emulador de terminal: mintty 1.1.3
  • utilizado en Cygwin Terminal o Cmder (de cualquier manera, las formas de cursor funcionan solo sin TMUX)
  • echo $TERMme da screen-256color(en TMUX y fuera de él, porque tengo export TERM=screen-256coloren mi.bashrc
  • .tmux.conf contiene:
    set -g default-terminal "screen-256color" setw -g xterm-keys on

Lo que probé ya sin éxito:

  • export TERM=xterm
  • export TERM=vt100
  • "clic derecho en la barra> Opciones> Apariencia> Cursor" (cambia el cursor permanentemente, los modos vim aún no lo cambian)

¿Vim compilado con la función '+ cursorshape'?
Alex Kroll

Verifique la configuración del terminal. Y esta pregunta es similar superuser.com/questions/634326/…
Alex Kroll

¿Qué emulador de terminal estás usando? ¿Has probado algo como let &t_SI = "\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=1;BlinkingCursorEnabled=1\x7\<Esc>\\"y let &t_EI = "\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=0;BlinkingCursorEnabled=0\x7\<Esc>\\"?
jjaderberg

¿Secuencia de escape de @jjaderberg iTerm? Funciona solo en iTerm con algunas precauciones: iTerm Doc > iTerm2 admite varios códigos de escape no estándar. Es posible que no funcionen correctamente en tmux o pantalla, y pueden tener efectos desconocidos en otros emuladores de terminal. Proceda con precaución.
Alex Kroll

1
Revisé mi soft una vez más y todas las versiones son iguales a las suyas, pero $ TERM en mintty options está xterm-256colordentro de tmux screen-256color. tmux tiene la versión 1.9 (y su es 1.9a). He lanzado vim dentro de tmux vim -u NULL(-u NULL significa que no hay configuración). La forma del cursor es bloque en cualquier modo, pero cuando asigno t_SIy t_EIcambio de forma de bloque (modo normal) a I(modo de inserción) como se esperaba. ¿Puedes intentar iniciar vim con .vimrc vacío, sin esquemas de colores ni complementos?
Alex Kroll

Respuestas:


11

Parece que el problema es que tmux no envía sus códigos de escape que cambian el cursor al emulador de terminal. Debe ajustar sus códigos de escape deseados en una secuencia especial que le dice a tmux que debe pasarlo a la terminal externa.

La secuencia en la que necesita envolver su secuencia de escape es \<Esc>Ptmux;\<Esc> ... \<Esc>\\( Fuente ). El ...es tu secuencia de escape.

Entonces, intenta hacer algo como esto en tu .vimrc:

if exists('$TMUX')
    let &t_SI = "\<Esc>Ptmux;\<Esc>\e[5 q\<Esc>\\"
    let &t_EI = "\<Esc>Ptmux;\<Esc>\e[2 q\<Esc>\\"
else
    let &t_SI = "\e[5 q"
    let &t_EI = "\e[2 q"
endif

No uso su emulador de terminal o cygwin, por lo que no pude probar este código. Pero el método funcionó para mí (acabo de envolver otros códigos de escape que se adaptan a mi terminal).


Esto es aún mejor: funciona sin cambiar mi .bashrc. Gracias.
Kossak

3

El valor correcto de $TERMla variable de entornos es muy importante. Asegúrese de que sea diferente de screen-256color. Ajústelo a, xterm-256colorpor ejemplo.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.