Vim normal y el cursor del modo insertar no cambian en la pantalla GNU

9

Yo uso vim en algunos contextos diferentes; típicamente, me gusta poner esto en mi .vimrc:

let &t_ti.="\<Esc>[1 q"
let &t_SI.="\<Esc>[5 q"
let &t_EI.="\<Esc>[1 q"
let &t_te.="\<Esc>[0 q"

Esto hace que la inserción y el modo normal usen diferentes cursores (el modo normal es un cursor de bloque y el modo de inserción es una línea vertical). Esto funciona para mí en mintty con cygwin, xterm y también rvxt muy bien. Sin embargo, cada vez que uso la pantalla GNU, mi cursor ya no cambia. He visto referencias para arreglar esto para tmux (por ejemplo, aquí: Forma del cursor bajo vim + tmux ), pero nada de lo que he intentado para Screen ha funcionado. Por ahora, estoy usando esto en mi .vimrc:

"Underline currently edited line
if !has("gui_running")
    :autocmd InsertEnter * set cul
    :autocmd InsertLeave * set nocul
endif

Eso hace que cuando esté en modo de inserción, la línea actual esté subrayada ( :has("gui_running")esto evita que surta efecto en gvim). También uso set laststatus=2para mantener la barra de estado en la parte inferior, lo que también ayuda. Solo desearía que funcionara un poco más como gvim. Alguien ha encontrado una solución para esto?

ZeroG
fuente
Parece que no puedo moverlo yo mismo en mi representante n00b ( meta.stackexchange.com/questions/85017/… ), pero estoy totalmente dispuesto a que se mueva (no me di cuenta de que había un canal Vi; aplausos por eso!)
ZeroG

Respuestas:

4

Creo que lo descubrí, aunque no entiendo totalmente la solución. Esto parece funcionar para mintty, xterm y rxvt:

" Set up vertical vs block cursor for insert/normal mode
if &term =~ "screen."
    let &t_ti.="\eP\e[1 q\e\\"
    let &t_SI.="\eP\e[5 q\e\\"
    let &t_EI.="\eP\e[1 q\e\\"
    let &t_te.="\eP\e[0 q\e\\"
else
    let &t_ti.="\<Esc>[1 q"
    let &t_SI.="\<Esc>[5 q"
    let &t_EI.="\<Esc>[1 q"
    let &t_te.="\<Esc>[0 q"
endif

Esto se apoya en que su screenrc tenga algo como "term screen" o "term screen-256color" para que el archivo vimrc pueda identificar en qué terminal está. El único terminal restante que uso regularmente donde esto no funciona es PuTTY, pero creo que literalmente no admite comandos de terminal para cambiar la forma del cursor. Mintty se bifurcó de PuTTY hace un tiempo, y vi aquí ( https://www.cygwin.com/ml/cygwin-announce/2009-07/msg00011.html ) que el soporte de DECSCUSR se agregó a mintty después de esa bifurcación.

Esto es lo suficientemente bueno para mí: si me estoy metiendo en una máquina donde realmente quiero mi cursor de bloque en Vim, creo que puedo cygwin / ssh o PuTTY / XMing / rxvt a través de él en lugar de PuTTY.

ZeroG
fuente
2
Para mí, echo &termsalidas screenAsí que cambió la expresión regular en la línea de salida if &term ...a screen.*.
Kenny Evitt
1
@KennyEvitt lo mismo para mí en MacOS. ¡Buena atrapada!
Ivan Temchenko