Завантажте різні кольорові схеми під час використання vimdiff


137

Як завантажити іншу кольорову схему при виконанні vimdiff.

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

Це можна зробити у .vimrcфайлі?

Відповіді:


118

Якщо ви телефонуєте vimdiffз командного рядка, введіть у своєму .vimrc:

if &diff
    colorscheme some_other_scheme
endif

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

au FilterWritePre * if &diff | colorscheme xyz | endif

FilterWritePre викликається перед фільтруванням через зовнішню програму (утиліта diff), а &diffопція встановлюється 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" є найкращою схемою кольорів (поза встановленим набором встановлення за замовчуванням) для підтримки контрасту між виділеним розрізненням та виділеним синтаксисом, принаймні для скриптів оболонки. Близькою секундою був «вечір». Сподіваюся, що це допомагає.
Конрад Мейєр

Моя проблема - це завжди відсутність контрасту з виділенням синтаксису, який втрачає цілі шматки тексту в різному кольорі. Я використовував ': синтаксис вимкнено', як це було потрібно раніше, але просто додав його до свого .vimrc в предикаті 'if & diff' і тепер
зберег

166

Я не знаю, чому vim використовує так багато кольорів для виділення, це насправді не допомагає зрозуміти, що відбувається.

Я змінив свою колірну схему, щоб використовувати лише один колір, щоб виділити (з іншим, щоб показати, де різниця в межах лінії), і це все змінило.

До цього

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

Після

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

Я використовував це посилання як орієнтир для кольорових чисел.

Примітка. Я не встановив параметри gui, оскільки використовую іншу кольорову схему для macvim / gvim


1
Дякую! Це виглядає набагато краще!
vitaluha

4
Як сказав пабо в іншому коментарі, вам може знадобитися назвати файл вашої кольорової схеми на зразок mycolorscheme.vim, з розширенням .vim на кінці.
David Winiecki

Дякую! Незначна ніт: Я думаю, ви випадково зробили всіх "guibg" червоними. Чи мали намір мати два кольори - один для DiffText і один для решти?
Капіль Ар’я

6
Чому при використанні цифр (ctermbg = 17) кольори не працюють, але при використанні слів (ctermbg = синій) - він працює? .. рішення: термінал має лише 8 кольорів 1-7
Рікі Леві

3
MacOS за допомогою iTerm2. Що б я не зробив, я отримав: Неможливо знайти колірну схему '~ / .vim / color / 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 та mokakai однаково красиві.

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

10

Для людей, які використовують дуже відмінну соляризовану тему, є параметр, який вмикає високу видимість для різного режиму:

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

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

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

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


1
У вас не трапиться скріншот різниці, яку це робить?
Віктор Заманян

7

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

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

Надійне рішення - вимкнути підсвічування синтаксису у vimdiff. Ви можете ввести:

:syntax off

Або якщо ви хочете кожен раз автоматично робити це, додайте це в кінець свого ~/.vimrc:

if &diff
    syntax off
endif

6

Ще один підхід - це виправити цю колірну гаму.

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

І якщо результат очевидне поліпшення, надішліть електронному листу підтримку вашої кольорової гами із змінами та попросіть його розібратися в проблемі. Є хороший шанс, що він подякує вам за ваш інтерес і що він виправить свою колірну гамму, щоб інші користувачі також отримали користь.


Розробники 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.