Le curseur de mode normal et d'insertion de Vim ne change pas dans l'écran GNU


9

J'utilise vim dans quelques contextes différents; généralement, j'aime mettre ceci dans mon .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"

Cela fait en sorte que l'insertion et le mode normal utilisent des curseurs différents (le mode normal est un curseur de bloc et le mode d'insertion est une ligne verticale). Cela fonctionne pour moi dans mentinty avec cygwin, xterm et aussi rvxt très bien. Cependant, chaque fois que j'utilise l'écran GNU, mon curseur ne change plus. J'ai vu des références à ce problème pour tmux (par exemple ici: forme de curseur sous vim + tmux ), mais rien de ce que j'ai essayé pour Screen n'a fonctionné. Pour l'instant, je l'utilise dans mon .vimrc:

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

Cela fait en sorte qu'en mode insertion, la ligne actuelle est soulignée (cela l' :has("gui_running")empêche de prendre effet dans gvim). J'utilise également set laststatus=2pour garder la barre d'état en bas, ce qui aide également. Je souhaite juste que cela fonctionne un peu plus comme gvim. Quelqu'un a-t-il trouvé une solution à cela?


Il semble que je ne puisse pas le déplacer moi-même chez mon représentant n00b ( meta.stackexchange.com/questions/85017/… ), mais je suis tout à fait disposé à ce qu'il soit déplacé (je ne savais pas qu'il y avait une chaîne Vi; bravo pour ça!)
ZeroG

Réponses:


4

Je pense que je l'ai compris, bien que je ne comprenne pas totalement le correctif. Cela semble fonctionner pour mintty, xterm et 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

Cela s'appuie sur votre screenrc ayant quelque chose comme "term screen" ou "term screen-256color" afin que le fichier vimrc puisse identifier sur quel terminal vous êtes. Le seul terminal restant que j'utilise régulièrement lorsque cela ne fonctionne pas est PuTTY, mais je pense qu'il ne prend pas en charge les commandes de terminal pour changer la forme du curseur. Mintty a été bifurqué de PuTTY il y a quelque temps, et j'ai vu ici ( https://www.cygwin.com/ml/cygwin-announce/2009-07/msg00011.html ) que le support DECSCUSR a été ajouté à mintty après cette fourchette.

C'est assez bon pour moi - si je ssh'ing dans une machine où je veux vraiment mon curseur de bloc dans Vim, je suppose que je peux soit cygwin / ssh ou PuTTY / XMing / rxvt mon chemin à travers elle au lieu de PuTTY.


2
Pour moi, les echo &termsorties screen, j'ai donc changé l'expression rationnelle dans la ligne commençant if &term ...par screen.*.
Kenny Evitt

1
@KennyEvitt même pour moi sur MacOS. Bonne prise!
Ivan Temchenko
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.