Форма курсору під vim + tmux


14

Як я можу мати різні форми курсору під час запуску vim всередині tmux під cygwin?

БЕЗ tmux цих рядків було б достатньо, щоб досягти того, що я хочу:

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

Але якось мій tmux порушує його - курсор має форму блоку незалежно від того, у якому режимі vim я перебуваю.

Мої характеристики:

  • Windows 7 x64
  • Cygwin x86
  • TMUX 1.9a
  • Vim 7.4.726 (укладено з + курсорною формою)
  • термінальний емулятор: монетний двір 1.1.3
  • використовується в терміналі Cygwin або Cmder (у будь-якому випадку, форми курсору працюють лише без TMUX)
  • echo $TERMдає мені screen-256color(в TMUX і поза ним, тому що я маю export TERM=screen-256colorв своєму.bashrc
  • .tmux.conf містить:
    set -g default-terminal "screen-256color" setw -g xterm-keys on

Що я намагався вже без успіху:

  • export TERM=xterm
  • export TERM=vt100
  • "клацніть правою кнопкою миші на панелі> Опції> Виглядає> Курсор" (він постійно змінює курсор, режими vim все ще не змінюють його)

Vim, складений за допомогою функції "+ cursorshape"?
Алекс Кролл

Перевірте налаштування терміналу. І це питання схоже на superuser.com/questions/634326/…
Алекс Кролл

Який термінальний емулятор ви використовуєте? Ви пробували щось подібне let &t_SI = "\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=1;BlinkingCursorEnabled=1\x7\<Esc>\\"і let &t_EI = "\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=0;BlinkingCursorEnabled=0\x7\<Esc>\\"?
jjaderberg

@jjaderberg послідовність втечі iTerm? Працює лише в iTerm з деякими застереженнями: iTerm Doc > iTerm2 підтримує декілька нестандартних кодів виходу. Вони можуть не працювати належним чином у tmux або екрані та можуть мати невідомі ефекти на інших емуляторах терміналів. Продовжуйте обережно.
Алекс Кролл

1
Я ще раз перевіряю свою програму, і всі версії збігаються з вашими, але $ TERM у монетних варіантах знаходиться xterm-256colorвсередині tmux screen-256color. tmux має версію 1.9 (а ваша - 1.9a). Я запускаю vim всередині tmux vim -u NULL(-u NULL означає, що немає конфігурації). Форма курсора є блоком у будь-якому режимі, але коли я призначаю t_SIта t_EIперемикаю форму з блоку (звичайний режим) на I(режим вставки), як очікувалося. Чи можете ви спробувати запустити vim із порожнім .vimrc, без кольорових схем та плагінів?
Алекс Кролл

Відповіді:


11

Здається, проблема полягає в тому, що tmux не надсилає ваші зміни курсору евакуаційних кодів на емулятор терміналу. Вам потрібно загортати потрібні коди евакуації у спеціальній послідовності, яка повідомляє tmux, що він повинен передати його на зовнішній термінал.

Послідовність, в яку вам потрібно загорнути послідовність втечі, є \<Esc>Ptmux;\<Esc> ... \<Esc>\\( Джерело ). Це ...ваша послідовність втечі.

Отже, спробуйте зробити щось подібне у вашому .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

Я не використовую емулятор вашого терміналу чи cygwin, тому не зміг перевірити цей код. Але метод працював для мене (я просто загортав інші коди евакуації, які відповідають моєму терміналу).


Це ще краще - працює без зміни мого .bashrc. Дякую.
Коссак

3

Правильне значення $TERMзмінної середовища є дуже важливим. Переконайтеся, що воно відрізняється від screen-256color. xterm-256colorНаприклад, встановіть його .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.