Forma del cursore sotto vim + tmux


14

Come posso avere diverse forme di cursore quando eseguo vim all'interno di tmux sotto cygwin?

SENZA queste linee sarebbero sufficienti per ottenere ciò che voglio:

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

Ma in qualche modo il mio tmux lo rompe - il cursore ha la forma di un blocco, indipendentemente dalla modalità vim in cui mi trovo.

Le mie specifiche:

  • Windows 7 x64
  • Cygwin x86
  • TMUX 1.9a
  • Vim 7.4.726 (compilato con + cursorshape)
  • emulatore di terminale: conio 1.1.3
  • utilizzato in Cygwin Terminal o Cmder (in entrambi i casi, le forme del cursore funzionano solo senza TMUX)
  • echo $TERMmi dà screen-256color(in TMUX e al di fuori di esso, perché ho export TERM=screen-256colornel mio.bashrc
  • .tmux.conf contiene:
    set -g default-terminal "screen-256color" setw -g xterm-keys on

Cosa ho provato già senza successo:

  • export TERM=xterm
  • export TERM=vt100
  • "tasto destro sulla barra> Opzioni> Aspetti> Cursore" (cambia il cursore in modo permanente, le modalità vim non lo cambiano ancora)

Vim compilato con la funzione '+ cursorshape'?
Alex Kroll,

Controlla le impostazioni del terminale. E questa domanda sembra simile superuser.com/questions/634326/…
Alex Kroll,

Quale emulatore di terminale stai usando? Hai provato qualcosa di simile 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,

@jjaderberg La sequenza di escape di iTerm? Funziona solo su iTerm con alcune precauzioni: iTerm Doc > iTerm2 supporta diversi codici di escape non standard. Questi potrebbero non funzionare correttamente in tmux o schermo e potrebbero avere effetti sconosciuti su altri emulatori di terminali. Procedi con cautela.
Alex Kroll,

1
Ho controllato il mio software ancora una volta e tutte le versioni sono uguali alle tue ma $ TERM nelle opzioni di menta è xterm-256colordentro tmux screen-256color. tmux ha la versione 1.9 (e la tua è 1.9a). Ho lanciato vim all'interno di tmux vim -u NULL(-u NULL significa nessuna configurazione). La forma del cursore viene bloccata in qualsiasi modalità, ma quando assegno t_SIe t_EImodifico il passaggio dal blocco (modalità normale) a I(modalità inserimento) come previsto. Puoi provare a lanciare vim con .vimrc vuoto, senza coloriti e plugin?
Alex Kroll,

Risposte:


11

Sembra che il problema sia che tmux non invia i codici di escape che cambiano cursore all'emulatore di terminale. Devi avvolgere i tuoi codici di escape desiderati in una sequenza speciale che dice a tmux che dovrebbe passarli al terminale esterno.

La sequenza che devi includere nella sequenza di escape è \<Esc>Ptmux;\<Esc> ... \<Esc>\\( Sorgente ). Questa ...è la tua sequenza di fuga.

Quindi, prova a fare qualcosa del genere nel tuo .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

Non uso il tuo emulatore di terminale o cygwin, quindi non ho potuto testare questo codice. Ma il metodo ha funzionato per me (ho appena avvolto altri codici di escape adatti al mio terminale).


Questo è ancora meglio - funziona senza cambiare il mio .bashrc. Grazie.
Kossak,

3

Il valore corretto della $TERMvariabile ambienti è molto importante. Assicurarsi che sia diverso da screen-256color. Impostalo su xterm-256colorper esempio.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.