Середовище:
- Fedora 25 (4.9.12-200.fc25.x86_64)
- Термінал GNOME 3.22.1 Використання VTE версії 0.46.1 + GNUTLS
- VIM - Vi IMproved 8.0 (2016 р. 12 вересня, складено 22 лютого 2017 р. 16:26:11)
- tmux 2.2
Нещодавно я почав використовувати tmux і помітив, що кольори у Vim змінюються залежно від того, біжу я всередині або поза tmux. Нижче наведені скріншоти Vim зовні (зліва) та всередині (праворуч) від tmux під час перегляду Git diff:
Моя TERM
змінна -
- Поза tmux:
xterm-256color
- Всередині tmux:
screen-256color
Vim повідомляє про такі типи терміналів, як очікувалося (через :set term?
):
- Поза tmux:
term=xterm-256color
- Всередині tmux:
term=screen-256color
Vim також повідомляє, що обидва екземпляри працюють у 256-кольоровому режимі (через :set t_Co?
):
- Поза tmux:
t_Co=256
- Всередині tmux:
t_Co=256
Існує багато подібних питань щодо того, щоб Vim запустився в 256-кольоровому режимі всередині tmux (найкраща відповідь, яку я знайшов, тут ), але я не думаю, що це моя проблема з огляду на вищевказану інформацію.
Я можу дублювати проблему поза tmux, якщо запускаю Vim з типом терміналу, встановленим на screen-256color
:
$ TERM=screen-256color vim
Тому я змушую вважати, що між можливостями xterm-256color
та screen-256color
терміналами просто є якась різниця, яка спричиняє різницю в кольорі. Що призводить до питання, поставленого в заголовку: що конкретно в можливостях термінала призводить до того, що кольори Vim відрізняються? Я бачу відмінності між запуском :set termcap
всередині і зовні tmux, але мені цікаво, які змінні насправді викликають різницю в поведінці.
Незалежно від попереднього питання, чи можна, щоб кольори Vim були стійкими під час роботи всередині або поза tmux? Деякі речі, які я спробував, включають:
- Явне встановлення терміналу за замовчуванням використовує tmux
~/.tmux.conf
для різних значень (деякі проти порад FAQ tmux FAQ ):
встановити -g за замовчуванням-термінал "screen-256color" встановити -g за замовчуванням-термінал "xterm-256color" встановити -g за замовчуванням-термінал "screen.xterm-256color" встановити -g за замовчуванням-термінал "tmux-256color"
- Початок використання tmux
tmux -2
.
У всіх випадках Vim продовжував відображати різні кольори всередині tmux.
xterm-256color
версії (пошук у файлі "38; 5;"), але не можна в screen-256color
. Наприклад , там , де є \e[38;5;81m
в xterm-256color
(колір # 81 з 256-кольорової палітри, середній блакитний відтінок), screen-256color
містить \e[34m
замість цього (стандартний синій колір 8-колірної гами). Тому головне питання, чому vim не використовує 256-кольорову палітру у випадку TERM=screen-256color
.
xterm-256color
здається, версія друкує екран двічі, спочатку із застарілими кольорами, а потім із 256-кольоровою палітрою. Шукайте, наприклад, "F1" у файлі, ви знайдете дві збіги xterm-256color
, перше з \e[34m
кольором, друге з \e[38;5;81m
. Я не знаю, що тут відбувається.
set -g default-terminal "screen.xterm-256color"
в ~/.tmux.conf
і перезавантажити конфігурації в tmux (<Cs>: джерело-файл ~ / .tmux.conf) працював для мене (питання виділення). thx
script
, запуститиvim
, вийти,vim
а потім вийтиscript
з оболонки та приєднати отриманийtypescript
файл? Потім повторіть ті самі кроки, якTERM=screen-256color vim
замість цього.