-
-
Save NikitaShkaruba/e4f890fc79cdcdb1ef0b0986022bfcfd to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
" Change the color scheme from a list of color scheme names. | |
" Version 2010-09-12 from http://vim.wikia.com/wiki/VimTip341 | |
" Press key: | |
" F8 next scheme | |
" Shift-F8 previous scheme | |
" Alt-F8 random scheme | |
" Set the list of color schemes used by the above (default is 'all'): | |
" :SetColors all (all $VIMRUNTIME/colors/*.vim) | |
" :SetColors my (names built into script) | |
" :SetColors blue slate ron (these schemes) | |
" :SetColors (display current scheme names) | |
" Set the current color scheme based on time of day: | |
" :SetColors now | |
if v:version < 700 || exists('loaded_setcolors') || &cp | |
finish | |
endif | |
let loaded_setcolors = 1 | |
let s:mycolors = ['slate', 'torte', 'darkblue', 'delek', 'murphy', 'elflord', 'pablo', 'koehler'] " colorscheme names that we use to set color | |
" Set list of color scheme names that we will use, except | |
" argument 'now' actually changes the current color scheme. | |
function! s:SetColors(args) | |
if len(a:args) == 0 | |
echo 'Current color scheme names:' | |
let i = 0 | |
while i < len(s:mycolors) | |
echo ' '.join(map(s:mycolors[i : i+4], 'printf("%-14s", v:val)')) | |
let i += 5 | |
endwhile | |
elseif a:args == 'all' | |
let paths = split(globpath(&runtimepath, 'colors/*.vim'), "\n") | |
let s:mycolors = map(paths, 'fnamemodify(v:val, ":t:r")') | |
echo 'List of colors set from all installed color schemes' | |
elseif a:args == 'my' | |
let c1 = 'default elflord peachpuff desert256 breeze morning' | |
let c2 = 'darkblue gothic aqua earth black_angus relaxedgreen' | |
let c3 = 'darkblack freya motus impact less chocolateliquor' | |
let s:mycolors = split(c1.' '.c2.' '.c3) | |
echo 'List of colors set from built-in names' | |
elseif a:args == 'now' | |
call s:HourColor() | |
else | |
let s:mycolors = split(a:args) | |
echo 'List of colors set from argument (space-separated names)' | |
endif | |
endfunction | |
command! -nargs=* SetColors call s:SetColors('<args>') | |
" Set next/previous/random (how = 1/-1/0) color from our list of colors. | |
" The 'random' index is actually set from the current time in seconds. | |
" Global (no 's:') so can easily call from command line. | |
function! NextColor(how) | |
call s:NextColor(a:how, 1) | |
endfunction | |
" Helper function for NextColor(), allows echoing of the color name to be | |
" disabled. | |
function! s:NextColor(how, echo_color) | |
if len(s:mycolors) == 0 | |
call s:SetColors('all') | |
endif | |
if exists('g:colors_name') | |
let current = index(s:mycolors, g:colors_name) | |
else | |
let current = -1 | |
endif | |
let missing = [] | |
let how = a:how | |
for i in range(len(s:mycolors)) | |
if how == 0 | |
let current = localtime() % len(s:mycolors) | |
let how = 1 " in case random color does not exist | |
else | |
let current += how | |
if !(0 <= current && current < len(s:mycolors)) | |
let current = (how>0 ? 0 : len(s:mycolors)-1) | |
endif | |
endif | |
try | |
execute 'colorscheme '.s:mycolors[current] | |
break | |
catch /E185:/ | |
call add(missing, s:mycolors[current]) | |
endtry | |
endfor | |
redraw | |
if len(missing) > 0 | |
echo 'Error: colorscheme not found:' join(missing) | |
endif | |
if (a:echo_color) | |
echo g:colors_name | |
endif | |
endfunction | |
nnoremap <F8> :call NextColor(1)<CR> | |
nnoremap <S-F8> :call NextColor(-1)<CR> | |
nnoremap <A-F8> :call NextColor(0)<CR> | |
" Set color scheme according to current time of day. | |
function! s:HourColor() | |
let hr = str2nr(strftime('%H')) | |
if hr <= 3 | |
let i = 0 | |
elseif hr <= 7 | |
let i = 1 | |
elseif hr <= 14 | |
let i = 2 | |
elseif hr <= 18 | |
let i = 3 | |
else | |
let i = 4 | |
endif | |
let nowcolors = 'elflord morning desert evening pablo' | |
execute 'colorscheme '.split(nowcolors)[i] | |
redraw | |
echo g:colors_name | |
endfunction |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment