Перво- наперво, эти настройки t_ti
и t_te
выглядят хорошо.
Но проверить ослепительно очевидное (извините)...
Когда вы говорите ^[
, это должен быть один управляющий символ (Escape), а не два символа (^
и [
). Я не уверен, как проверить это конкретно из vim, но на моем vim с помощью :set t_ti?
он показывает ^[
другим цветом, что говорит о том, что это один управляющий символ.
Кроме того, вы не упомянули, какой эмулятор терминала и какую платформу вы используете.
Это может иметь отношение, и вы должны указать это в своем вопросе вместе с версиями vim и tmux. Однако, если вы говорите, что вы уже можете продемонстрировать оба типа поведения (желаемое и нежелательное) в одном и том же проблемном терминале, используя команду less
(без и с -X
, соответственно), то это может означать, что ваш эмулятор терминала и настройки tmux верны, и мое подозрение направлено на vim.
Подтвердите это следующим образом (помните, что ^[
должен быть введен как управляющий символ, например, Ctrl-v
и Escape
):
less /etc/hosts # should use alternate screen (desired)
less -X /etc/hosts # should leave it's output on screen (undesired)
echo -n "^[[?1049h"; less -X /etc/hosts; echo -n "^[[?1049l"
# should use alternate screen (desired)
Если эта последняя команда дает желаемое поведение с меньшими затратами. Попробуйте тот же подход с vim:
echo -n "^[[?1049h"; vim /etc/hosts; echo -n "^[[?1049l"
# should use alternate screen (desired)
После того, как вы выйдете из vim, экран должен вернуться к его предыдущему содержимому (желаемое поведение). Если это так, то вы можете использовать это для создания очень грязного обходного пути с псевдонимом или сценарием-оболочкой. Но если вы достигнете этой стадии в своей диагностике, это почти наверняка проблема с vim или частью его конфигурации, не отправляющей последовательность t_te при выходе, и я бы начал с удаления моих .vimrc и .vim и тестирования с чистым конфигом:
cd
mv .vimrc .vimrc-safe
mv .vim .vim-safe
Тогда это бинарное время, которое должно быть весело. :-) Надеюсь это поможет.