Vim: Разница между t_Co=256 и term=xterm-256color в сочетании с TMUX
Я тестирую различные терминалы, которые я склонен использовать для SSH, в Linux-боксы, на которых у меня установлен Tmux.
По сути, я заметил это поведение и надеюсь, что кто-нибудь сможет объяснить, что происходит. Теперь может быть так, что это специфическое поведение, которое влияет на приложение Prompt.
Я использую Vim в Tmux, и в приложении Panic's Prompt на моем iPhone5 у меня было такое поведение, что 256 цветов не были включены, когда .vimrc
установить цвета с помощью set t_Co=256
директивы. Здесь Vim правильно отображал цвета, когда он не запускался через Tmux. Кроме того, Terminal.app в OS X правильно отображал цвета (к сожалению, я не проверял PuTTY на Windows) с Vim в Tmux.
Тогда я поменялся set t_Co=256
за set term=xterm-256color
и теперь цвета работают при использовании Vim через Tmux.
Обратите внимание, что я проверил оба set -g default-terminal "xterm-256color"
а также set -g default-terminal "screen-256color"
настройки для Tmux и это изменение не повлияло на поведение.
2 ответа
Когда вы не используете tmux
или же screen
вам нужно всего лишь настроить эмуляторы терминала, чтобы они рекламировали себя как "способные отображать 256 цветов", устанавливая их TERM
в xterm-256color
или любое сопоставимое значение, которое работает с вашими терминалами и платформами. То, как вы это сделаете, будет зависеть от эмулятора терминала и выходит за рамки вашего вопроса и этого ответа.
Вам не нужно ничего делать в Vim, так как он вполне способен делать правильные вещи сам по себе.
Когда вы используете tmux
или же screen
эти программы устанавливают свои собственные значения по умолчанию для $TERM
, обычно screen
и Vim делает то, что имеет отношение к предоставленной информации.
Если вы хотите более равномерное (и красочное) поведение, вы должны настроить их на использование "лучшего" значения для $TERM
:
tmux
Добавить эту строку в
~/.tmux.conf
:set -g default-terminal "screen-256color"
экран
Добавить эту строку в
~/.screenrc
:term "screen-256color"
Теперь оба мультиплексора сообщат Vim, что они поддерживают 256 цветов, и Vim сделает то, что вы ожидаете.
редактировать
Мой ответ предполагает, что вы можете редактировать эти файлы конфигурации, но, так как вы можете редактировать свои ~/.vimrc
Я не думаю, что я так далеко от цели.
редактировать 2
Значение term
опция (извлекается с помощью &term
) - это имя терминала, выбранное Vim при запуске. Это имя, которое вы должны установить в самом эмуляторе терминала.
Значение t_Co
вариант (&t_Co
) - это то, что Vim считает максимальным количеством цветов, которое может отображать хост-терминал. Он определяется в соответствии с записью, соответствующей $TERM
в terminfo
:
term | t_Co
-----------------+------
xterm | 8
xterm-256color | 256
screen | 8
screen-256color | 256
Когда Vim запускается, он получает значение TERM
переменная окружения, запрашивает terminfo
базы данных с этим значением и хранит ряд информации о своей среде в нескольких t_…
переменные, среди которых... количество цветов, доступных в t_Co
, Учитывая "допустимый" тип терминала (тот, который Vim может искать), Vim всегда принимает правильное количество цветов.
настройка t_Co
в 256
оставляя term
к его Vim-определенному значению - или, в более общем случае, установка t_Co
и / или term
значения, которые не совпадают с терминалом хоста - не имеет смысла и, скорее всего, создадут проблемы, когда Vim отправит сигнал, который не понят терминалом или наоборот.
Хотя это вполне возможно сделать, возиться с t_Co
а также term
в Vim это абсолютно бесполезно и, возможно, вредно.
Опять же, просто правильно настройте эмуляторы терминала и терминальные мультиплексоры. Это действительно все, что вам нужно.
Если вы оказались в терминальном мультиплексоре или эмуляторе терминала, где вы не можете определить правильный TERM
Тогда и только тогда вы можете заставить Vim принять 256 цветов. С этой целью, изменение значения t_Co
это единственное, что имеет смысл:
if &term == "screen"
set t_Co=256
endif
Итак... если вы можете настроить каждую отдельную часть:
- эмулятор терминала:
xterm-256color
- tmux / экран:
screen-256color
- vim: ничего
и вы сделали.
Если вы не можете контролировать каждую часть, используйте простое ~/.vimrc
установить t_Co
в соответствии с &term
но не меняйте значение term
,
Но если вы можете редактировать ~/.vimrc
нет причин, по которым вы не можете редактировать ~/.screenrc
или же ~/.tmux.conf
или же ~/.bashrc
или что угодно.
Вы можете использовать оба set t_Co=256
а также set term=xterm-256color
все вместе.
term
сообщает Vim, какой тип терминала использовать, который управляет отображением / рендерингом всех аспектов Vim, включая способ сопоставления ввода с клавиатуры, перерисовки экрана, перемещения курсора, отображения цветов и т. д. Обычно Vim может выяснить это самостоятельно. через TERM
переменная окружения, предоставляемая вашей ОС.
Часто бывает полезно установить его явно, если значение ОС неверно. Это особенно верно, если вы подключаетесь по сети из эмулятора терминала, который не обеспечивает правильное значение.
t_Co
является одним из многих вариантов терминала (используется системой termcap, которую Vim использует для управления терминалом). Это конкретно относится к количеству цветов, поддерживаемых терминалом. Иногда вам нужно переопределить это, если эмуляция терминала в основном корректна, но Vim неправильно определяет количество поддерживаемых цветов.
Я использую оба этих варианта в моем .vimrc
чтобы убедиться, что Vim использует 256 цветов в tmux, используя все понравившиеся мне терминалы (терминал gnome в Ubuntu, iTerm2 в OSX и KiTTY в Windows). У меня также есть большинство из этих терминалов, явно настроенных для отправки xterm-256color
как их тип терминала.