Tmux, Vim и Solarized

19

Предпосылки

Сидя вокруг tmux , Vim и соляризации я могу найти много жалуется на 256 цветов и «пользовательский опыт». Ну, у меня противоположная "проблема", то есть Vim хорошо работает с полной темой Solarized только в tmux .

Фон

Я немного настраиваю и настраиваю цветовую схему моего терминала Ubuntu и Guake, и я почти достиг совершенства, которое достигается, когда я использую tmux , что, в свою очередь, означает всегда. Сейчас я пытаюсь понять, почему это происходит.

Здесь внизу есть два терминала, один слева запускает только Vim (показывает текущий .vimrc), а другой запускает Vim в сеансе tmux . Как вы можете ясно видеть, только в сеансе tmux шрифты выделены жирным шрифтом, что, я думаю, правильно (или нет?).

введите описание изображения здесь

Вопрос

Почему tmux допускает выделение жирным шрифтом, а терминал, на котором запущен tmux, - нет? Это ошибка или особенность?

Atcold
источник
Что является выходом echo $TERMв и из tmux?
Джейсонвриан
tmux говорит, screenтогда как терминал говорит xterm:)
Atcold
@jasonwryan прочитайте другой вопрос ОП здесь и ответ Жиля на аналогичный здесь . Видимо $TERMэто не так актуально.
Terdon
@terdon это материал в данном случае: tmux требует, чтобы термин был установлен на screen (или вариант), а xterm, по умолчанию, является 8-цветовым термином. Вот почему ОП видит разницу.
Джейсонвриан
Вставьте xterm*termName: xterm-256colorсвой ~/.Xresourcesи посмотрите, будет ли это иметь значение ...
jasonwryan

Ответы:

22

Короткий ответ

Это ошибка.

Полный ответ

Похоже , что «правильная» визуализация является один слева, где жирным шрифтом являются не оказанной. Для того, что я мог понять ( здесь ссылка), атрибут bold изначально использовался для установки выделенной версии 8 базовых цветов.

Исторически сложилось однозначное соответствие между жирными версиями 8 цветов ANSI по умолчанию и яркими версиями 8 цветов по умолчанию. Раньше, когда цветовая программа требовала отображения полужирного текста, для эмуляторов терминала, вероятно, было просто проще отобразить более яркую версию любого цвета текста (и ожидать, что пользователь интерпретирует это как полужирный), чем отображать гарнитура с жирным весом.

По сути, здесь происходит следующее: чтобы использовать полную палитра Solarized с оранжевым , фиолетовым и всеми уровнями серого , цвета называются атрибутом bold , который, в свою очередь, относится к альтернативным 8 цветам ANSI палитра.

Терминал понимает это правильно и показывает оранжевый и комментарий серого цвета при обычном наборе текста, тогда как tmux добавляет к ним ненужный жирный шрифт. В заключение, левая сторона верна, а правая - нет.

вопрос 2

Есть ли способ отключить рендеринг tmux ?
Я все еще должен сделать некоторое исследование об этом, и я обновлю этот ответ, как только я найду что-то.

Ответ 2

И здесь у нас есть решение! :)

Чтобы tmux вел себя правильно, мы должны назвать его, сообщая ему, что мы находимся в среде с 256 цветами.

TERM=xterm-256color /usr/bin/tmux

Для удобства мы могли бы aliasэто (т.е. вы добавляете alias tmux="<the line above>"в свой ~/.bashrc).

tmux правильно интерпретирует не выделенные жирным шрифтом цвета

Вызов tmuxas tmux -2для принудительного запуска tmux с поддержкой 256 цветов (вместо переопределения TERMпеременной среды) не позволит правильно интерпретировать «жирно-альтернативные» 8 цветов (т. Е. Более яркий вариант также приведет к выделению жирным шрифтом). Поэтому я настоятельно рекомендую использовать решение здесь выше , имеющие как интерпретацию корректных 256 цветов и без смелых «полужирных» альтернативных цветов.

Atcold
источник
очень люблю мужчину !!
Shxfee