Vim normale e il cursore della modalità di inserimento non cambia nella schermata GNU


9

Uso vim in diversi contesti; in genere, mi piace metterlo nel mio .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"

Questo fa sì che insert e la modalità normale utilizzino cursori diversi (la modalità normale è un cursore a blocchi e la modalità di inserimento è una linea verticale). Per me funziona perfettamente con cygwin, xterm e anche rvxt. Tuttavia, ogni volta che uso lo schermo GNU, il mio cursore non cambia più. Ho visto i riferimenti alla correzione di questo per tmux (ad esempio qui: Cursor shape in vim + tmux ), ma nulla di ciò che ho provato per Screen ha funzionato. Per ora, lo sto usando nel mio .vimrc:

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

Questo fa sì che quando si è in modalità inserimento la linea corrente è sottolineata ( :has("gui_running")ciò impedisce che abbia effetto in gvim). Uso anche set laststatus=2per mantenere la barra di stato in basso, il che aiuta anche. Vorrei solo che funzionasse un po 'di più come gvim. Qualcuno ha trovato una soluzione per questo?


Sembra che non riesca a spostarlo da solo sul mio rappresentante n00b ( meta.stackexchange.com/questions/85017/… ), ma sono totalmente pronto per lo spostamento (non mi rendevo conto che ci fosse un canale Vi; salute per quello!)
ZeroG

Risposte:


4

Penso di averlo capito, anche se non capisco perfettamente la soluzione. Questo sembra funzionare per mintty, xterm e 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

Questo si appoggia sullo schermo con qualcosa come "termine schermo" o "termine schermo-256colore" in modo che il file vimrc possa identificare su quale terminale ci si trova. L'unico terminale rimanente che uso regolarmente quando questo non funziona è PuTTY, ma penso che letteralmente non supporti i comandi del terminale per cambiare la forma del cursore. Mintty è stato biforcuto da PuTTY qualche tempo fa e ho visto qui ( https://www.cygwin.com/ml/cygwin-announce/2009-07/msg00011.html ) che il supporto DECSCUSR è stato aggiunto a mintty dopo quel fork.

Questo è abbastanza buono per me - se sto entrando in una macchina in cui voglio davvero il mio cursore a blocchi in Vim, immagino che posso farlo attraverso Cygwin / ssh o PuTTY / XMing / rxvt invece di PuTTY.


2
Per me, echo &termoutput screencosì ho cambiato il regexp nella riga che inizia if &term ...a screen.*.
Kenny Evitt,

1
@KennyEvitt stesso per me su MacOS. Buona pesca!
Ivan Temchenko,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.