Kształt kursora w vim + tmux

14

Jak mogę mieć różne kształty kursora podczas uruchamiania vima w tmuxie pod cygwinem?

BEZ tmux te linie wystarczyłyby, aby osiągnąć to, czego chcę:

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

Ale jakoś mój tmux go psuje - kursor ma kształt bloku bez względu na to, w jakim trybie vim jestem.

Moje specyfikacje:

  • Windows 7 x64
  • Cygwin x86
  • TMUX 1.9a
  • Vim 7.4.726 (skompilowany z + kursorem)
  • emulator terminala: mintty 1.1.3
  • używane w Cygwin Terminal lub Cmder (w obu kierunkach kształty kursorów działają tylko bez TMUX)
  • echo $TERMdaje mi screen-256color(w TMUX i poza nim, bo mam export TERM=screen-256colorw sobie.bashrc
  • .tmux.conf zawiera:
    set -g default-terminal "screen-256color" setw -g xterm-keys on

Co próbowałem już bez powodzenia:

  • export TERM=xterm
  • export TERM=vt100
  • „kliknij prawym przyciskiem myszy pasek> Opcje> Wygląd> Kursor” (trwale zmienia kursor, tryby vim nadal go nie zmieniają)
Kossak
źródło
Vim skompilowany z funkcją „+ cursorshape”?
Alex Kroll
Sprawdź ustawienia terminala. I to pytanie wygląda podobnie superuser.com/questions/634326/…
Alex Kroll
Z którego emulatora terminala korzystasz? Próbowałeś czegoś takiego jak let &t_SI = "\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=1;BlinkingCursorEnabled=1\x7\<Esc>\\"i let &t_EI = "\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=0;BlinkingCursorEnabled=0\x7\<Esc>\\"?
jjaderberg,
@jjaderberg Sekwencja ucieczki iTerm? Działa tylko w iTerm z pewnymi ostrzeżeniami: iTerm Doc > iTerm2 obsługuje kilka niestandardowych kodów ucieczki. Mogą one nie działać poprawnie w tmuxie lub ekranie i mogą mieć nieznany wpływ na inne emulatory terminali. Postępuj ostrożnie.
Alex Kroll
1
Sprawdziłem mój soft jeszcze raz i wszystkie wersje są takie same z twoją, ale $ TERM w opcjach miętowych jest xterm-256colorw tmuxie screen-256color. tmux ma wersję 1.9 (a twoja to 1.9a). Uruchomiłem vima w tmux vim -u NULL(-u NULL oznacza brak konfiguracji). Kształt kursora jest blokowany w dowolnym trybie, ale kiedy przypisuję t_SIi zmieniam t_EIkształt z bloku (tryb normalny) na I(tryb wstawiania) zgodnie z oczekiwaniami. Czy możesz spróbować uruchomić vim z pustym .vimrc, bez żadnych kolorów i wtyczek?
Alex Kroll

Odpowiedzi:

11

Wydaje się, że problem polega na tym, że tmux nie wysyła zmieniających kursor kodów specjalnych do emulatora terminala. Musisz zawinąć pożądane kody ucieczki w specjalną sekwencję, która mówi tmux, że powinien przekazać go do zewnętrznego terminalu.

Sekwencja, w której musisz zawinąć sekwencję ucieczki, to \<Esc>Ptmux;\<Esc> ... \<Esc>\\( Źródło ). To ...twoja sekwencja ucieczki.

Więc spróbuj zrobić coś takiego w swoim .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

Nie używam emulatora terminali ani cygwina, więc nie mogłem przetestować tego kodu. Ale metoda zadziałała dla mnie (właśnie zapakowałem inne kody ucieczki, które pasują do mojego terminala).

avivr
źródło
To jest jeszcze lepsze - działa bez zmiany mojego .bashrc. Dziękuję Ci.
Kossak
3

Prawidłowa wartość $TERMzmiennej środowiskowej jest bardzo ważna. Upewnij się, że różni się od screen-256color. Ustaw xterm-256colorna przykład na.

Alex Kroll
źródło