O cursor normal e modo de inserção do Vim não muda na tela GNU


9

Eu uso o vim em alguns contextos diferentes; Normalmente, eu gosto de colocar isso no meu .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"

Isso faz com que o modo de inserção e o modo normal usem cursores diferentes (o modo normal é um cursor de bloco e o modo de inserção é uma linha vertical). Isso funciona para mim no mintty com cygwin, xterm e também rvxt muito bem. No entanto, sempre que uso a tela GNU, meu cursor não muda mais. Eu vi referências para corrigir isso no tmux (por exemplo, aqui: Forma do cursor no vim + tmux ), mas nada que eu tentei no Screen funcionou. Por enquanto, estou usando isso no meu .vimrc:

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

Isso faz com que, no modo de inserção, a linha atual seja sublinhada (o :has("gui_running")impede de entrar em vigor no gvim). Também uso set laststatus=2para manter a barra de status na parte inferior, o que também ajuda. Eu só queria que funcionasse um pouco mais como o gvim. Alguém encontrou uma solução para isso?


Parece que não posso movê-lo pessoalmente no meu representante n00b ( meta.stackexchange.com/questions/85017/… ), mas estou totalmente pronto para ser movido (não sabia que havia um canal Vi; aplausos por )
ZeroG 12/04

Respostas:


4

Acho que descobri, embora não compreenda totalmente a correção. Parece funcionar para mintty, xterm e 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

Isso depende do seu screenrc ter algo como "term screen" ou "term screen-256color" para que o arquivo vimrc possa identificar em qual terminal você está. O único terminal restante que uso regularmente onde isso não funciona é o PuTTY, mas acho que literalmente não suporta comandos do terminal para alterar a forma do cursor. Mintty foi bifurcado do PuTTY há algum tempo e vi aqui ( https://www.cygwin.com/ml/cygwin-announce/2009-07/msg00011.html ) que o suporte ao DECSCUSR foi adicionado ao mintty após esse garfo.

Isso é bom o suficiente para mim - se eu estiver inserindo uma máquina em que realmente quero meu cursor de bloco no Vim, acho que posso cygwin / ssh ou PuTTY / XMing / rxvt passar por ela em vez de PuTTY.


2
Para mim, echo &termsaídas screenEntão eu mudei a expressão regular na linha de partida if &term ...para screen.*.
Kenny Evitt

1
@KennyEvitt o mesmo para mim no MacOS. Boa pegada!
Ivan Temchenko 28/10
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.