Forma do cursor sob vim + tmux

14

Como posso ter diferentes formas de cursor ao executar o vim dentro do tmux no cygwin?

SEM tmux essas linhas seriam suficientes para alcançar o que eu quero:

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

Mas de alguma forma o meu tmux o quebra - o cursor tem forma de bloco, não importa em que modo vim eu esteja.

Minhas especificações:

  • Windows 7 x64
  • Cygwin x86
  • TMUX 1.9a
  • Vim 7.4.726 (compilado com + cursorshape)
  • emulador de terminal: mintty 1.1.3
  • usado no Cygwin Terminal ou Cmder (de qualquer maneira, as formas do cursor funcionam apenas sem o TMUX)
  • echo $TERMme dá screen-256color(no TMUX e fora dele, porque eu tenho export TERM=screen-256colorno meu.bashrc
  • .tmux.conf contém:
    set -g default-terminal "screen-256color" setw -g xterm-keys on

O que eu tentei já sem sucesso:

  • export TERM=xterm
  • export TERM=vt100
  • "clique com o botão direito na barra> Opções> Looks> Cursor" (ele muda o cursor permanentemente, os modos vim ainda não o alteram)
Kossak
fonte
Vim compilado com o recurso '+ cursorshape'?
Alex Kroll
Verifique as configurações do terminal. E esta questão é semelhante superuser.com/questions/634326/...
Alex Kroll
Qual emulador de terminal você está usando? Você já tentou algo como let &t_SI = "\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=1;BlinkingCursorEnabled=1\x7\<Esc>\\"e let &t_EI = "\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=0;BlinkingCursorEnabled=0\x7\<Esc>\\"?
Jjaderberg # 25/15
@jjaderberg A sequência de escape do iTerm? Funciona apenas no iTerm com algumas precauções: O iTerm Doc > iTerm2 suporta vários códigos de escape não padrão. Eles podem não funcionar corretamente no tmux ou na tela e podem ter efeitos desconhecidos em outros emuladores de terminal. Prossiga com cuidado.
Alex Kroll
1
Verifiquei meu software mais uma vez e todas as versões são iguais às suas, mas $ TERM nas opções mintty está xterm-256colordentro do tmux screen-256color. O tmux possui a versão 1.9 (e a sua é a 1.9a). Eu iniciei o vim dentro do tmux vim -u NULL(-u NULL significa nenhuma configuração). A forma do cursor é um bloco em qualquer modo, mas quando atribuo t_SIe t_EIformato alterno do bloco (modo normal) para I(modo de inserção) conforme o esperado. Você pode tentar iniciar o vim com .vimrc vazio, sem esquemas e plugins de cores?
Alex Kroll

Respostas:

11

Parece que o problema é que o tmux não envia os códigos de escape que alteram o cursor para o emulador de terminal. Você precisa agrupar os códigos de escape desejados em uma sequência especial que diz ao tmux que deve transmiti-lo ao terminal externo.

A sequência na qual você precisa agrupar sua sequência de escape é \<Esc>Ptmux;\<Esc> ... \<Esc>\\( Origem ). A ...é a sua sequência de fuga.

Portanto, tente fazer algo assim no seu .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

Como não uso o emulador de terminal ou o cygwin, não pude testar esse código. Mas o método funcionou para mim (acabei de incluir outros códigos de escape adequados ao meu terminal).

avivr
fonte
Isso é ainda melhor - funciona sem alterar o meu .bashrc. Obrigado.
Kossak
3

O valor correto da $TERMvariável de ambientes é muito importante. Verifique se é diferente de screen-256color. Defina como xterm-256colorpor exemplo.

Alex Kroll
fonte