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 в качестве типа терминала.