Цветовые схемы vim не отображают цвет фона

Испробованные решения: добавление export TERM=xterm-256color к .bashrc и .zshrc, а также добавление set t_Co=256 к .vimrc, как указано в решениях других вопросов.

Да, я использую цветовую схему, которая поддерживает как графический интерфейс, так и терминал, это здесь .

Я использую в основном macos и hyper.app, но аналогичная ситуация происходит одновременно на Terminal.app, поэтому я думаю, что это не проблема эмулятора.

Довольно странная вещь из другого вопроса о переполнении стека: добавление этого к моему .vimrc:

if &term =~ '256color'
  " disable Background Color Erase (BCE) so that color schemes
  " render properly when inside 256-color tmux and GNU screen.
  set t_ut=
endif

меняет мой фон vim на темно-серый (я не знаю, откуда это взялось), но его удаление меняет его обратно на мой цвет фона терминала.

Я приму любое решение (потому что мне надоело это, заставить это работать), чтобы я мог получить шестнадцатеричный цвет из mac vim gui с помощью Color Picker.app и мог принудительно установить его в качестве фона vim каждый раз, когда я решаю изменить тему.

Все мои файлы конфигурации:

Я также использую tmux, но цвет такой же, как с tmux, так и без него.

РЕДАКТИРОВАТЬ:

Выход :scriptnames

  1: /usr/local/Cellar/macvim/8.0-146_1/MacVim.app/Contents/Resources/vim/vimrc
  2: ~/.vimrc
  3: ~/.vim/autoload/plug.vim
  4: /usr/local/Cellar/macvim/8.0-146_1/MacVim.app/Contents/Resources/vim/runtime/filetype.vim
  5: /usr/local/Cellar/macvim/8.0-146_1/MacVim.app/Contents/Resources/vim/runtime/ftplugin.vim
  6: /usr/local/Cellar/macvim/8.0-146_1/MacVim.app/Contents/Resources/vim/runtime/indent.vim
  7: /usr/local/Cellar/macvim/8.0-146_1/MacVim.app/Contents/Resources/vim/runtime/syntax/syntax.vim
  8: /usr/local/Cellar/macvim/8.0-146_1/MacVim.app/Contents/Resources/vim/runtime/syntax/synload.vim
  9: /usr/local/Cellar/macvim/8.0-146_1/MacVim.app/Contents/Resources/vim/runtime/syntax/syncolor.vim
 10: /usr/local/Cellar/macvim/8.0-146_1/MacVim.app/Contents/Resources/vim/runtime/ftoff.vim
 11: ~/.vim/bundle/Vundle.vim/autoload/vundle.vim
 12: ~/.vim/bundle/Vundle.vim/autoload/vundle/config.vim
 13: /usr/local/Cellar/macvim/8.0-146_1/MacVim.app/Contents/Resources/vim/runtime/syntax/nosyntax.vim
 14: ~/.vim/plugged/nemo/colors/nemo-dark.vim
 15: ~/.vim/bundle/vim-tmux-navigator/plugin/tmux_navigator.vim
 16: /usr/local/Cellar/macvim/8.0-146_1/MacVim.app/Contents/Resources/vim/runtime/plugin/getscriptPlugin.vim
 17: /usr/local/Cellar/macvim/8.0-146_1/MacVim.app/Contents/Resources/vim/runtime/plugin/gzip.vim
 18: /usr/local/Cellar/macvim/8.0-146_1/MacVim.app/Contents/Resources/vim/runtime/plugin/logiPat.vim
 19: /usr/local/Cellar/macvim/8.0-146_1/MacVim.app/Contents/Resources/vim/runtime/plugin/manpager.vim
 20: /usr/local/Cellar/macvim/8.0-146_1/MacVim.app/Contents/Resources/vim/runtime/plugin/matchparen.vim
 21: /usr/local/Cellar/macvim/8.0-146_1/MacVim.app/Contents/Resources/vim/runtime/plugin/netrwPlugin.vim
 22: /usr/local/Cellar/macvim/8.0-146_1/MacVim.app/Contents/Resources/vim/runtime/plugin/rrhelper.vim
 23: /usr/local/Cellar/macvim/8.0-146_1/MacVim.app/Contents/Resources/vim/runtime/plugin/spellfile.vim
 24: /usr/local/Cellar/macvim/8.0-146_1/MacVim.app/Contents/Resources/vim/runtime/plugin/tarPlugin.vim
 25: /usr/local/Cellar/macvim/8.0-146_1/MacVim.app/Contents/Resources/vim/runtime/plugin/tohtml.vim
 26: /usr/local/Cellar/macvim/8.0-146_1/MacVim.app/Contents/Resources/vim/runtime/plugin/vimballPlugin.vim
 27: /usr/local/Cellar/macvim/8.0-146_1/MacVim.app/Contents/Resources/vim/runtime/plugin/zipPlugin.vim
 28: /usr/local/Cellar/macvim/8.0-146_1/MacVim.app/Contents/Resources/vim/runtime/ftplugin/python.vim
 29: /usr/local/Cellar/macvim/8.0-146_1/MacVim.app/Contents/Resources/vim/runtime/indent/python.vim
 30: /usr/local/Cellar/macvim/8.0-146_1/MacVim.app/Contents/Resources/vim/runtime/syntax/python.vim

Также попытался добавить это к .vimrc:

set background=dark
highlight Normal ctermbg=NONE
highlight nonText ctermbg=NONE

