Форма курсора под 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 (составлено с + cursorshape)
  • эмулятор терминала: mintty 1.1.3
  • используется в Cygwin Terminal или 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 побег последовательность iTerm? Работает только в iTerm с некоторыми предостережениями: iTerm Doc > iTerm2 поддерживает несколько нестандартных кодов выхода. Они могут не работать должным образом в tmux или screen и могут иметь неизвестные эффекты на других эмуляторах терминала. Действовать с осторожностью.
Алекс Кролл
1
Я еще раз проверил свой софт, и все версии совпадают с вашими, но $ TERM в опциях mintty находится 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 не отправляет изменяющие курсор коды перехода в эмулятор терминала. Вам нужно обернуть желаемые escape-коды в специальную последовательность, которая сообщает tmux, что он должен передать его на внешний терминал.

Последовательность, в которую нужно обернуть вашу escape-последовательность: \<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, поэтому я не смог протестировать этот код. Но метод работал для меня (я просто обернул другие escape-коды, которые подходят моему терминалу).

avivr
источник
Это даже лучше - работает без изменения моего .bashrc. Спасибо.
Коссак
3

Правильное значение $TERMпеременной среды очень важно. Убедитесь, что он отличается от screen-256color. Установите это, xterm-256colorнапример.

Алекс Кролл
источник