Загрузка различных colorscheme при использовании vimdiff

как загрузить другую colorscheme при выполнении vimdiff.

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

Это можно сделать в ?

10 ответов


если вы звоните vimdiff из командной строки введите в свой .vimrc:

if &diff
    colorscheme some_other_scheme
endif

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

au FilterWritePre * if &diff | colorscheme xyz | endif

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

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


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

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

до

enter image description here

после

colorscheme_screenshot

Я сделал это, добавив следующее в конец моего файл схема (~/.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, потому что я использую другую colorscheme для macvim/gvim


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

if &diff
    colorscheme evening
endif

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

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

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

"нормальный" enter image description here

"высокий" enter image description here

"низкий" enter image description here


если вы столкнулись с нечитаемыми цветовыми схемами (не только уродливые, но нечитаемые, как белый текст на розовом фоне), простое исправление может быть использовать 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-цветную скриншот enter image description here

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

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

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


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

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

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


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


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

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

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


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

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

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

:syntax off

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

if &diff
    syntax off
endif