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


137

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

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

Это можно сделать в .vimrcфайле?

Ответы:


118

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

if &diff
    colorscheme some_other_scheme
endif

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

au FilterWritePre * if &diff | colorscheme xyz | endif

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

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


Можно ли вызвать более одной команды между двумя каналами «|»? Мне было бы интересно вернуться к исходной цветовой схеме после использования vimdiff из vim ...
— Кто-то все еще использует вашу MS-DOS

1
Каналы заменяют символы новой строки, аналогично ;сценариям оболочки, поэтому вы можете просто добавить новые «строки»:if &diff | colorscheme xyz | cmd2 | cmd3 | endif
— DataWraith

1
colorscheme some_other_schemeбудет просматривать ваши пути выполнения для файлов color/some_other_scheme.vim. Вы можете увидеть свои пути выполнения :set runtimepath?из vim.
— Пабо

1
Для консольных пользователей (таких как я) я обнаружил, что vividchalk - лучшая цветовая схема (из набора по умолчанию) для сохранения контраста между выделенными различиями и выделенным синтаксисом, по крайней мере, для сценариев оболочки. На втором месте оказался «вечер». Надеюсь, это поможет.
— Конрад Мейер

Моя проблема всегда заключается в отсутствии контраста с подсветкой синтаксиса, которая теряет целые куски текста в цвете различий. Раньше я использовал ': syntax off' по мере необходимости, но просто добавил его в свой .vimrc в предикате 'if & diff' и теперь сохранил некоторые нажатия клавиш
— qneill

166

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

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

Перед

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

После

colorscheme_screenshot

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

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 - точная часть строки, которая изменилась

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

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


1
Спасибо! Это выглядит намного лучше!
— vitaluha

4
Как сказал Пабо в другом комментарии, вам может понадобиться назвать файл цветовой схемы как mycolorscheme.vim с расширением .vim в конце.
— Дэвид Винецкий

Спасибо! Незначительная гнида: я думаю, что вы случайно сделали все "guibg" красным. Вы намеревались использовать два цвета - один для DiffText и один для остальных?
— Капил Арья

6
Почему при использовании чисел (ctermbg = 17) цвета не работают, а при использовании слов (ctermbg = синий) - работают? .. решение: терминал имеет только 8 цветов 1-7
— Рики Леви

3
MacOS с использованием iTerm2. Независимо от того, что я сделал, я получил: Не могу найти цветовую схему '~ / .vim / colors / mycolorscheme' Копирование цветовых кодов непосредственно между оператором "if & diff" в ~ / .vimrc помогло.
— Тони Барганский

59

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

if &diff
    colorscheme evening
endif

Отличный цвет для меня!
— Skytree

22

Я нашел самый простой способ - вставить этот однострочный файл в мой файл ~ / .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

3
Отличное решение! Я выбрал Todoвместо, MatchParenпотому что он больше выделяется.
— Mihai Capotă

18

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

Причина в том, что цветовая схема vimdiff по умолчанию назначает 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-цветный скриншот введите описание изображения здесь

16-цветный скриншот введите описание изображения здесь

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

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


2
Большое спасибо за этот совет, хотя в моем случае все было наоборот. t_Coбыло установлено значение 8, что значительно set t_Co=256повысило его удобочитаемость.
— Олаф Дитше

11

molokai: цветовая гамма молокаи github: цветовая схема github Две темы 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

Мое новое любимое решение этой старой проблемы!
— Stabledog 08

10

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

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

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

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

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


1
У вас случайно не было скриншота, на котором показана разница?
— Виктор Заманян

7

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

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

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

:syntax off

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

if &diff
    syntax off
endif

6

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

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

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


Разработчики vim получили множество жалоб и предложений о том, как цветовая схема по умолчанию отображается на темном фоне, но, к сожалению, это все еще исправлено.
— Стефан Ласевски

6

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


3

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

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

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


3

Чтобы расширить @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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.