Загрузите другую цветовую схему при использовании vimdiff

Как загрузить другую цветовую схему при выполнении vimdiff.

Я хочу это, потому что моя текущая цветовая схема не показывает некоторые различия в vimdiff, For. например, некоторый diff показан с тем же цветом fg/bg. Это затрудняет понимание различий. Поэтому каждый раз, когда я делаю vimdiff, я должен делать :colorscheme some_other_scheme

Можно ли это сделать в файле .vimrc?

Ответ 1

Если вы вызываете vimdiff из командной строки, поместите следующее в .vimrc:

if &diff
    colorscheme some_other_scheme
endif

Если вы используете vimdiff изнутри vim, вам придется либо переопределить команды, которые вы используете для запуска/остановки (например, diffthis, diffoff), используя :cnoreabbr (там также плагин) или используйте автокоманду:

au FilterWritePre * if &diff | colorscheme xyz | endif

FilterWritePre вызывается перед фильтрацией через внешнюю программу (утилиту diff) и &diff -option устанавливается vim при переходе в diff-режим (среди прочего, см. :help diff)

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

Ответ 2

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

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

Перед

enter image description here

После

colorscheme_screenshot

Я сделал это, добавив следующее в конец моего файла colorscheme (~/.vim/colors/mycolorsheme).

highlight DiffAdd    cterm=bold ctermfg=10 ctermbg=17 gui=none guifg=bg guibg=Red
highlight DiffDelete cterm=bold ctermfg=10 ctermbg=17 gui=none guifg=bg guibg=Red
highlight DiffChange cterm=bold ctermfg=10 ctermbg=17 gui=none guifg=bg guibg=Red
highlight DiffText   cterm=bold ctermfg=10 ctermbg=88 gui=none guifg=bg guibg=Red
  • cterm - устанавливает стиль
  • ctermfg - установите цвет текста
  • ctermbg - установите подсветку
  • DiffAdd - добавлена ​​строка
  • DiffDelete - удалена строка
  • DiffChange - часть строки была изменена (выделение всей строки)
  • DiffText - точная часть строки, которая изменила

Я использовал эту ссылку в качестве ссылки для номеров цветов.

Примечание. Я не задал параметры gui, потому что я использую другую цветовую схему для macvim/gvim

Ответ 3

Чтобы ответить на мой собственный вопрос:

if &diff
    colorscheme evening
endif

Ответ 4

Я нашел, что самый простой способ - вставить этот однострочный вкладыш в файл ~/.vimrc:

" Fix the difficult-to-read default setting for diff text highlighting.  The
" bang (!) is required since we are overwriting the DiffText setting. The highlighting
" for "Todo" also looks nice (yellow) if you don't like the "MatchParen" colors.
highlight! link DiffText MatchParen

Ответ 5

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

Причина заключается в том, что цветовая схема DiffChange bg по умолчанию назначает DiffChange bg как "LightMagenta", который отображается на очень светло-розовый в 256 цветах. Это нечитаемо с белым текстом. С 16 цветами, LightMagenta отображается на ярко-пурпурный, на котором белый текст выглядит гораздо лучше.

Вы можете сделать быстрый тест, выполнив что-то вроде этого:

vimdiff <file1> <file2>
:set t_Co?    " print current setting (256 by default)
:highlight    " print highlighting scheme
:set t_Co=16  " set to 16 colors
:highlight    " print highlighting scheme

256-цветный скриншот enter image description here

16-цветный скриншот enter image description here

Как видите, 16 цветов гораздо более читабельны, без изменения цветовой схемы.

Чтобы сделать это постоянным, вы можете добавить set t_Co=16 в ваш .vimrc

Ответ 6

Для людей, которые используют очень отличную Solarized, есть опция, которая обеспечивает высокую видимость для diff:

" ~/vim.rc
" Set high visibility for diff mode
let g:solarized_diffmode="high"

"нормальный" введите описание изображения здесь

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

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

Ответ 7

Другой подход - исправить эту цветовую схему.

Насколько я знаю, обычно есть четыре группы подсветки по сравнению с diff'ing: DiffAdd, DiffChange, DiffDelete и DiffText. Если вы не хотите беспокоиться о синтаксисе или настраивать цвета по своему вкусу, возможно, вы можете скопировать цветовую схему по умолчанию под другим именем в ~/.vim/colors (создать каталог, если он не существует) и скопируйте вставьте соответствующие команды: hi из вашей альтернативной цветовой схемы в конец вашей новой настраиваемой цветовой схемы, необязательно комментируя любые другие связанные с ней утверждения.

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

Ответ 8

/etc/vim/vimrc или ~/.vimrc: Если использование темного фона в области редактирования и подсветка синтаксиса включите эту опцию также set background=dark

Ответ 9

molokai: molokai color scheme github: github color scheme Две темы github и molokai одинаково прекрасны.

curl -fLo ~/.vim/colors/molokai.vim --create-dirs https://raw.githubusercontent.com/tomasr/molokai/master/colors/molokai.vim
curl -fLo ~/.vim/colors/github.vim --create-dirs https://raw.githubusercontent.com/endel/vim-github-colorscheme/master/colors/github.vim

Поместите следующий код в ~/.vimrc, вы можете выбрать github или molokai (строка, начинающаяся с "- это комментарий):

if &diff
"   colorscheme github
    colorscheme molokai
endif

Ответ 10

При использовании vimdiff из vim я использую следующее:

au BufEnter,BufNew * if &diff | syntax off | else | syntax on | endif

Часть с инструкцией else важна, потому что, как вы вернетесь к своей предыдущей конфигурации после того, как вы закончите с diff'ing. Поэтому вы можете заменить syntax off и syntax on соответствующими командами colorscheme. Этот autocmd обрабатывает изменение настроек и возврат его при выходе из vimdiff (я использую Gdiff, чтобы быть точным).

Ответ 11

моя текущая цветовая схема не показывает должным образом различия в vimdiff, For. например, некоторые различия отображаются с тем же цветом fg/bg

На самом деле, я обнаружил, что основной виновник того же цвета fg/bg - из-за конфликта между подсветкой синтаксиса кода и diffchechecheche. Вы можете попытаться изменить цветовую схему различий, но это может быть игра в прятки, когда вы открываете файлы разных типов (с разной подсветкой синтаксиса кода).

Верным решением является отключение подсветки синтаксиса в vimdiff. Вы можете ввести:

:syntax off

Или, если вы хотите автоматически делать это каждый раз, добавьте это в конец вашего ~/.vimrc:

if &diff
    syntax off
endif

Ответ 12

Чтобы расширить @dean и некоторые другие ответы здесь, добавьте это в ваш .vimrc:

if &diff
  " colorscheme evening
  highlight DiffAdd    cterm=bold ctermfg=10 ctermbg=17 gui=none guifg=bg guibg=Red
  highlight DiffDelete cterm=bold ctermfg=10 ctermbg=17 gui=none guifg=bg guibg=Red
  highlight DiffChange cterm=bold ctermfg=10 ctermbg=17 gui=none guifg=bg guibg=Red
  highlight DiffText   cterm=bold ctermfg=10 ctermbg=88 gui=none guifg=bg guibg=Red
endif