Що означає: встановити фон = темний?


35

Я не вклав color xxxсвого .vimrc. Тому я бачу це, коли вперше відкриваю своє .vimrc.

:colorдає мені defaultтут. Перед чим завгодно

Потім я набираю :color darcula. І це змінюється на цьому.

:colorдає мені darculaтут (природно). Зміна кольорової схеми

Потім я набираю :set background=dark. І це змінюється на цьому.

:colorдає мені defaultтут (дивно). Зміна фону

Отже, моє запитання: що саме :set background=darkробити?

Я спробував :h backgroundі не знайшов нічого корисного. Я розумію, що ця команда насправді не змінює фон, лише vim відповідно змінить кольори. Але я все ж хочу задати це питання. Тому що я дуже задоволений кольором після цього, :color darculaі :set background=darkтому мені цікаво, як написати власну колірну гаму, не вводячи set background=darkсвою .vimrc.

Я взяв поради від @statox і поставив set background=darkостанній рядок darcula.vim. Потім color darculaдає мені третій знімок екрана. Однак коли я ставлю це на перший рядок, color darculaдає мені другий знімок екрана. Також set bg=darkзмінює його на третій скріншот.

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

Якщо те, що я припускаю, сталося правдивим, моє запитання все ще не відповідає. Що саме змінив vim, коли я використовую set bg=darkПІСЛЯ, він завантажив світлу схему кольорів?

Моя ціла конфігурація vim доступна на веб- сайті https://github.com/MichaelMa2014/.vim



@muru Вітаю! Я прочитав це питання, перш ніж задати своє. Він згадується на цій посаді , що :set bg=lightі :set bg=darkне протилежні, але що саме вони не пояснена. Також цей пост, чому я хочу уникати :set background=darkсвого .vimrc.
Майкл Ма

Відповіді:


32

Що відбувається, коли ти :set background

Основний механізм, за допомогою якого :set backgroundпрацює, насправді досить простий, і це задокументовано (хоча і не особливо чітко) в :help 'background'.

Якщо встановлено 'фон', Vim буде коригувати нові кольорові групи за замовчуванням. Але кольори, які використовуються для підсвічування синтаксису, не зміняться. g: color_name
Коли завантажується кольорова схема (встановлена ​​змінна "g: color_name") налаштування "background" призведе до перезавантаження кольорової схеми. Якщо колірна схема підлаштовується до значення "фон", це спрацює. Однак якщо кольорова схема встановлює «фон», ефект може бути скасований.

Отже, що насправді відбувається при 'background'зміні параметра, це таке:

Якщо на даний момент не завантажена жодна кольорова схема

Vim перезавантажує кольори за замовчуванням, використовуючи кольори переднього плану, які вважаються відповідними для нового налаштування 'background'

Якщо на даний момент завантажена кольорова схема

Vim перезавантажує колірну гамму. Коли завантажується колірна схема, або кольорова схема встановлює кольори, відповідні новим налаштуванням 'background', або колірна схема скидає 'background' старе значення.

Як ви вже описали, 'background'опція не призначена для встановлення фону, а замість того, щоб повідомити Vim, чи фон темний або світлий.

Отже, якщо колірна схема скидається 'background', Vim вважає, що кольорова схема просто не підтримує нове налаштування 'background'. Оскільки користувач вказав, що використовує такий фон, це означає, що поточна колірна схема більше не підходить, і Vim скасовує g:colors_nameта повторно завантажує кольори за замовчуванням.

Якщо ви хочете вивчити фактичний код, який виконується, коли 'background'встановлено, ви можете почати тут .

Що відбувається у вашій установці

Дивна поведінка, яку ви описуєте (у першій версії запитання), може бути пояснена цим рядком у цитованій вище документації:

Коли завантажується кольорова схема (встановлена ​​змінна "g: color_name")

Проблема полягає в тому, що у вашому colors/darcula.vimфайлі не встановлено це значення, і тому навіть незважаючи на те, що кольори змінювалися під час виклику :color darcula, Vim не вважає кольорову схему, яку зараз завантажують.

Тому під час дзвінка :set background=darkVim виконує крок у розділі "Якщо в даний момент не завантажена кольорова схема" і встановлює кольори за замовчуванням для темного фону. Це пояснює, чому :colorтоді звітує default.

(Однак зауважте, що встановлення кольорів за замовчуванням не , як ви могли очікувати, видаляє всі раніше встановлені кольори, і саме тому ви отримуєте результати, які ви бачите, а не кольори, які відображаються під час в першу чергу запустіть Vim. Тут є обговорення цього питання )

Коротше кажучи, ваша кольорова гама неправильно налаштована: див. :edit $VIMRUNTIME/colors/README.txt(Зокрема розділ внизу) для отримання детальної інформації про це та про взаємодію між 'background'і кольоровими схемами.


Дуже дякую! Я відчуваю себе повністю зрозумілим, коли ти кажеш, що "не, як можна було очікувати, видалити всі кольори, які були раніше встановлені". Я обов'язково поїду читати дискусії!
Майкл Ма

4

Документ :h 'background' повинен надати всю необхідну інформацію:

Якщо встановлено значення "темно", Vim спробує використовувати кольори, які добре виглядають на темному фоні. Якщо встановлено "світло", Vim спробує використовувати кольори, які добре виглядають на світлому фоні. Будь-яке інше значення є незаконним.

Ваша схема кольорів визначає 2 групи кольорів: ті, які використовуються на світлому фоні та ті, які використовуються на темному тлі. Цей backgroundпараметр вказує vim, яку групу кольорів, визначену вашою кольоровою схемою, слід використовувати.

Якщо встановити цей параметр, не змінюється колір фону, він повідомляє Vim, як виглядає колір фону. Про зміну кольору фону див :h :hi-normal.

Якщо встановлено 'фон', Vim буде коригувати нові кольорові групи за замовчуванням. Але кольори, які використовуються для підсвічування синтаксису, не зміняться.

Ось подальший зміст попереднього абзацу: Схема кольорів визначає групи кольорів і backgroundвибирає одну з цих груп.

Нарешті, якщо ви хочете написати власну колірну схему, не set background=darkвкладаючи у свій vimrc, пам’ятайте, що кольорова схема - це не що інше, як програма в vimscript, тому ніщо не заважає вам використовувати команду безпосередньо в коді вашої кольорової схеми, наприклад, jellybeans або учень


1
Дякую! Я поклав set background=darkв darcula.vimі справив той же ефект, що, коли я поклав його в .vimrc. Але мені все одно цікаво, як саме Vim «намагається використовувати кольори, які добре виглядають на темному тлі»? Чи є десь визначене відображення чи щось подібне?
Майкл Ма
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.