Forme de curseur sous vim + tmux

14

Comment puis-je avoir différentes formes de curseur lors de l'exécution de vim dans tmux sous cygwin?

SANS tmux ces lignes seraient suffisantes pour réaliser ce que je veux:

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

Mais en quelque sorte, mon tmux le brise - le curseur a la forme d'un bloc quel que soit le mode vim dans lequel je suis.

Mes spécifications:

  • Windows 7 x64
  • Cygwin x86
  • TMUX 1.9a
  • Vim 7.4.726 (compilé avec + cursorshape)
  • émulateur de terminal: mintty 1.1.3
  • utilisé dans Cygwin Terminal ou Cmder (dans les deux cas, les formes de curseur fonctionnent uniquement sans TMUX)
  • echo $TERMme donne screen-256color(dans TMUX et en dehors, parce que j'ai export TERM=screen-256colordans mon.bashrc
  • .tmux.conf contient:
    set -g default-terminal "screen-256color" setw -g xterm-keys on

Ce que j'ai déjà essayé sans succès:

  • export TERM=xterm
  • export TERM=vt100
  • "clic droit sur la barre> Options> Apparences> Curseur" (il change le curseur de façon permanente, les modes vim ne le changent toujours pas)
Kossak
la source
Vim compilé avec la fonction '+ cursorshape'?
Alex Kroll
Vérifiez les paramètres du terminal. Et cette question ressemble à superuser.com/questions/634326/…
Alex Kroll
Quel émulateur de terminal utilisez-vous? Avez-vous essayé quelque chose comme let &t_SI = "\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=1;BlinkingCursorEnabled=1\x7\<Esc>\\"et let &t_EI = "\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=0;BlinkingCursorEnabled=0\x7\<Esc>\\"?
jjaderberg
La séquence d'échappement de @jjaderberg iTerm? Fonctionne uniquement dans iTerm avec quelques précautions: iTerm Doc > iTerm2 prend en charge plusieurs codes d'échappement non standard. Ceux-ci peuvent ne pas fonctionner correctement dans tmux ou screen, et peuvent avoir des effets inconnus sur d'autres émulateurs de terminal. Procéder avec prudence.
Alex Kroll
1
J'ai vérifié mon logiciel une fois de plus et toutes les versions sont les mêmes que la vôtre, mais $ TERM dans les options mintty est xterm-256colordans tmux screen-256color. tmux a la version 1.9 (et la vôtre est 1.9a). J'ai lancé vim dans tmux vim -u NULL(-u NULL signifie pas de configuration). La forme du curseur est un bloc dans n'importe quel mode, mais lorsque j'affecte t_SIet que je t_EIpasse du bloc (mode normal) à I(mode d'insertion) comme prévu. Pouvez-vous essayer de lancer vim avec .vimrc vide, sans aucun schéma de couleurs ni plug-in?
Alex Kroll

Réponses:

11

Il semble que le problème soit que tmux n'envoie pas vos codes d'échappement de changement de curseur à l'émulateur de terminal. Vous devez envelopper vos codes d'échappement souhaités dans une séquence spéciale qui indique à tmux qu'il doit le transmettre au terminal externe.

La séquence dans laquelle vous devez encapsuler votre séquence d'échappement est \<Esc>Ptmux;\<Esc> ... \<Esc>\\( Source ). C'est ...votre séquence d'évasion.

Alors, essayez de faire quelque chose comme ça dans votre .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

Je n'utilise pas votre émulateur de terminal ou cygwin, je n'ai donc pas pu tester ce code. Mais la méthode a fonctionné pour moi (j'ai simplement encapsulé d'autres codes d'échappement qui conviennent à mon terminal).

avivr
la source
C'est encore mieux - fonctionne sans changer mon .bashrc. Je vous remercie.
Kossak
3

La valeur correcte de $TERMla variable d'environnements est très importante. Assurez-vous qu'il est différent de screen-256color. Réglez-le xterm-256colorpar exemple.

Alex Kroll
la source