РЕДАКТИРОВАТЬ (2):

Вот скриншоты той же темы и как она отображается на

  • terminal.app: введите здесь описание изображения

  • hyper.app:

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

  • и графический интерфейс Mac vim (правильно): введите здесь описание изображения

person J. Doe    schedule 18.07.2018    source источник


Ответы (2)


  1. При правильном $TERM Vim будет всегда работать правильно, поэтому такие хаки, как:

    set t_Co=256
    

    вообще бесполезны.

    Если вы собираетесь использовать цветовую схему с поддержкой 256 цветов, $TERM должен заканчиваться на 256color:

    xterm-256color   prefered for general usage
    screen-256color  if you use Vim in screen or tmux
    tmux-256color    if you use Vim in tmux and your terminal emulator supports it
    
  2. Если возможно, $TERM следует устанавливать не на уровне оболочки, а на уровне эмулятора терминала. В Hyper.app это делается в ключе env ~/.hyper.js:

    env: {TERM: 'xterm-256color'},
    

    Та же логика применима к tmux и screen, которые действуют как эмуляторы терминала.

  3. Этот фрагмент — бесполезный хак:

    if &term =~ '256color'
      " disable Background Color Erase (BCE) so that color schemes
      " render properly when inside 256-color tmux and GNU screen.
      set t_ut=
    endif
    
  4. Вот скриншоты, демонстрирующие прекрасно работающую цветовую схему Vim с поддержкой 256 цветов в Hyper.app в различных сценариях, без каких-либо взломов:

    Внизу: Vim в Hyper.app.

    Вим

    Внизу: Vim, в tmux, в Hyper.app.

    Vim в tmux

    Я не стал менять тему Hyper.app, потому что не собираюсь использовать ее после этого ответа, но, надеюсь, вы поняли идею.

  5. Оттуда вы можете:

    • найдите цвет фона вашей цветовой схемы и примените его к теме вашего эмулятора терминала в ~/.hyper.js, чтобы сделать это уродливое дополнение более привлекательным,

    • полностью удалите фон Vim, чтобы использовать эмулятор терминала с чем-то вроде:

      function! MyHighlights() abort
          highlight Normal      ctermbg=NONE
          highlight NonText     ctermbg=NONE
          highlight EndOfBuffer ctermbg=NONE
      endfunction
      
      augroup MyColors
          autocmd!
          autocmd ColorScheme * call MyHighlights()
      augroup END
      colorscheme foobar
      
person romainl    schedule 18.07.2018
comment
Я попробовал ваше решение, удалил определения $TERM из .bashrc и .zshrc, использовал env в гипер, но я все еще не мог понять это правильно. Я отредактировал свой вопрос и добавил скриншоты той же темы, упомянутой в вопросе, и как она отображается в terminal.app, hyper.app и графическом интерфейсе Mac Vim, и, кроме графического интерфейса, все, кажется, идет своим путем. Было бы здорово, если бы вы могли помочь мне отладить причину такого поведения. - person J. Doe; 19.07.2018
comment
Эта какашка не поддерживает эмуляторы терминала 256color. Он создан для GUI Vim, эмуляторов терминала с 8/16 цветами и эмуляторов терминалов, которые поддерживают новую функцию причудливого истинного цвета. Путь A: создайте себе правильную цветовую схему с 256 цветами. Путь B: сделайте так, чтобы цвета вашего терминала соответствовали вашей цветовой схеме. Путь C: если Hyper.app поддерживает эту функцию истинного цвета, настройте Vim на ее использование с помощью :help 'termguicolors'. - person romainl; 19.07.2018
comment
просто чтобы убедиться, что я пошел дальше и попробовал это vimcolors.com/727/simplifysimplify-light/light снова, и у меня похожие результаты. Графический интерфейс работает нормально, но цвета подсветки фона и синтаксиса по-прежнему темные и запутанные, следуя своей воле. Даже после установки set background=light как для terminal.app, так и для hyper.app - person J. Doe; 19.07.2018
comment
просто чтобы быть на той же странице, под этой какашкой вы имели в виду мою тему, верно? - person J. Doe; 19.07.2018
comment
попробовал кучу тем для терминала, и некоторые из них выдали мне эту ошибку, например vimcolors.com/796/Iosvkem /dark Обнаружена ошибка при обработке /Users/.../.vim/plugged/iosvkem/colors/Iosvkem.vim: строка 11: [Iosvkem] Недостаточно цветов. - person J. Doe; 19.07.2018
comment
Ну, у вас есть две дерьма здесь: Hyper.app и эта цветовая схема. Не могли бы вы попробовать мою цветовую схему romainl/apprentice? Это тот, который я использовал для скриншота. Он работает без каких-либо настроек в только что загруженном Hyper.app. - person romainl; 19.07.2018

Попробуйте использовать https://github.com/chriskempson/base16-vim.

Я также опубликовал два обходных пути для фоновых цветов, которые не работают в Hyper здесь

Это второй обходной путь, который я опубликовал, может сработать для вас:

  • В вашем .vimrc установите прозрачный фон vim:
"Overrides the color scheme background and makes it transparent      
 autocmd ColorScheme * highlight Normal ctermbg=None                                          
 autocmd ColorScheme * highlight NonText ctermbg=None
  • Измените фон вашего терминала на желаемый фоновый цвет
person user13675554    schedule 04.12.2020