Cursorform unter vim + tmux


14

Wie kann ich verschiedene Cursorformen haben, wenn ich vim in tmux unter cygwin laufen lasse?

OHNE tmux würden diese Zeilen ausreichen, um das zu erreichen, was ich will:

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

Aber irgendwie bricht mein tmux es - der Cursor hat eine Blockform, egal in welchem ​​vim-Modus ich mich befinde.

Meine Angaben:

  • Windows 7 x64
  • Cygwin x86
  • TMUX 1.9a
  • Vim 7.4.726 (kompiliert mit + cursorshape)
  • Terminalemulator: Mintty 1.1.3
  • In Cygwin Terminal oder Cmder verwendet (in beiden Fällen funktionieren Cursorformen nur ohne TMUX)
  • echo $TERMgibt mir screen-256color(in TMUX und ausserhalb davon, weil ich export TERM=screen-256colorin meinem.bashrc
  • .tmux.conf enthält:
    set -g default-terminal "screen-256color" setw -g xterm-keys on

Was ich schon erfolglos ausprobiert habe :

  • export TERM=xterm
  • export TERM=vt100
  • "Rechtsklick auf die Leiste> Optionen> Aussehen> Cursor" (ändert den Cursor permanent, VIM-Modi ändern ihn immer noch nicht)

Vim kompiliert mit "+ Cursorshape" -Funktion?
Alex Kroll

Überprüfen Sie die Terminaleinstellungen. Und diese Frage sieht ähnlich aus superuser.com/questions/634326/…
Alex Kroll

Welchen Terminalemulator verwenden Sie? Hast du sowas schon probiert let &t_SI = "\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=1;BlinkingCursorEnabled=1\x7\<Esc>\\"und let &t_EI = "\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=0;BlinkingCursorEnabled=0\x7\<Esc>\\"?
jjaderberg

@jjaderberg iTerms Escape-Sequenz? Funktioniert nur in iTerm mit einigen Vorsichtsmaßnahmen: iTerm Doc > iTerm2 unterstützt mehrere nicht standardmäßige Escape-Codes. Diese funktionieren möglicherweise nicht richtig in tmux oder screen und haben möglicherweise unbekannte Auswirkungen auf andere Terminalemulatoren. Mit Vorsicht fortfahren.
Alex Kroll

1
Ich habe meine Software noch einmal überprüft und alle Versionen sind mit Ihren identisch, aber $ TERM in Mintty-Optionen ist xterm-256colorin tmux enthalten screen-256color. tmux hat Version 1.9 (und Ihre ist 1.9a). Ich habe vim in tmux gestartet vim -u NULL(-u NULL bedeutet keine Konfiguration). Die Cursorform ist in jedem Modus blockiert, aber wenn ich sie zuordne t_SIund t_EIformiere, wechsle ich Iwie erwartet vom Block (normaler Modus) zum (Einfügemodus). Können Sie versuchen, vim mit leerem .vimrc ohne Farbschemata und Plugins zu starten?
Alex Kroll

Antworten:


11

Es scheint das Problem zu sein, dass tmux keine Escape-Codes an den Terminal-Emulator sendet, die den Cursor ändern. Sie müssen Ihre gewünschten Escape-Codes in eine spezielle Sequenz einwickeln, die tmux mitteilt, dass sie an das äußere Terminal weitergeleitet werden sollen.

Die Sequenz, in die Sie Ihre Escape-Sequenz einwickeln müssen, lautet \<Esc>Ptmux;\<Esc> ... \<Esc>\\( Source ). Das ...ist deine Fluchtsequenz.

Also, versuchen Sie in Ihrem so etwas wie dies zu tun .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

Ich verwende weder Ihren Terminal-Emulator noch Cygwin, daher konnte ich diesen Code nicht testen. Aber die Methode funktionierte für mich (ich habe gerade andere Escape-Codes eingepackt, die zu meinem Terminal passen).


Das ist noch besser - funktioniert ohne meine zu ändern .bashrc. Vielen Dank.
Kossak

3

Der korrekte Wert der $TERMUmgebungsvariablen ist sehr wichtig. Stellen Sie sicher, dass es sich von unterscheidet screen-256color. Stellen Sie es xterm-256colorzum Beispiel auf.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.