Vim normal und Cursor für den Einfügemodus ändern sich nicht im GNU-Bildschirm

9

Ich benutze vim in verschiedenen Kontexten. Normalerweise schreibe ich dies gerne in mein .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"

Dadurch werden im Einfüge- und Normalmodus unterschiedliche Cursor verwendet (Normalmodus ist ein Blockcursor und Einfügemodus ist eine vertikale Linie). Dies funktioniert für mich in Minze mit Cygwin, Xterm und auch Rvxt ganz gut. Wenn ich jedoch den GNU-Bildschirm verwende, ändert sich mein Cursor nicht mehr. Ich habe Hinweise zur Behebung dieses Problems für tmux gesehen (zum Beispiel hier: Cursorform unter vim + tmux ), aber nichts, was ich für Screen versucht habe, hat funktioniert. Im Moment verwende ich dies in meinem .vimrc:

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

:has("gui_running")Dadurch wird die aktuelle Zeile im Einfügemodus unterstrichen (dies verhindert, dass sie in gvim wirksam wird). Ich verwende es auch set laststatus=2, um die Statusleiste unten zu halten, was ebenfalls hilfreich ist. Ich wünschte nur, es würde ein bisschen mehr wie gvim funktionieren. Hat jemand eine Lösung dafür gefunden?

ZeroG
quelle
Scheint, als könnte ich es bei meinem n00b-Repräsentanten ( meta.stackexchange.com/questions/85017/… ) nicht selbst verschieben , aber ich bin total bereit dafür , dass es verschoben wird (ich wusste nicht, dass es einen Vi-Kanal gibt; Prost für das!)
ZeroG

Antworten:

4

Ich glaube, ich habe es herausgefunden, obwohl ich das Update nicht ganz verstehe. Dies scheint für mintty, xterm und rxvt zu funktionieren:

" 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

Dies hängt davon ab, dass Ihr screenrc so etwas wie "term screen" oder "term screen-256color" hat, damit die vimrc-Datei erkennen kann, auf welchem ​​Terminal Sie sich befinden. Das einzige verbleibende Terminal, das ich regelmäßig benutze, wenn dies nicht funktioniert, ist PuTTY, aber ich denke, es unterstützt buchstäblich keine Terminalbefehle zum Ändern der Cursorform. Mintty wurde vor einiger Zeit von PuTTY gegabelt, und ich habe hier ( https://www.cygwin.com/ml/cygwin-announce/2009-07/msg00011.html ) gesehen, dass DECSCUSR-Unterstützung nach dieser Gabelung zu mintty hinzugefügt wurde.

Das ist gut genug für mich - wenn ich in eine Maschine ssh'ing, in der ich wirklich meinen Blockcursor in Vim haben möchte, kann ich mich entweder cygwin / ssh oder PuTTY / XMing / rxvt durch ihn bewegen, anstatt PuTTY.

ZeroG
quelle
2
Für mich echo &termAusgänge, screenalso habe ich den regulären Ausdruck in der Zeile beginnend if &term ...mit geändert screen.*.
Kenny Evitt
1
@KennyEvitt gleich für mich unter MacOS. Guter Fang!
Ivan Temchenko