vim colorschemes не меняет цвет фона - PullRequest
36 голосов
/ 01 декабря 2010

Я пытаюсь применить различные цветовые схемы в VIM, которые я видел в сети. Какую бы схему я не выбрал, фон остается белым, хотя на скриншотах примененной схемы видно, что фон должен быть цветным.

В некоторых схемах часть фона меняет цвет, но пространство справа от строк, содержащих текст, по-прежнему остается белым.

Я использую Vim 7.2 на Mac. Я только что начал возиться с приложениями, не относящимися к графическому интерфейсу, так что все должно быть примерно так, как было прямо из коробки.

Имеют ли общие настройки окна терминала какое-либо отношение к этому?

При запуске macvim все выглядит нормально. Только при запуске vim из терминала все выглядит странно ..

Ответы [ 9 ]

43 голосов
/ 14 августа 2013

У меня есть это в моем .vimrc, и это решило эту проблему для меня при использовании PuTTY.

set t_Co=256
set background=dark
colorscheme mustang
highlight Normal ctermbg=NONE
highlight nonText ctermbg=NONE

Важно загрузить схему цветов перед настройками ctermbg в .vimrc, потому что они должны переопределитьте же самые, установленные с помощью схемы цветов.Это также означает, что вы не можете переключать цветовую схему во время работы Vim и ожидать, что она будет работать.

28 голосов
/ 01 декабря 2010

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

Если вы посмотрите на фактический веб-сайт цветовую схему здесь: Веб-сайт Molokai

вы увидите вопрос, очень похожий на ваш.Вот ответ, который предлагает попробовать команду :set t_Co=256 в вашем vimrc, чтобы увидеть, исправляет ли она вещи:

"- Убедитесь, что вы используете консольный терминал, поддерживающий 256 цветов; не все из них делают (особеннона Mac). Возможно, вам придется явно заставить Vim использовать это, выполнив «set t_Co = 256 ″ для вашего файла .vimrc. - Консоль Windows хорошо… полностью не поддерживается, она выполняет только 16 цветов, поэтому это беспорядок»

14 голосов
/ 01 июня 2014

В Linux у меня было export TERM=xterm-256color в моем .bashrc.Это заставило vim выглядеть так (после установки set t_Co=256):

Vim looks with molokai theme before fixing TERM variable

Когда я удалил эту строку из моего .bashrc и открыл новый терминал (exec bash didnне делай этого) Вот что я получаю:

Vim looks with molokai theme after fixing TERM variable

7 голосов
/ 01 декабря 2010

Терминалы обычно ограничены 256 цветами, в то время как графический интерфейс ограничен только глубиной цвета среды рабочего стола, обычно 2 ^ 32.

Таким образом, даже если существует множество цветовых схем vim, неявно они часто предназначены для графического интерфейса и не будут работать для терминальной версии.

Если вы посмотрите на цветовые схемы на vim.org , часто упоминается GUI или 256. Поэтому вы должны выбрать, какой использовать в зависимости от контекста.

Для преобразования схемы GUI в терминал вы можете использовать следующий плагин: CSApprox .

Вы также можете использовать другую цветовую схему в зависимости от контекста, добавив следующее в ваш .vimrc:

if has("gui_running")  
    colorscheme [using any color you want]  
else  
    colorscheme [using 256 colors]  
endif  
5 голосов
/ 01 декабря 2010

Я думаю, что проблема может заключаться в том, что цвет по умолчанию изменяется с помощью схемы цветов.Я смотрел на некоторые схемы цветов, которые устанавливают настройки по умолчанию просто:

set background=light

или

set background=dark

Не уверен, каковы их ограничения.Я не думаю, что они работают в терминалах.

В любом случае вы должны иметь возможность вручную установить фон в терминале, используя подсветку «Обычный».Вставьте его в область перед большинством команд 'hi' в файле colorscheme, и он должен предоставить значения по умолчанию, с которыми они будут работать.Например:

hi Normal ctermbg=White ctermfg=Black guifg=Black guibg=White

Измените ctermfg (цветовой терминал переднего плана) и ctermbg (цветовой терминал фона) на любой, какой вы хотите (или любой цвет, который вы ожидали увидеть в схеме цветов, но теперь не видите),(Помните, однако, что если в colorcheme уже есть настройка hi Normal, то это, вероятно, не ваша проблема.)

