У меня нет полного понимания того, как моя цветовая схема взаимодействует с term
настройкой в vim, и это мешает моей способности правильно отображать ее в neovim.
В моем файле .vimrc правильное поведение рассматриваемой цветовой схемы требует установки
set term=xterm
set t_Co=256
Пропуск любой из этих настроек приводит к некорректному отображению цветовой схемы:
исправить неверно отличается неверно
Схема выглядит так:
set background=dark
hi clear
if exists("syntax_on")
syntax reset
endif
let g:colors_name="impact3"
if exists("g:impact_transbg")
hi Normal ctermfg=255 ctermbg=none
hi NonText ctermfg=DarkGray ctermbg=none
hi Statement ctermfg=Blue ctermbg=none
hi Comment ctermfg=DarkGray ctermbg=none cterm=bold term=bold
hi Constant ctermfg=173 ctermbg=none
hi Identifier ctermfg=Cyan ctermbg=none
hi Type ctermfg=DarkGreen ctermbg=none
hi Folded ctermfg=0 ctermbg=235 cterm=underline term=none
hi Special ctermfg=Blue ctermbg=none
hi PreProc ctermfg=LightGray ctermbg=none cterm=bold term=bold
hi Scrollbar ctermfg=Blue ctermbg=none
hi Cursor ctermfg=white ctermbg=none
hi ErrorMsg ctermfg=Red ctermbg=none cterm=bold term=bold
hi WarningMsg ctermfg=Yellow ctermbg=none
hi VertSplit ctermfg=0 ctermbg=0
hi Directory ctermfg=Cyan ctermbg=DarkBlue
hi Visual ctermfg=White ctermbg=Gray cterm=underline term=none
hi Title ctermfg=255 ctermbg=Blue
hi String ctermfg=Blue ctermbg=none
hi StatusLine term=bold cterm=bold,underline ctermfg=White ctermbg=Black
hi StatusLineNC term=bold cterm=bold,underline ctermfg=Gray ctermbg=Black
hi LineNr term=bold cterm=bold ctermfg=2 ctermbg=None
hi Search ctermfg=Black ctermbg=2
hi TabLine ctermfg=0 ctermbg=DarkGray
hi TabLineFill ctermfg=DarkGray ctermbg=DarkGray
else
hi Normal ctermfg=White ctermbg=Black
hi NonText ctermfg=DarkGray ctermbg=Black
hi Statement ctermfg=Blue ctermbg=Black
hi Comment ctermfg=DarkGray ctermbg=Black cterm=bold term=bold
hi Constant ctermfg=DarkCyan ctermbg=Black
hi Identifier ctermfg=Cyan ctermbg=Black
hi Type ctermfg=DarkGreen ctermbg=Black
hi Folded ctermfg=DarkGreen ctermbg=Black cterm=underline term=none
hi Special ctermfg=Blue ctermbg=Black
hi PreProc ctermfg=LightGray ctermbg=Black cterm=bold term=bold
hi Scrollbar ctermfg=Blue ctermbg=Black
hi Cursor ctermfg=white ctermbg=Black
hi ErrorMsg ctermfg=Red ctermbg=Black cterm=bold term=bold
hi WarningMsg ctermfg=Yellow ctermbg=Black
hi VertSplit ctermfg=White ctermbg=Black
hi Directory ctermfg=Cyan ctermbg=DarkBlue
hi Visual ctermfg=White ctermbg=DarkGray cterm=underline term=none
hi Title ctermfg=White ctermbg=DarkBlue
hi StatusLine term=bold cterm=bold,underline ctermfg=White ctermbg=Black
hi StatusLineNC term=bold cterm=bold,underline ctermfg=Gray ctermbg=Black
hi LineNr term=bold cterm=bold ctermfg=White ctermbg=Black
endif
В неовим, term
нельзя установить. Я попытался вызвать neovim с установленным вручную $ TERM следующим образом:
TERM=xterm nvim
Это привело к правильному отображению цветов в обычном vim (т.е. эквивалентно установке термина в .vimrc), но в neovim это выглядит так:
Почему комбинация set term=xterm
и set t_Co=256
необходима для правильного отображения этой цветовой схемы в vim и почему эквивалентная комбинация настроек дает другой результат в neovim?
Редактировать:
По умолчанию используется значение $TERM=xterm256-color
, которое по какой-то причине должно быть переопределено xterm
в обычном vim для правильного отображения цвета. С переменной среды по умолчанию 256, neovim выглядит следующим образом:
Это идентично обычному vim с xterm256-color
, но не так, как задумано. Моя цель - понять, почему хак xterm необходим / работает в vim, и почему в neovim он выглядит иначе.
Обратите внимание, что многие цвета отображаются правильно с указанным выше термином env variable setting, заметными исключениями являются номера строк и фон. Я подозреваю, что способ, которым цвета определены в этой определенной цветовой схеме, может быть вовлечен.
источник
set term=xterm
.Ответы:
Главная проблема
Основная проблема, с которой вы столкнулись, связана с упорядочением команд в вашей
.vimrc
.Вы устанавливаете
g:impact_transbg
переменную после загрузки схемы цветов, поэтому переменная не существует, когда проверяется оператором colorschemeif
, и используется вторая версия схемы цветов (вelse
блоке).Чтобы исправить, вам просто нужно переместить строку, которая устанавливает переменную, над строкой, в которую вы загружаете схему цветов:
Затем вы можете (и должны!) Удалить ненужные строки из вашего
.vimrc
:Другие вопросы
Я также могу прояснить некоторые другие заблуждения / недоразумения о том, как все это работает:
Объясняя поведение
'term'
&'t_Co'
Ваш $ TERM установлен в
xterm256-color
. Vim читает это и запрашивает terminfo (или termcap), чтобы узнать, сколько цветов поддерживает терминал, а затем устанавливает't_Co'
соответственно. Предполагая, что ваш $ TERM верен (у вас есть), и ваша база данных terminfo содержит правильную информацию для этого терминала (у вас есть), вам никогда не придется сбрасывать вручную't_Co'
.Однако затем вы вручную устанавливаете Vim's
'term'
на xterm. Ваш terminfo говорит Vim, что этот терминал поддерживает только 8 цветов, поэтому добавление этого приведет't_Co'
к неправильной настройке на 8. Вы вручную устанавливаете't_Co'
обратно на 256, но если бы вы оставили'term'
настройку на правильное значение, вам не нужно было бы ,Кстати, при изменении
't_Co'
вручную после установкиg:impact_transbg
, это приводит к тому , ColorScheme перезагрузиться (чтобы позволить ColorScheme адаптироваться к новому количеству цветов), а также потому , чтоg:impact_transbg
это теперь установлен, вы получите цвет , которые вы хотите.(Если параметр линии
'term'
не указан,'t_Co'
он уже равен 256, когда вы переходите на последнюю строку в вашем .vimrc, и поэтому схема цветов не перезагружается: отсюда и неправильные цвета.)Итак, резюмируем:
Результат: Colorscheme перезагружается, когда
't_Co'
установлено 256, цвета правильные.Результат: Colorscheme загружается
colorscheme
командой, переменная не существует, цвета неверны.Результат: Colorscheme загружается
colorscheme
командой, переменная не существует, и Vim использует только 8 цветов, цвета неправильные.Результат: Colorscheme загружается
colorscheme
командой, переменная не существует, цвета неверны.Результат: ColorScheme загружается
colorscheme
командой, переменная делает существует, поэтому цвета являются правильными. (И в качестве бонуса,'term'
и't_Co'
тоже правильно!)Поведение отличается в NeoVim просто потому, что вызов set
't_Co'
игнорируется, как уже упоминали другие ответчики.'background'
После настройки схемы цветов, вы также установите
'background'
. Для этого конкретного ColorScheme, это совершенно не нужно, потому что первое , что ColorScheme делает это набор'background'
к'dark'
.Обратите внимание, что я не согласен с другим ответчиком, который предлагает установить
'background'
после загрузки схемы цветов . Цветовая схема может использовать значение'background'
для регулировки своих цветов, поэтому установка'background'
перед загрузкой цветовой схемы является более очевидным порядком. (Хотя учтите, что если вы измените'background'
настройку, Vim перезагрузит все загруженные схемы цветов, поэтому настройка и'background'
после этого также сработает: это просто неоптимально.)источник
В случае с Неовим
t_Co
иTERM
без разницы.Вы звоните
set background=dark
до и после звонкаcolorscheme impact3
. Переместитесьset background=dark
в нижнюю часть схемы цветов и удалите другой вызов из вашего vimrc.От
:help 'background'
:Смотрите также: https://github.com/justinmk/molokai/commit/aa1cc201c743dd7d1b80bb2e2b5fbb7894ebfe5f
t_Co
потому что он принимает 256, если вы не включите «истинный цвет» .t_*
варианты, видите:help t_xx
.&term
быть установленным, потому что это бессмысленно. Neovim использует unibilium и другие механизмы для определения возможностей терминала.источник
set background=dark
оператора не оказали никакого влияния, но эти подробности о базовой реализации гораздо более ценны для меня.Я вижу, вы используете iTerm2, так что вы можете попробовать это:
profiles
вкладкуterminal
справаReport terminal type
выбореxterm-256color
источник
xterm-256color
. Я выполнил вашу процедуру, чтобы найти уже установленный тип терминала.Вам не хватает потрясающей функции NeoVim. Есть env var, который помогает с этим. Попробуйте добавить это в свой nvimrc:
Или
в оболочке.
источник
guifg
иguibg
. Цветовая схема ОП используетctermfg
иctermbg
.Вам нужно настроить параметры
в вашем
.config/nvim/init.vim
.источник
guifg
иguibg
значения RGB для цвета. Цветовая схема вопроса использует толькоctermfg
иctermbg
.Обратите внимание, что конкретная цветовая схема на самом деле представляет собой два набора цветовых схем в предложении if-else. Существование переменной
g:impact_transbg
выбирает желаемый набор цветов и изначально предназначалось для учета прозрачных фонов в цветовой схеме, из которой это происходит .Комментирование 2-й цветовой схемы и оператора if-else (оставление только желаемой цветовой схемы и отказ от него
g:impact_transbg
) приводит к намеченному поведению как в vim, так и в neovim, даже с удалениемset term=xterm
иset t_Co=256
удалением.Это подразумевает, что с и
$TERM=xterm-256colors
в vim и в neovim условное завершениеif exists("g:impact_transbg")
не выполняется, но комбинация настроекпозволил условному преуспеть. Удаление предложения if-else, как описано выше, решает материальную проблему, но все еще остается загадкой в отношении взаимодействия между парой настроек термина .vimrc и
g:impact_transbg
.источник
Попробуйте установить
$TERM
переменную среды следующим образом:Также попробуйте запустить nvim так:
Если это работает, установите
$TERM
переменную в вашей оболочке навсегда.источник
xterm-256color
. Установка $ TERM через экспорт не имела никакого эффекта.У меня недавно была эта проблема с соляризованной темой. Проблема возникла из
TERM
переменной env.Я исправил это, сказав, что мой эмулятор терминала (в моем случае терминатор) запускается
env TERM=xterm-256color zsh
вместо обычного запуска zsh.источник