Ответ 1
Если вы не используете 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:
screen-256color
- vim: nothing
и все готово.
Если вы не можете контролировать каждую часть, используйте в условном ~/.vimrc
простое условие для установки t_Co
в соответствии с &term
, но не изменяйте значение TERM
.
Но если вы можете отредактировать ~/.vimrc
, нет причин, по которым вы не можете редактировать ~/.screenrc
или ~/.tmux.conf
или ~/.bashrc
или что-то еще.