Для ctermbg и ctermfg вы можете вводить названия цветов, но я думаю, что это довольно ограниченныйномер: черный темно-синий темно-зеленый темно-зеленый темно-красный темно-красный темно-пурпурный коричневый, темно-желтый светло-серый, светло-серый, серый, серый темно-серый, темно-серый, светло-синий зеленый, светло-зеленый голубой, светло-красный, светло-красный пурпурный, светло-желтый желтый, светло-желтый белый

В противном случае вы должны бытьвозможность использовать число от 0 до 255 вместо названия цвета.Или этот сценарий дает приблизительное представление и позволяет увидеть, как можно настроить использование большего количества имен цветов: Vim-скрипт с настройками цвета

Кроме того, существует ряд сценариев, которые помогаютВы используете или конвертируете схемы цветов, написанные для графического интерфейса пользователя, для использования с cterm.Например:

Поддержка цветовой схемы для cterm

Does the overall settings for the terminal window have something to do with it?

Возможно, но я уверен, что правильно написанная цветовая схема Vim переопределит любые настройки терминала, которые вы сделали,По крайней мере, они делают для меня в Windows и на Ubuntu.,.

4 голосов
/ 22 сентября 2013

У меня была та же проблема, и я обнаружил, что ответ на этот вопрос на самом деле является тройным, где исправить только два из трех недостаточно. Вам понадобится:

  1. Поддержка 256 цветов в вашем терминале - у Putty с настройками по умолчанию есть

  2. Vim должен признать, что терминал поддерживает 256 цветов: "set t_Co = 256" в вашем .vimrc сделает это

  3. Цветовая схема должна иметь поддержку цветных терминалов с атрибутами ctermbg и ctermfg для подсветки, а не только для gui *. http://www.vim.org/scripts/script.php?script_id=2682 должен быть в состоянии предоставить их автоматически, и CSApprox, который я использую, наиболее определенно делает, но требует или Vim, скомпилированный + gui, или достаточно недавнюю версию Vim (7.3 или новее).

Третье, кажется, наиболее часто пропускаемое требование. Я написал небольшую статью на эту тему только этим утром: http://codeandlife.com/2013/09/22/vim-colorschemes-with-putty-aka-gui-vs-xterm-color256/

Последнее, что случилось со мной, когда я пробовал разные настройки, было то, что когда цвета работали, только области экрана с текстом имели правильный цвет фона. Повторная проверка настройки терминала замазки «Использовать цвет фона для стирания экрана» исправила эту последнюю проблему для меня.

3 голосов
/ 01 декабря 2010

Имеют ли общие настройки окна терминала какое-либо отношение к этому?

Да, параметры терминала переопределяют параметры vim (по крайней мере, в OSX и iTerm). Например, у меня есть следующий скрипт в /Users/[username]/.bashrc

setBackground() {  
  osascript -e "tell application \"iTerm\"  
    set current_terminal to (current terminal)  
    tell current_terminal  
      set current_session to (current session)  
      tell current_session  
        set background color to $1  
      end tell  
    end tell  
  end tell"  
}  

vim() {
       (setBackground "{65025,65025,65025}" &)
       (exec vim $*)
}

Приведенная выше команда переназначения терминала vim для выполнения изменения цвета фона перед выполнением vim. Функция цвета фона - applecript (я скопировал скрипт откуда-то ...). Это работает для iTerm. Я верю, что вы можете адаптировать это для работы с терминалом (apple product + apple script -> должно работать).

ш
Юха

0 голосов
/ 12 марта 2017

Используйте это правило, если вы используете Vim через SSH :

  1. Добавьте к своему локальному .bashrc:

    export TERM=xterm-256color
    
  2. Удалить из .bashrc любых TERM определений.

Если вы используете одинаковые .bashrc для обоих (локальных и удаленных), используйте временныепеременная окружения и никогда установить TERM глобально:

alias color-ssh='TERM=xterm-256color ssh user@host'
0 голосов
/ 26 марта 2015

Это работает для меня для переключения фона:

colorscheme hemisu
function! g:ToggleBackground()
  if &background != 'dark'
    set background=dark
  else
    set background=light
    colorscheme hemisu
  endif
endfunction
nnoremap <silent> <F3> :call g:ToggleBackground()<CR>

Также попробуйте установить светлый фон на что-то вроде ctermbg=231, чтобы tmux справился с этим лучше.

...