Я предпочитаю светлые цветовые схемы редактора кода, но пользоваться могу ими только днем. К вечеру приходится переключаться на менее привлекательную темную схему. Кроме того, на ярком солнце светлые темы предпочтительней.
Я уже писал про то, как менять цветовые схемы по времени восхода и захода солнца в Emacs. Для VIM у меня есть даже больше вариантов: по времени восхода и захода солнца, по датчику освещения макбука, просто по времени. Сейчас я ими поделюсь.
По времени
Самое простое – переключать цветовые схемы по времени. Реализация очень простая:
function MyColors()
let morning=6
let night=19
if strftime("%H") >= morning && strftime("%H") <= night
if &background == "dark"
set background=light
endif
elseif &background == "light"
set background=dark
endif
execute ":AirlineRefresh"
endfunction
if has("autocmd")
autocmd VimEnter * call MyColors()
autocmd bufwritepost * call MyColors()
endif
Таким образом, мы можем не только переключать цветовые схемы, но и свойство background (это нужно для вимовского варианта solarized).
Вызов AirlineRefresh нужен после изменения темы, иначе он не переисовывается корректно.
Также можно настроить разные схемы для терминала и GUI, делается это примерно так:
if has('gui_running')
set background=light
else
set background=dark
endif
Вариант по времени №2
Есть ещё плагин для вима, который переключает цветовые схемы четыре раза в день. Но он переключает именно цветовые схемы, так что для популярной темы solarized не подходит (там нужно переключать свойство background).
Устанавливаем плагин, настраиваем темы (отдельно для gui и терминала) и время для переключения:
Bundle 'daf-/vim-daylight'
let g:daylight_morning_color_gvim = "Tomorrow"
let g:daylight_afternoon_color_gvim = "solarized"
let g:daylight_evening_color_gvim = "Tomorrow-Night"
let g:daylight_late_color_gvim = "jellybeans"
let g:daylight_morning_color_term = "Tomorrow"
let g:daylight_afternoon_color_term = "mayansmoke"
let g:daylight_evening_color_term = "Tomorrow-Night"
let g:daylight_late_color_term = "jellybeans"
let g:daylight_late_hour = 21
let g:daylight_morning_hour = 7
let g:daylight_afternoon_hour = 12
let g:daylight_evening_hour = 18
Переключение по восходу и заходу солнца
Это уже интереснее. Для настройки плагина необходимо указать свои координаты, где их взять я уже писал в заметке для Emacs.
Bundle 'cadadr/vim-sunflower'
let g:sunflower_lat=53
let g:sunflower_long=58
let g:sunflower_colorscheme_day='solarized'
let g:sunflower_colorscheme_night='jellybeans'
Минус реализации в том, что переключает только темы. С solarized работать не будет. Но исправить ведь очень легко, если кому-то захочется.
Переключение по датчику освещения макбука
Это самое интересное, подумываю утащить к себе в Emacs. Ведь можно средь бела дня сидеть с наглухо закрытыми шторами, или вечером при искусственном освещении. Только нужно правильно настроить чувствительность, потому что будет очень неудобно, если тема будет меняться много раз за день.
Настроек у плагина никаких нет, потому что он просто меняет свойство background. В этом заключается и минус: с популярной темой solarized будет работать из коробки, а переключаться между разными темами не будет. Но я думаю каждый пользователь вима в состоянии хакнуть плагин и поменять set background на colorscheme.
В общем, просто устанавливаем плагин:
Bundle 'Dinduks/vim-holylight'