Vim: разница между T Co=256 и term=xterm-256color в сочетании с TMUX
Я тестирую различные различные терминалы, которые я, как правило,использую для SSH в Linux-боксы, которые я настроил Tmux.
в основном я заметил это поведение, и я надеюсь, что кто-то может предложить объяснение того, что происходит. Теперь это может быть так, что это конкретное поведение, которое влияет на быстрое приложение.
Я использую Vim в Tmux, и в приложении подсказки Panic на моем iPhone5 у меня было поведение, которое 256 цветов не включали, когда .vimrc
настройка цветов с помощью
2 ответов
когда вы не используете tmux
или screen
, вам нужно только настроить эмуляторы терминалов, чтобы рекламировать себя как "способные отображать 256 цветов", установив их TERM
to 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
) - это имя терминала, подобранное Vim при запуске. Это имя вы должны настроить в самом эмуляторе терминала.
значение (&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
to 256
, оставляя term
к его Vim-определенному значению-или, в более общем плане, установка t_Co
и/или term
к значениям, которые не совпадают с терминалом хоста - не имеет смысла и, вероятно, создаст проблемы, когда Vim отправляет сигнал, который не понят терминалом или наоборот.
в то время как это вполне возможно сделать, возиться с t_Co
и term
в Vim совершенно бесполезно и, возможно, вредно.
опять же, просто настройки терминальные эмуляторы и терминальные мультиплексоры правильно. Это действительно все, что вам нужно.
если вы оказываетесь в терминальном мультиплексоре или эмуляторе терминала, где вы не можете определить правильный TERM
, тогда и только тогда вы можете заставить Vim принять 256 цветов. С этой целью изменение значения t_Co
- это единственное, что имеет смысл:
if &term == "screen"
set t_Co=256
endif
Итак... если вы can настройки каждого отдельного часть:
- эмулятор терминала:
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-terminal Ubuntu, iTerm2 OSX и KiTTY Windows). У меня также есть большинство этих терминалов, явно настроенных для отправки xterm-256color
в качестве типа терминала.