Загрузить другую цветовую схему при использовании 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.