我的 VIMRC

2014-01-09 23:36:44   最后更新: 2020-01-17 21:53:25   访问数量:1813




"VIMRC"{{{ autocmd! bufwritepost _vimrc source % set nocompatible source $VIMRUNTIME/vimrc_example.vim syntax enable syntax on set showmatch set fenc=utf-8 set fencs=utf-8,gbk,usc-bom,chinese,latin-1 set tags=./tags,./../tags,./../../tags,./../../../tags,./../../../../tags,./../../../../../tags set nu! set hlsearch set ignorecase set smartcase set autoindent set backspace=indent,eol,start set expandtab set textwidth=0 set tabstop=4 set softtabstop=4 set shiftwidth=4 set foldmethod=marker set guifont=monaco:h12 set fileencoding=utf-8 set encoding=utf-8 set langmenu=zh_CN.UTF-8 colorscheme peachpuff set nobackup set noundofile "set backupext=.bak "set patchmode=.beg "set backupdir=~/.vim/backup " <CTRL>+P 弹出自动补全提示框,提示框颜色 hi Pmenu ctermfg=black ctermbg=lightblue guibg=#444444 guifg=#ffffff hi PmenuSel ctermfg=7 ctermbg=4 guibg=#555555 guifg=#ffffff " Matched brackets hi MatchParen ctermfg=7 ctermbg=white guibg=#555555 guifg=#ffffff hi Visual term=reverse ctermbg=black guibg=#353535 hi VisualNOS term=underline,bold cterm=underline,bold gui=underline,bold hi Search term=reverse ctermbg=Yellow ctermfg=Black guibg=lightYellow guifg=Black au InsertEnter * hi StatusLine cterm=bold ctermfg=blue ctermbg=yellow gui=none au InsertLeave * hi StatusLine cterm=bold ctermfg=yellow ctermbg=lightblue gui=none highlight colorcolumn ctermbg=blue set colorcolumn=81 highlight TabLine term=underline cterm=bold ctermbg=lightblue ctermfg=yellow highlight TabLineSel term=bold cterm=bold ctermbg=black ctermfg=white highlight TabLineFill term=bold cterm=bold ctermbg=lightblue highlight Folded ctermfg=yellow set mouse-=a " 状态栏 set laststatus=2 " 总是显示状态栏 highlight StatusLine cterm=bold ctermfg=yellow ctermbg=lightblue " 获取当前路径,将$HOME转化为~ function! CurDir() let curdir = substitute(getcwd(), $HOME, "~", "g") return curdir endfunction " 设置 tabedit 标题样式 set tabline=%!MyTabLine() " custom tab pages line function MyTabLine() "{{{ let s = '' " complete tabline goes here " loop through each tab page for t in range(tabpagenr('$')) " set highlight if t + 1 == tabpagenr() let s .= '%#TabLineSel#' else let s .= '%#TabLine#' endif " set the tab page number (for mouse clicks) let s .= '%' . (t + 1) . 'T' let s .= ' ' " set page number string let s .= t + 1 . ' ' " get buffer names and statuses let n = '' "temp string for buffer names while we loop and check buftype let m = 0 " &modified counter let bc = len(tabpagebuflist(t + 1)) "counter to avoid last ' ' " loop through each buffer in a tab for b in tabpagebuflist(t + 1) " buffer types: quickfix gets a [Q], help gets [H]{base fname} " others get 1dir/2dir/3dir/fname shortened to 1/2/3/fname if getbufvar( b, "&buftype" ) == 'help' let n .= '[H]' . fnamemodify( bufname(b), ':t:s/.txt$//' ) elseif getbufvar( b, "&buftype" ) == 'quickfix' let n .= '[Q]' else let n .= pathshorten(bufname(b)) endif " check and ++ tab's &modified count if getbufvar( b, "&modified" ) let m += 1 endif " no final ' ' added...formatting looks better done later if bc > 1 let n .= ' ' endif let bc -= 1 endfor " add modified label [n+] where n pages in tab are modified if m > 0 let s .= '[' . m . '+]' endif " select the highlighting for the buffer names " my default highlighting only underlines the active tab " buffer names. if t + 1 == tabpagenr() let s .= '%#TabLineSel#' else let s .= '%#TabLine#' endif " add buffer names if n == '' let s.= '[New]' else let s .= n endif " switch to no underlining and add final space to buffer list let s .= ' ' endfor " after the last tab fill with TabLineFill and reset tab page nr let s .= '%#TabLineFill#%T' " right-align the label to close the current tab page return s endfunction "}}} set wildmode=longest:full set wildmenu set ruler set statusline=[%n]\ pwd:%{CurDir()}\ \|\ %f%m%r%h\ \|%=\|\ %l,%c\ %p%%\ \|\ ascii=%b%{((&fenc==\"\")?\"\":\"\ \|\ \".&fenc)}\ \|\ %{$USER}\@\%{hostname()} hi MatchParen ctermfg=black ctermbg=white nmap ff gt nmap FF gT nmap # #N nmap zl zt nmap : : if &diff highlight DiffAdd cterm=bold ctermfg=14 ctermbg=8 gui=none guifg=bg guibg=Red highlight DiffDelete cterm=bold ctermfg=16 ctermbg=8 gui=none guifg=bg guibg=Red highlight DiffChange cterm=bold ctermfg=46 ctermbg=5 gui=none guifg=bg guibg=Red highlight DiffText cterm=bold ctermfg=11 ctermbg=13 gui=none guifg=bg guibg=Red endif "}}}

 

 

" MATCHIT.VIM {{{ " matchit.vim: (global plugin) Extended "%" matching " Last Change: Fri Jan 25 10:00 AM 2008 EST " Maintainer: Benji Fisher PhD <benji@member.AMS.org> " Version: 1.13.2, for Vim 6.3+ " URL: http://www.vim.org/script.php?script_id=39 " Documentation: " The documentation is in a separate file, matchit.txt . " Credits: " Vim editor by Bram Moolenaar (Thanks, Bram!) " Original script and design by Raul Segura Acevedo " Support for comments by Douglas Potts " Support for back references and other improvements by Benji Fisher " Support for many languages by Johannes Zellner " Suggestions for improvement, bug reports, and support for additional " languages by Jordi-Albert Batalla, Neil Bird, Servatius Brandt, Mark " Collett, Stephen Wall, Dany St-Amant, Yuheng Xie, and Johannes Zellner. " Debugging: " If you'd like to try the built-in debugging commands... " :MatchDebug to activate debugging for the current buffer " This saves the values of several key script variables as buffer-local " variables. See the MatchDebug() function, below, for details. " TODO: I should think about multi-line patterns for b:match_words. " This would require an option: how many lines to scan (default 1). " This would be useful for Python, maybe also for *ML. " TODO: Maybe I should add a menu so that people will actually use some of " the features that I have implemented. " TODO: Eliminate the MultiMatch function. Add yet another argument to " Match_wrapper() instead. " TODO: Allow :let b:match_words = '\(\(foo\)\(bar\)\):\3\2:end\1' " TODO: Make backrefs safer by using '\V' (very no-magic). " TODO: Add a level of indirection, so that custom % scripts can use my " work but extend it. " allow user to prevent loading " and prevent duplicate loading if exists("loaded_matchit") || &cp finish endif let loaded_matchit = 1 let s:last_mps = "" let s:last_words = ":" let s:save_cpo = &cpo set cpo&vim nnoremap <silent> % :<C-U>call <SID>Match_wrapper('',1,'n') <CR> nnoremap <silent> g% :<C-U>call <SID>Match_wrapper('',0,'n') <CR> vnoremap <silent> % :<C-U>call <SID>Match_wrapper('',1,'v') <CR>m'gv`` vnoremap <silent> g% :<C-U>call <SID>Match_wrapper('',0,'v') <CR>m'gv`` onoremap <silent> % v:<C-U>call <SID>Match_wrapper('',1,'o') <CR> onoremap <silent> g% v:<C-U>call <SID>Match_wrapper('',0,'o') <CR> " Analogues of [{ and ]} using matching patterns: nnoremap <silent> [% :<C-U>call <SID>MultiMatch("bW", "n") <CR> nnoremap <silent> ]% :<C-U>call <SID>MultiMatch("W", "n") <CR> vmap [% <Esc>[%m'gv`` vmap ]% <Esc>]%m'gv`` " vnoremap <silent> [% :<C-U>call <SID>MultiMatch("bW", "v") <CR>m'gv`` " vnoremap <silent> ]% :<C-U>call <SID>MultiMatch("W", "v") <CR>m'gv`` onoremap <silent> [% v:<C-U>call <SID>MultiMatch("bW", "o") <CR> onoremap <silent> ]% v:<C-U>call <SID>MultiMatch("W", "o") <CR> " text object: vmap a% <Esc>[%v]% " Auto-complete mappings: (not yet "ready for prime time") " TODO Read :help write-plugin for the "right" way to let the user " specify a key binding. " let g:match_auto = '<C-]>' " let g:match_autoCR = '<C-CR>' " if exists("g:match_auto") " execute "inoremap " . g:match_auto . ' x<Esc>"=<SID>Autocomplete()<CR>Pls' " endif " if exists("g:match_autoCR") " execute "inoremap " . g:match_autoCR . ' <CR><C-R>=<SID>Autocomplete()<CR>' " endif " if exists("g:match_gthhoh") " execute "inoremap " . g:match_gthhoh . ' <C-O>:call <SID>Gthhoh()<CR>' " endif " gthhoh = "Get the heck out of here!" let s:notslash = '\\\@<!\%(\\\\\)*' function! s:Match_wrapper(word, forward, mode) range " In s:CleanUp(), :execute "set" restore_options . let restore_options = (&ic ? " " : " no") . "ignorecase" if exists("b:match_ignorecase") let &ignorecase = b:match_ignorecase endif let restore_options = " ve=" . &ve . restore_options set ve= " If this function was called from Visual mode, make sure that the cursor " is at the correct end of the Visual range: if a:mode == "v" execute "normal! gv\<Esc>" endif " In s:CleanUp(), we may need to check whether the cursor moved forward. let startline = line(".") let startcol = col(".") " Use default behavior if called with a count. if v:count exe "normal! " . v:count . "%" return s:CleanUp(restore_options, a:mode, startline, startcol) end " First step: if not already done, set the script variables " s:do_BR flag for whether there are backrefs " s:pat parsed version of b:match_words " s:all regexp based on s:pat and the default groups " if !exists("b:match_words") || b:match_words == "" let match_words = "" " Allow b:match_words = "GetVimMatchWords()" . elseif b:match_words =~ ":" let match_words = b:match_words else execute "let match_words =" b:match_words endif " Thanks to Preben "Peppe" Guldberg and Bram Moolenaar for this suggestion! if (match_words != s:last_words) || (&mps != s:last_mps) || \ exists("b:match_debug") let s:last_words = match_words let s:last_mps = &mps " The next several lines were here before " BF started messing with this script. " quote the special chars in 'matchpairs', replace [,:] with \| and then " append the builtin pairs (/*, */, #if, #ifdef, #else, #elif, #endif) " let default = substitute(escape(&mps, '[$^.*~\\/?]'), '[,:]\+', " \ '\\|', 'g').'\|\/\*\|\*\/\|#if\>\|#ifdef\>\|#else\>\|#elif\>\|#endif\>' let default = escape(&mps, '[$^.*~\\/?]') . (strlen(&mps) ? "," : "") . \ '\/\*:\*\/,#if\%(def\)\=:#else\>:#elif\>:#endif\>' " s:all = pattern with all the keywords let match_words = match_words . (strlen(match_words) ? "," : "") . default if match_words !~ s:notslash . '\\\d' let s:do_BR = 0 let s:pat = match_words else let s:do_BR = 1 let s:pat = s:ParseWords(match_words) endif let s:all = substitute(s:pat, s:notslash . '\zs[,:]\+', '\\|', 'g') let s:all = '\%(' . s:all . '\)' " let s:all = '\%(' . substitute(s:all, '\\\ze[,:]', '', 'g') . '\)' if exists("b:match_debug") let b:match_pat = s:pat endif endif " Second step: set the following local variables: " matchline = line on which the cursor started " curcol = number of characters before match " prefix = regexp for start of line to start of match " suffix = regexp for end of match to end of line " Require match to end on or after the cursor and prefer it to " start on or before the cursor. let matchline = getline(startline) if a:word != '' " word given if a:word !~ s:all echohl WarningMsg|echo 'Missing rule for word:"'.a:word.'"'|echohl NONE return s:CleanUp(restore_options, a:mode, startline, startcol) endif let matchline = a:word let curcol = 0 let prefix = '^\%(' let suffix = '\)$' " Now the case when "word" is not given else " Find the match that ends on or after the cursor and set curcol. let regexp = s:Wholematch(matchline, s:all, startcol-1) let curcol = match(matchline, regexp) " If there is no match, give up. if curcol == -1 return s:CleanUp(restore_options, a:mode, startline, startcol) endif let endcol = matchend(matchline, regexp) let suf = strlen(matchline) - endcol let prefix = (curcol ? '^.*\%' . (curcol + 1) . 'c\%(' : '^\%(') let suffix = (suf ? '\)\%' . (endcol + 1) . 'c.*$' : '\)$') endif if exists("b:match_debug") let b:match_match = matchstr(matchline, regexp) let b:match_col = curcol+1 endif " Third step: Find the group and single word that match, and the original " (backref) versions of these. Then, resolve the backrefs. " Set the following local variable: " group = colon-separated list of patterns, one of which matches " = ini:mid:fin or ini:fin " " Reconstruct the version with unresolved backrefs. let patBR = substitute(match_words.',', \ s:notslash.'\zs[,:]*,[,:]*', ',', 'g') let patBR = substitute(patBR, s:notslash.'\zs:\{2,}', ':', 'g') " Now, set group and groupBR to the matching group: 'if:endif' or " 'while:endwhile' or whatever. A bit of a kluge: s:Choose() returns " group . "," . groupBR, and we pick it apart. let group = s:Choose(s:pat, matchline, ",", ":", prefix, suffix, patBR) let i = matchend(group, s:notslash . ",") let groupBR = strpart(group, i) let group = strpart(group, 0, i-1) " Now, matchline =~ prefix . substitute(group,':','\|','g') . suffix if s:do_BR " Do the hard part: resolve those backrefs! let group = s:InsertRefs(groupBR, prefix, group, suffix, matchline) endif if exists("b:match_debug") let b:match_wholeBR = groupBR let i = matchend(groupBR, s:notslash . ":") let b:match_iniBR = strpart(groupBR, 0, i-1) endif " Fourth step: Set the arguments for searchpair(). let i = matchend(group, s:notslash . ":") let j = matchend(group, '.*' . s:notslash . ":") let ini = strpart(group, 0, i-1) let mid = substitute(strpart(group, i,j-i-1), s:notslash.'\zs:', '\\|', 'g') let fin = strpart(group, j) "Un-escape the remaining , and : characters. let ini = substitute(ini, s:notslash . '\zs\\\(:\|,\)', '\1', 'g') let mid = substitute(mid, s:notslash . '\zs\\\(:\|,\)', '\1', 'g') let fin = substitute(fin, s:notslash . '\zs\\\(:\|,\)', '\1', 'g') " searchpair() requires that these patterns avoid \(\) groups. let ini = substitute(ini, s:notslash . '\zs\\(', '\\%(', 'g') let mid = substitute(mid, s:notslash . '\zs\\(', '\\%(', 'g') let fin = substitute(fin, s:notslash . '\zs\\(', '\\%(', 'g') " Set mid. This is optimized for readability, not micro-efficiency! if a:forward && matchline =~ prefix . fin . suffix \ || !a:forward && matchline =~ prefix . ini . suffix let mid = "" endif " Set flag. This is optimized for readability, not micro-efficiency! if a:forward && matchline =~ prefix . fin . suffix \ || !a:forward && matchline !~ prefix . ini . suffix let flag = "bW" else let flag = "W" endif " Set skip. if exists("b:match_skip") let skip = b:match_skip elseif exists("b:match_comment") " backwards compatibility and testing! let skip = "r:" . b:match_comment else let skip = 's:comment\|string' endif let skip = s:ParseSkip(skip) if exists("b:match_debug") let b:match_ini = ini let b:match_tail = (strlen(mid) ? mid.'\|' : '') . fin endif " Fifth step: actually start moving the cursor and call searchpair(). " Later, :execute restore_cursor to get to the original screen. let restore_cursor = virtcol(".") . "|" normal! g0 let restore_cursor = line(".") . "G" . virtcol(".") . "|zs" . restore_cursor normal! H let restore_cursor = "normal!" . line(".") . "Gzt" . restore_cursor execute restore_cursor call cursor(0, curcol + 1) " normal! 0 " if curcol " execute "normal!" . curcol . "l" " endif if skip =~ 'synID' && !(has("syntax") && exists("g:syntax_on")) let skip = "0" else execute "if " . skip . "| let skip = '0' | endif" endif let sp_return = searchpair(ini, mid, fin, flag, skip) let final_position = "call cursor(" . line(".") . "," . col(".") . ")" " Restore cursor position and original screen. execute restore_cursor normal! m' if sp_return > 0 execute final_position endif return s:CleanUp(restore_options, a:mode, startline, startcol, mid.'\|'.fin) endfun " Restore options and do some special handling for Operator-pending mode. " The optional argument is the tail of the matching group. fun! s:CleanUp(options, mode, startline, startcol, ...) execute "set" a:options " Open folds, if appropriate. if a:mode != "o" if &foldopen =~ "percent" normal! zv endif " In Operator-pending mode, we want to include the whole match " (for example, d%). " This is only a problem if we end up moving in the forward direction. elseif (a:startline < line(".")) || \ (a:startline == line(".") && a:startcol < col(".")) if a:0 " Check whether the match is a single character. If not, move to the " end of the match. let matchline = getline(".") let currcol = col(".") let regexp = s:Wholematch(matchline, a:1, currcol-1) let endcol = matchend(matchline, regexp) if endcol > currcol " This is NOT off by one! execute "normal!" . (endcol - currcol) . "l" endif endif " a:0 endif " a:mode != "o" && etc. return 0 endfun " Example (simplified HTML patterns): if " a:groupBR = '<\(\k\+\)>:</\1>' " a:prefix = '^.\{3}\(' " a:group = '<\(\k\+\)>:</\(\k\+\)>' " a:suffix = '\).\{2}$' " a:matchline = "123<tag>12" or "123</tag>12" " then extract "tag" from a:matchline and return "<tag>:</tag>" . fun! s:InsertRefs(groupBR, prefix, group, suffix, matchline) if a:matchline !~ a:prefix . \ substitute(a:group, s:notslash . '\zs:', '\\|', 'g') . a:suffix return a:group endif let i = matchend(a:groupBR, s:notslash . ':') let ini = strpart(a:groupBR, 0, i-1) let tailBR = strpart(a:groupBR, i) let word = s:Choose(a:group, a:matchline, ":", "", a:prefix, a:suffix, \ a:groupBR) let i = matchend(word, s:notslash . ":") let wordBR = strpart(word, i) let word = strpart(word, 0, i-1) " Now, a:matchline =~ a:prefix . word . a:suffix if wordBR != ini let table = s:Resolve(ini, wordBR, "table") else " let table = "----------" let table = "" let d = 0 while d < 10 if tailBR =~ s:notslash . '\\' . d " let table[d] = d let table = table . d else let table = table . "-" endif let d = d + 1 endwhile endif let d = 9 while d if table[d] != "-" let backref = substitute(a:matchline, a:prefix.word.a:suffix, \ '\'.table[d], "") " Are there any other characters that should be escaped? let backref = escape(backref, '*,:') execute s:Ref(ini, d, "start", "len") let ini = strpart(ini, 0, start) . backref . strpart(ini, start+len) let tailBR = substitute(tailBR, s:notslash . '\zs\\' . d, \ escape(backref, '\\'), 'g') endif let d = d-1 endwhile if exists("b:match_debug") if s:do_BR let b:match_table = table let b:match_word = word else let b:match_table = "" let b:match_word = "" endif endif return ini . ":" . tailBR endfun " Input a comma-separated list of groups with backrefs, such as " a:groups = '\(foo\):end\1,\(bar\):end\1' " and return a comma-separated list of groups with backrefs replaced: " return '\(foo\):end\(foo\),\(bar\):end\(bar\)' fun! s:ParseWords(groups) let groups = substitute(a:groups.",", s:notslash.'\zs[,:]*,[,:]*', ',', 'g') let groups = substitute(groups, s:notslash . '\zs:\{2,}', ':', 'g') let parsed = "" while groups =~ '[^,:]' let i = matchend(groups, s:notslash . ':') let j = matchend(groups, s:notslash . ',') let ini = strpart(groups, 0, i-1) let tail = strpart(groups, i, j-i-1) . ":" let groups = strpart(groups, j) let parsed = parsed . ini let i = matchend(tail, s:notslash . ':') while i != -1 " In 'if:else:endif', ini='if' and word='else' and then word='endif'. let word = strpart(tail, 0, i-1) let tail = strpart(tail, i) let i = matchend(tail, s:notslash . ':') let parsed = parsed . ":" . s:Resolve(ini, word, "word") endwhile " Now, tail has been used up. let parsed = parsed . "," endwhile " groups =~ '[^,:]' let parsed = substitute(parsed, ',$', '', '') return parsed endfun " TODO I think this can be simplified and/or made more efficient. " TODO What should I do if a:start is out of range? " Return a regexp that matches all of a:string, such that " matchstr(a:string, regexp) represents the match for a:pat that starts " as close to a:start as possible, before being preferred to after, and " ends after a:start . " Usage: " let regexp = s:Wholematch(getline("."), 'foo\|bar', col(".")-1) " let i = match(getline("."), regexp) " let j = matchend(getline("."), regexp) " let match = matchstr(getline("."), regexp) fun! s:Wholematch(string, pat, start) let group = '\%(' . a:pat . '\)' let prefix = (a:start ? '\(^.*\%<' . (a:start + 2) . 'c\)\zs' : '^') let len = strlen(a:string) let suffix = (a:start+1 < len ? '\(\%>'.(a:start+1).'c.*$\)\@=' : '$') if a:string !~ prefix . group . suffix let prefix = '' endif return prefix . group . suffix endfun " No extra arguments: s:Ref(string, d) will " find the d'th occurrence of '\(' and return it, along with everything up " to and including the matching '\)'. " One argument: s:Ref(string, d, "start") returns the index of the start " of the d'th '\(' and any other argument returns the length of the group. " Two arguments: s:Ref(string, d, "foo", "bar") returns a string to be " executed, having the effect of " :let foo = s:Ref(string, d, "start") " :let bar = s:Ref(string, d, "len") fun! s:Ref(string, d, ...) let len = strlen(a:string) if a:d == 0 let start = 0 else let cnt = a:d let match = a:string while cnt let cnt = cnt - 1 let index = matchend(match, s:notslash . '\\(') if index == -1 return "" endif let match = strpart(match, index) endwhile let start = len - strlen(match) if a:0 == 1 && a:1 == "start" return start - 2 endif let cnt = 1 while cnt let index = matchend(match, s:notslash . '\\(\|\\)') - 1 if index == -2 return "" endif " Increment if an open, decrement if a ')': let cnt = cnt + (match[index]=="(" ? 1 : -1) " ')' " let cnt = stridx('0(', match[index]) + cnt let match = strpart(match, index+1) endwhile let start = start - 2 let len = len - start - strlen(match) endif if a:0 == 1 return len elseif a:0 == 2 return "let " . a:1 . "=" . start . "| let " . a:2 . "=" . len else return strpart(a:string, start, len) endif endfun " Count the number of disjoint copies of pattern in string. " If the pattern is a literal string and contains no '0' or '1' characters " then s:Count(string, pattern, '0', '1') should be faster than " s:Count(string, pattern). fun! s:Count(string, pattern, ...) let pat = escape(a:pattern, '\\') if a:0 > 1 let foo = substitute(a:string, '[^'.a:pattern.']', "a:1", "g") let foo = substitute(a:string, pat, a:2, "g") let foo = substitute(foo, '[^' . a:2 . ']', "", "g") return strlen(foo) endif let result = 0 let foo = a:string let index = matchend(foo, pat) while index != -1 let result = result + 1 let foo = strpart(foo, index) let index = matchend(foo, pat) endwhile return result endfun " s:Resolve('\(a\)\(b\)', '\(c\)\2\1\1\2') should return table.word, where " word = '\(c\)\(b\)\(a\)\3\2' and table = '-32-------'. That is, the first " '\1' in target is replaced by '\(a\)' in word, table[1] = 3, and this " indicates that all other instances of '\1' in target are to be replaced " by '\3'. The hard part is dealing with nesting... " Note that ":" is an illegal character for source and target, " unless it is preceded by "\". fun! s:Resolve(source, target, output) let word = a:target let i = matchend(word, s:notslash . '\\\d') - 1 let table = "----------" while i != -2 " There are back references to be replaced. let d = word[i] let backref = s:Ref(a:source, d) " The idea is to replace '\d' with backref. Before we do this, " replace any \(\) groups in backref with :1, :2, ... if they " correspond to the first, second, ... group already inserted " into backref. Later, replace :1 with \1 and so on. The group " number w+b within backref corresponds to the group number " s within a:source. " w = number of '\(' in word before the current one let w = s:Count( \ substitute(strpart(word, 0, i-1), '\\\\', '', 'g'), '\(', '1') let b = 1 " number of the current '\(' in backref let s = d " number of the current '\(' in a:source while b <= s:Count(substitute(backref, '\\\\', '', 'g'), '\(', '1') \ && s < 10 if table[s] == "-" if w + b < 10 " let table[s] = w + b let table = strpart(table, 0, s) . (w+b) . strpart(table, s+1) endif let b = b + 1 let s = s + 1 else execute s:Ref(backref, b, "start", "len") let ref = strpart(backref, start, len) let backref = strpart(backref, 0, start) . ":". table[s] \ . strpart(backref, start+len) let s = s + s:Count(substitute(ref, '\\\\', '', 'g'), '\(', '1') endif endwhile let word = strpart(word, 0, i-1) . backref . strpart(word, i+1) let i = matchend(word, s:notslash . '\\\d') - 1 endwhile let word = substitute(word, s:notslash . '\zs:', '\\', 'g') if a:output == "table" return table elseif a:output == "word" return word else return table . word endif endfun " Assume a:comma = ",". Then the format for a:patterns and a:1 is " a:patterns = "<pat1>,<pat2>,..." " a:1 = "<alt1>,<alt2>,..." " If <patn> is the first pattern that matches a:string then return <patn> " if no optional arguments are given; return <patn>,<altn> if a:1 is given. fun! s:Choose(patterns, string, comma, branch, prefix, suffix, ...) let tail = (a:patterns =~ a:comma."$" ? a:patterns : a:patterns . a:comma) let i = matchend(tail, s:notslash . a:comma) if a:0 let alttail = (a:1 =~ a:comma."$" ? a:1 : a:1 . a:comma) let j = matchend(alttail, s:notslash . a:comma) endif let current = strpart(tail, 0, i-1) if a:branch == "" let currpat = current else let currpat = substitute(current, s:notslash . a:branch, '\\|', 'g') endif while a:string !~ a:prefix . currpat . a:suffix let tail = strpart(tail, i) let i = matchend(tail, s:notslash . a:comma) if i == -1 return -1 endif let current = strpart(tail, 0, i-1) if a:branch == "" let currpat = current else let currpat = substitute(current, s:notslash . a:branch, '\\|', 'g') endif if a:0 let alttail = strpart(alttail, j) let j = matchend(alttail, s:notslash . a:comma) endif endwhile if a:0 let current = current . a:comma . strpart(alttail, 0, j-1) endif return current endfun " Call this function to turn on debugging information. Every time the main " script is run, buffer variables will be saved. These can be used directly " or viewed using the menu items below. if !exists(":MatchDebug") command! -nargs=0 MatchDebug call s:Match_debug() endif fun! s:Match_debug() let b:match_debug = 1 " Save debugging information. " pat = all of b:match_words with backrefs parsed amenu &Matchit.&pat :echo b:match_pat<CR> " match = bit of text that is recognized as a match amenu &Matchit.&match :echo b:match_match<CR> " curcol = cursor column of the start of the matching text amenu &Matchit.&curcol :echo b:match_col<CR> " wholeBR = matching group, original version amenu &Matchit.wh&oleBR :echo b:match_wholeBR<CR> " iniBR = 'if' piece, original version amenu &Matchit.ini&BR :echo b:match_iniBR<CR> " ini = 'if' piece, with all backrefs resolved from match amenu &Matchit.&ini :echo b:match_ini<CR> " tail = 'else\|endif' piece, with all backrefs resolved from match amenu &Matchit.&tail :echo b:match_tail<CR> " fin = 'endif' piece, with all backrefs resolved from match amenu &Matchit.&word :echo b:match_word<CR> " '\'.d in ini refers to the same thing as '\'.table[d] in word. amenu &Matchit.t&able :echo '0:' . b:match_table . ':9'<CR> endfun " Jump to the nearest unmatched "(" or "if" or "<tag>" if a:spflag == "bW" " or the nearest unmatched "</tag>" or "endif" or ")" if a:spflag == "W". " Return a "mark" for the original position, so that " let m = MultiMatch("bW", "n") ... execute m " will return to the original position. If there is a problem, do not " move the cursor and return "", unless a count is given, in which case " go up or down as many levels as possible and again return "". " TODO This relies on the same patterns as % matching. It might be a good " idea to give it its own matching patterns. fun! s:MultiMatch(spflag, mode) if !exists("b:match_words") || b:match_words == "" return "" end let restore_options = (&ic ? "" : "no") . "ignorecase" if exists("b:match_ignorecase") let &ignorecase = b:match_ignorecase endif let startline = line(".") let startcol = col(".") " First step: if not already done, set the script variables " s:do_BR flag for whether there are backrefs " s:pat parsed version of b:match_words " s:all regexp based on s:pat and the default groups " This part is copied and slightly modified from s:Match_wrapper(). let default = escape(&mps, '[$^.*~\\/?]') . (strlen(&mps) ? "," : "") . \ '\/\*:\*\/,#if\%(def\)\=:#else\>:#elif\>:#endif\>' " Allow b:match_words = "GetVimMatchWords()" . if b:match_words =~ ":" let match_words = b:match_words else execute "let match_words =" b:match_words endif if (match_words != s:last_words) || (&mps != s:last_mps) || \ exists("b:match_debug") let s:last_words = match_words let s:last_mps = &mps if match_words !~ s:notslash . '\\\d' let s:do_BR = 0 let s:pat = match_words else let s:do_BR = 1 let s:pat = s:ParseWords(match_words) endif let s:all = '\%(' . substitute(s:pat . (strlen(s:pat)?",":"") . default, \ '[,:]\+','\\|','g') . '\)' if exists("b:match_debug") let b:match_pat = s:pat endif endif " Second step: figure out the patterns for searchpair() " and save the screen, cursor position, and 'ignorecase'. " - TODO: A lot of this is copied from s:Match_wrapper(). " - maybe even more functionality should be split off " - into separate functions! let cdefault = (s:pat =~ '[^,]$' ? "," : "") . default let open = substitute(s:pat . cdefault, \ s:notslash . '\zs:.\{-}' . s:notslash . ',', '\\),\\(', 'g') let open = '\(' . substitute(open, s:notslash . '\zs:.*$', '\\)', '') let close = substitute(s:pat . cdefault, \ s:notslash . '\zs,.\{-}' . s:notslash . ':', '\\),\\(', 'g') let close = substitute(close, '^.\{-}' . s:notslash . ':', '\\(', '') . '\)' if exists("b:match_skip") let skip = b:match_skip elseif exists("b:match_comment") " backwards compatibility and testing! let skip = "r:" . b:match_comment else let skip = 's:comment\|string' endif let skip = s:ParseSkip(skip) " let restore_cursor = line(".") . "G" . virtcol(".") . "|" " normal! H " let restore_cursor = "normal!" . line(".") . "Gzt" . restore_cursor let restore_cursor = virtcol(".") . "|" normal! g0 let restore_cursor = line(".") . "G" . virtcol(".") . "|zs" . restore_cursor normal! H let restore_cursor = "normal!" . line(".") . "Gzt" . restore_cursor execute restore_cursor " Third step: call searchpair(). " Replace '\('--but not '\\('--with '\%(' and ',' with '\|'. let openpat = substitute(open, '\(\\\@<!\(\\\\\)*\)\@<=\\(', '\\%(', 'g') let openpat = substitute(openpat, ',', '\\|', 'g') let closepat = substitute(close, '\(\\\@<!\(\\\\\)*\)\@<=\\(', '\\%(', 'g') let closepat = substitute(closepat, ',', '\\|', 'g') if skip =~ 'synID' && !(has("syntax") && exists("g:syntax_on")) let skip = '0' else execute "if " . skip . "| let skip = '0' | endif" endif mark ' let level = v:count1 while level if searchpair(openpat, '', closepat, a:spflag, skip) < 1 call s:CleanUp(restore_options, a:mode, startline, startcol) return "" endif let level = level - 1 endwhile " Restore options and return a string to restore the original position. call s:CleanUp(restore_options, a:mode, startline, startcol) return restore_cursor endfun " Search backwards for "if" or "while" or "<tag>" or ... " and return "endif" or "endwhile" or "</tag>" or ... . " For now, this uses b:match_words and the same script variables " as s:Match_wrapper() . Later, it may get its own patterns, " either from a buffer variable or passed as arguments. " fun! s:Autocomplete() " echo "autocomplete not yet implemented :-(" " if !exists("b:match_words") || b:match_words == "" " return "" " end " let startpos = s:MultiMatch("bW") " " if startpos == "" " return "" " endif " " - TODO: figure out whether 'if' or '<tag>' matched, and construct " " - the appropriate closing. " let matchline = getline(".") " let curcol = col(".") - 1 " " - TODO: Change the s:all argument if there is a new set of match pats. " let regexp = s:Wholematch(matchline, s:all, curcol) " let suf = strlen(matchline) - matchend(matchline, regexp) " let prefix = (curcol ? '^.\{' . curcol . '}\%(' : '^\%(') " let suffix = (suf ? '\).\{' . suf . '}$' : '\)$') " " Reconstruct the version with unresolved backrefs. " let patBR = substitute(b:match_words.',', '[,:]*,[,:]*', ',', 'g') " let patBR = substitute(patBR, ':\{2,}', ':', "g") " " Now, set group and groupBR to the matching group: 'if:endif' or " " 'while:endwhile' or whatever. " let group = s:Choose(s:pat, matchline, ",", ":", prefix, suffix, patBR) " let i = matchend(group, s:notslash . ",") " let groupBR = strpart(group, i) " let group = strpart(group, 0, i-1) " " Now, matchline =~ prefix . substitute(group,':','\|','g') . suffix " if s:do_BR " let group = s:InsertRefs(groupBR, prefix, group, suffix, matchline) " endif " " let g:group = group " " " - TODO: Construct the closing from group. " let fake = "end" . expand("<cword>") " execute startpos " return fake " endfun " Close all open structures. "Get the heck out of here!" " fun! s:Gthhoh() " let close = s:Autocomplete() " while strlen(close) " put=close " let close = s:Autocomplete() " endwhile " endfun " Parse special strings as typical skip arguments for searchpair(): " s:foo becomes (current syntax item) =~ foo " S:foo becomes (current syntax item) !~ foo " r:foo becomes (line before cursor) =~ foo " R:foo becomes (line before cursor) !~ foo fun! s:ParseSkip(str) let skip = a:str if skip[1] == ":" if skip[0] == "s" let skip = "synIDattr(synID(line('.'),col('.'),1),'name') =~? '" . \ strpart(skip,2) . "'" elseif skip[0] == "S" let skip = "synIDattr(synID(line('.'),col('.'),1),'name') !~? '" . \ strpart(skip,2) . "'" elseif skip[0] == "r" let skip = "strpart(getline('.'),0,col('.'))=~'" . strpart(skip,2). "'" elseif skip[0] == "R" let skip = "strpart(getline('.'),0,col('.'))!~'" . strpart(skip,2). "'" endif endif return skip endfun let &cpo = s:save_cpo " vim:sts=2:sw=2: }}}

 

 

"VIMRC"{{{ autocmd! bufwritepost _vimrc source % set nocompatible source $VIMRUNTIME/vimrc_example.vim syntax enable set showmatch set fenc=utf-8 set fencs=utf-8,gbk,usc-bom,chinese,latin-1 set tags=./tags,./../tags,./../../tags,./../../../tags,./../../../../tags,./../../../../../tags set nu! set hlsearch set ignorecase set smartcase set autoindent set tabstop=4 set shiftwidth=4 set foldmethod=marker set guifont=consolas:h12 set fileencoding=utf-8 syntax enable set background=light colorscheme solarized set nobackup "set backupext=.bak "set patchmode=.beg "set backupdir=~/.vim/backup " <CTRL>+P 弹出自动补全提示框,提示框颜色 hi Pmenu ctermfg=black ctermbg=lightblue guibg=#444444 guifg=#ffffff hi PmenuSel ctermfg=7 ctermbg=4 guibg=#555555 guifg=#ffffff " Matched brackets hi MatchParen ctermfg=7 ctermbg=white guibg=#555555 guifg=#ffffff hi Visual term=reverse ctermbg=black guibg=#00b1ff guifg=#000000 hi VisualNOS term=underline,bold cterm=underline,bold gui=underline,bold hi Search term=reverse ctermbg=Yellow ctermfg=Black guibg=Yellow guifg=Black au InsertLeave * hi StatusLine cterm=bold ctermfg=yellow ctermbg=lightblue guifg=#586E75 guibg=lightyellow au InsertEnter * hi StatusLine cterm=bold ctermfg=blue ctermbg=yellow guifg=#EEE8D5 guibg=#586E75 set mouse-=a " 状态栏 set laststatus=2 " 总是显示状态栏 highlight StatusLine cterm=bold ctermfg=yellow ctermbg=lightblue " 获取当前路径,将$HOME转化为~ function! CurDir() let curdir = substitute(getcwd(), $HOME, "~", "g") return curdir endfunction set wildmode=longest:full set wildmenu set linebreak set guioptions-=m set guioptions-=T set ruler set statusline=[%n]\ pwd:%{CurDir()}\ \|\ %f%m%r%h\ \|%=\|\ %l,%c\ %p%%\ \|\ ascii=%b%{((&fenc==\"\")?\"\":\"\ \|\ \".&fenc)}\ \|\ %{$USER}\@\%{hostname()} hi DiffAdd ctermfg=black ctermbg=grey cterm=BOLD "diff: 增加的行 hi DiffChange ctermfg=black ctermbg=lightcyan cterm=BOLD "diff: 改变的行 hi DiffDelete ctermbg=black cterm=BOLD "diff: 删除的行 hi DiffText ctermfg=yellow ctermbg=lightcyan cterm=BOLD "diff: 改变行里的改动文本 nmap ff gt nmap FF gT nmap # #N nmap zl zt nmap : : cd d:\DEBIN\ "}}}

 

 

"USAGE"{{{ syntax enable set background=light colorscheme solarized "}}}

 

"SOLARIZED"{{{ " Name: Solarized vim colorscheme " Author: Ethan Schoonover <es@ethanschoonover.com> " URL: http://ethanschoonover.com/solarized " (see this url for latest release & screenshots) " License: OSI approved MIT license (see end of this file) " Created: In the middle of the night " Modified: 2011 May 05 " " Usage "{{{ " " --------------------------------------------------------------------- " ABOUT: " --------------------------------------------------------------------- " Solarized is a carefully designed selective contrast colorscheme with dual " light and dark modes that runs in both GUI, 256 and 16 color modes. " " See the homepage above for screenshots and details. " " --------------------------------------------------------------------- " OPTIONS: " --------------------------------------------------------------------- " See the "solarized.txt" help file included with this colorscheme (in the " "doc" subdirectory) for information on options, usage, the Toggle Background " function and more. If you have already installed Solarized, this is available " from the Solarized menu and command line as ":help solarized" " " --------------------------------------------------------------------- " INSTALLATION: " --------------------------------------------------------------------- " Two options for installation: manual or pathogen " " MANUAL INSTALLATION OPTION: " --------------------------------------------------------------------- " " 1. Download the solarized distribution (available on the homepage above) " and unarchive the file. " 2. Move `solarized.vim` to your `.vim/colors` directory. " 3. Move each of the files in each subdirectories to the corresponding .vim " subdirectory (e.g. autoload/togglebg.vim goes into your .vim/autoload " directory as .vim/autoload/togglebg.vim). " " RECOMMENDED PATHOGEN INSTALLATION OPTION: " --------------------------------------------------------------------- " " 1. Download and install Tim Pope's Pathogen from: " https://github.com/tpope/vim-pathogen " " 2. Next, move or clone the `vim-colors-solarized` directory so that it is " a subdirectory of the `.vim/bundle` directory. " " a. **clone with git:** " " $ cd ~/.vim/bundle " $ git clone git://github.com/altercation/vim-colors-solarized.git " " b. **or move manually into the pathogen bundle directory:** " In the parent directory of vim-colors-solarized: " " $ mv vim-colors-solarized ~/.vim/bundle/ " " MODIFY VIMRC: " " After either Option 1 or Option 2 above, put the following two lines in your " .vimrc: " " syntax enable " set background=dark " colorscheme solarized " " or, for the light background mode of Solarized: " " syntax enable " set background=light " colorscheme solarized " " I like to have a different background in GUI and terminal modes, so I can use " the following if-then. However, I find vim's background autodetection to be " pretty good and, at least with MacVim, I can leave this background value " assignment out entirely and get the same results. " " if has('gui_running') " set background=light " else " set background=dark " endif " " See the Solarized homepage at http://ethanschoonover.com/solarized for " screenshots which will help you select either the light or dark background. " " --------------------------------------------------------------------- " COLOR VALUES " --------------------------------------------------------------------- " Download palettes and files from: http://ethanschoonover.com/solarized " " L\*a\*b values are canonical (White D65, Reference D50), other values are " matched in sRGB space. " " SOLARIZED HEX 16/8 TERMCOL XTERM/HEX L*A*B sRGB HSB " --------- ------- ---- ------- ----------- ---------- ----------- ----------- " base03 #002b36 8/4 brblack 234 #1c1c1c 15 -12 -12 0 43 54 193 100 21 " base02 #073642 0/4 black 235 #262626 20 -12 -12 7 54 66 192 90 26 " base01 #586e75 10/7 brgreen 240 #4e4e4e 45 -07 -07 88 110 117 194 25 46 " base00 #657b83 11/7 bryellow 241 #585858 50 -07 -07 101 123 131 195 23 51 " base0 #839496 12/6 brblue 244 #808080 60 -06 -03 131 148 150 186 13 59 " base1 #93a1a1 14/4 brcyan 245 #8a8a8a 65 -05 -02 147 161 161 180 9 63 " base2 #eee8d5 7/7 white 254 #d7d7af 92 -00 10 238 232 213 44 11 93 " base3 #fdf6e3 15/7 brwhite 230 #ffffd7 97 00 10 253 246 227 44 10 99 " yellow #b58900 3/3 yellow 136 #af8700 60 10 65 181 137 0 45 100 71 " orange #cb4b16 9/3 brred 166 #d75f00 50 50 55 203 75 22 18 89 80 " red #dc322f 1/1 red 160 #d70000 50 65 45 220 50 47 1 79 86 " magenta #d33682 5/5 magenta 125 #af005f 50 65 -05 211 54 130 331 74 83 " violet #6c71c4 13/5 brmagenta 61 #5f5faf 50 15 -45 108 113 196 237 45 77 " blue #268bd2 4/4 blue 33 #0087ff 55 -10 -45 38 139 210 205 82 82 " cyan #2aa198 6/6 cyan 37 #00afaf 60 -35 -05 42 161 152 175 74 63 " green #859900 2/2 green 64 #5f8700 60 -20 65 133 153 0 68 100 60 " " --------------------------------------------------------------------- " COLORSCHEME HACKING " --------------------------------------------------------------------- " " Useful commands for testing colorschemes: " :source $VIMRUNTIME/syntax/hitest.vim " :help highlight-groups " :help cterm-colors " :help group-name " " Useful links for developing colorschemes: " http://www.vim.org/scripts/script.php?script_id=2937 " http://vimcasts.org/episodes/creating-colorschemes-for-vim/ " http://www.frexx.de/xterm-256-notes/" " " }}} " Environment Specific Overrides "{{{ " Allow or disallow certain features based on current terminal emulator or " environment. " Terminals that support italics let s:terms_italic=[ \"rxvt", \"gnome-terminal" \] " For reference only, terminals are known to be incomptible. " Terminals that are in neither list need to be tested. let s:terms_noitalic=[ \"iTerm.app", \"Apple_Terminal" \] if has("gui_running") let s:terminal_italic=1 " TODO: could refactor to not require this at all else let s:terminal_italic=0 " terminals will be guilty until proven compatible for term in s:terms_italic if $TERM_PROGRAM =~ term let s:terminal_italic=1 endif endfor endif " }}} " Default option values"{{{ " --------------------------------------------------------------------- " s:options_list is used to autogenerate a list of all non-default options " using "call SolarizedOptions()" or with the "Generate .vimrc commands" " Solarized menu option. See the "Menus" section below for the function itself. let s:options_list=[ \'" this block of commands has been autogenerated by solarized.vim and', \'" includes the current, non-default Solarized option values.', \'" To use, place these commands in your .vimrc file (replacing any', \'" existing colorscheme commands). See also ":help solarized"', \'', \'" ------------------------------------------------------------------', \'" Solarized Colorscheme Config', \'" ------------------------------------------------------------------', \] let s:colorscheme_list=[ \'syntax enable', \'set background='.&background, \'colorscheme solarized', \] let s:defaults_list=[ \'" ------------------------------------------------------------------', \'', \'" The following items are available options, but do not need to be', \'" included in your .vimrc as they are currently set to their defaults.', \'' \] let s:lazycat_list=[ \'" lazy method of appending this onto your .vimrc ":w! >> ~/.vimrc"', \'" ------------------------------------------------------------------', \] function! s:SetOption(name,default) if type(a:default) == type(0) let l:wrap='' let l:ewrap='' else let l:wrap='"' let l:ewrap='\"' endif if !exists("g:solarized_".a:name) || g:solarized_{a:name}==a:default exe 'let g:solarized_'.a:name.'='.l:wrap.a:default.l:wrap.'"' exe 'call add(s:defaults_list, "\" let g:solarized_'.a:name.'='.l:ewrap.g:solarized_{a:name}.l:ewrap.'")' else exe 'call add(s:options_list, "let g:solarized_'.a:name.'='.l:ewrap.g:solarized_{a:name}.l:ewrap.' \"default value is '.a:default.'")' endif endfunction if ($TERM_PROGRAM ==? "apple_terminal" && &t_Co < 256) let s:solarized_termtrans_default = 1 else let s:solarized_termtrans_default = 0 endif call s:SetOption("termtrans",s:solarized_termtrans_default) call s:SetOption("degrade",0) call s:SetOption("bold",1) call s:SetOption("underline",1) call s:SetOption("italic",1) " note that we need to override this later if the terminal doesn't support call s:SetOption("termcolors",16) call s:SetOption("contrast","normal") call s:SetOption("visibility","normal") call s:SetOption("diffmode","normal") call s:SetOption("hitrail",0) call s:SetOption("menu",1) "}}} " Colorscheme initialization "{{{ " --------------------------------------------------------------------- hi clear if exists("syntax_on") syntax reset endif let colors_name = "solarized" "}}} " GUI & CSApprox hexadecimal palettes"{{{ " --------------------------------------------------------------------- " " Set both gui and terminal color values in separate conditional statements " Due to possibility that CSApprox is running (though I suppose we could just " leave the hex values out entirely in that case and include only cterm colors) " We also check to see if user has set solarized (force use of the " neutral gray monotone palette component) if (has("gui_running") && g:solarized_degrade == 0) let s:vmode = "gui" let s:base03 = "#002b36" let s:base02 = "#073642" let s:base01 = "#586e75" let s:base00 = "#657b83" let s:base0 = "#839496" let s:base1 = "#93a1a1" let s:base2 = "#eee8d5" let s:base3 = "#fdf6e3" let s:yellow = "#b58900" let s:orange = "#cb4b16" let s:red = "#dc322f" let s:magenta = "#d33682" let s:violet = "#6c71c4" let s:blue = "#268bd2" let s:cyan = "#2aa198" "let s:green = "#859900" "original let s:green = "#719e07" "experimental elseif (has("gui_running") && g:solarized_degrade == 1) " These colors are identical to the 256 color mode. They may be viewed " while in gui mode via "let g:solarized_degrade=1", though this is not " recommened and is for testing only. let s:vmode = "gui" let s:base03 = "#1c1c1c" let s:base02 = "#262626" let s:base01 = "#4e4e4e" let s:base00 = "#585858" let s:base0 = "#808080" let s:base1 = "#8a8a8a" let s:base2 = "#d7d7af" let s:base3 = "#ffffd7" let s:yellow = "#af8700" let s:orange = "#d75f00" let s:red = "#af0000" let s:magenta = "#af005f" let s:violet = "#5f5faf" let s:blue = "#0087ff" let s:cyan = "#00afaf" let s:green = "#5f8700" elseif g:solarized_termcolors != 256 && &t_Co >= 16 let s:vmode = "cterm" let s:base03 = "8" let s:base02 = "0" let s:base01 = "10" let s:base00 = "11" let s:base0 = "12" let s:base1 = "14" let s:base2 = "7" let s:base3 = "15" let s:yellow = "3" let s:orange = "9" let s:red = "1" let s:magenta = "5" let s:violet = "13" let s:blue = "4" let s:cyan = "6" let s:green = "2" elseif g:solarized_termcolors == 256 let s:vmode = "cterm" let s:base03 = "234" let s:base02 = "235" let s:base01 = "239" let s:base00 = "240" let s:base0 = "244" let s:base1 = "245" let s:base2 = "187" let s:base3 = "230" let s:yellow = "136" let s:orange = "166" let s:red = "124" let s:magenta = "125" let s:violet = "61" let s:blue = "33" let s:cyan = "37" let s:green = "64" else let s:vmode = "cterm" let s:bright = "* term=bold cterm=bold" " let s:base03 = "0".s:bright " let s:base02 = "0" " let s:base01 = "2".s:bright " let s:base00 = "3".s:bright " let s:base0 = "4".s:bright " let s:base1 = "6".s:bright " let s:base2 = "7" " let s:base3 = "7".s:bright " let s:yellow = "3" " let s:orange = "1".s:bright " let s:red = "1" " let s:magenta = "5" " let s:violet = "5".s:bright " let s:blue = "4" " let s:cyan = "6" " let s:green = "2" let s:base03 = "DarkGray" " 0* let s:base02 = "Black" " 0 let s:base01 = "LightGreen" " 2* let s:base00 = "LightYellow" " 3* let s:base0 = "LightBlue" " 4* let s:base1 = "LightCyan" " 6* let s:base2 = "LightGray" " 7 let s:base3 = "White" " 7* let s:yellow = "DarkYellow" " 3 let s:orange = "LightRed" " 1* let s:red = "DarkRed" " 1 let s:magenta = "DarkMagenta" " 5 let s:violet = "LightMagenta" " 5* let s:blue = "DarkBlue" " 4 let s:cyan = "DarkCyan" " 6 let s:green = "DarkGreen" " 2 endif "}}} " Formatting options and null values for passthrough effect "{{{ " --------------------------------------------------------------------- let s:none = "NONE" let s:none = "NONE" let s:t_none = "NONE" let s:n = "NONE" let s:c = ",undercurl" let s:r = ",reverse" let s:s = ",standout" let s:ou = "" let s:ob = "" "}}} " Background value based on termtrans setting "{{{ " --------------------------------------------------------------------- if (has("gui_running") || g:solarized_termtrans == 0) let s:back = s:base03 else let s:back = "NONE" endif "}}} " Alternate light scheme "{{{ " --------------------------------------------------------------------- if &background == "light" let s:temp03 = s:base03 let s:temp02 = s:base02 let s:temp01 = s:base01 let s:temp00 = s:base00 let s:base03 = s:base3 let s:base02 = s:base2 let s:base01 = s:base1 let s:base00 = s:base0 let s:base0 = s:temp00 let s:base1 = s:temp01 let s:base2 = s:temp02 let s:base3 = s:temp03 if (s:back != "NONE") let s:back = s:base03 endif endif "}}} " Optional contrast schemes "{{{ " --------------------------------------------------------------------- if g:solarized_contrast == "high" let s:base01 = s:base00 let s:base00 = s:base0 let s:base0 = s:base1 let s:base1 = s:base2 let s:base2 = s:base3 let s:back = s:back endif if g:solarized_contrast == "low" let s:back = s:base02 let s:ou = ",underline" endif "}}} " Overrides dependent on user specified values and environment "{{{ " --------------------------------------------------------------------- if (g:solarized_bold == 0 || &t_Co == 8 ) let s:b = "" let s:bb = ",bold" else let s:b = ",bold" let s:bb = "" endif if g:solarized_underline == 0 let s:u = "" else let s:u = ",underline" endif if g:solarized_italic == 0 || s:terminal_italic == 0 let s:i = "" else let s:i = ",italic" endif "}}} " Highlighting primitives"{{{ " --------------------------------------------------------------------- exe "let s:bg_none = ' ".s:vmode."bg=".s:none ."'" exe "let s:bg_back = ' ".s:vmode."bg=".s:back ."'" exe "let s:bg_base03 = ' ".s:vmode."bg=".s:base03 ."'" exe "let s:bg_base02 = ' ".s:vmode."bg=".s:base02 ."'" exe "let s:bg_base01 = ' ".s:vmode."bg=".s:base01 ."'" exe "let s:bg_base00 = ' ".s:vmode."bg=".s:base00 ."'" exe "let s:bg_base0 = ' ".s:vmode."bg=".s:base0 ."'" exe "let s:bg_base1 = ' ".s:vmode."bg=".s:base1 ."'" exe "let s:bg_base2 = ' ".s:vmode."bg=".s:base2 ."'" exe "let s:bg_base3 = ' ".s:vmode."bg=".s:base3 ."'" exe "let s:bg_green = ' ".s:vmode."bg=".s:green ."'" exe "let s:bg_yellow = ' ".s:vmode."bg=".s:yellow ."'" exe "let s:bg_orange = ' ".s:vmode."bg=".s:orange ."'" exe "let s:bg_red = ' ".s:vmode."bg=".s:red ."'" exe "let s:bg_magenta = ' ".s:vmode."bg=".s:magenta."'" exe "let s:bg_violet = ' ".s:vmode."bg=".s:violet ."'" exe "let s:bg_blue = ' ".s:vmode."bg=".s:blue ."'" exe "let s:bg_cyan = ' ".s:vmode."bg=".s:cyan ."'" exe "let s:fg_none = ' ".s:vmode."fg=".s:none ."'" exe "let s:fg_back = ' ".s:vmode."fg=".s:back ."'" exe "let s:fg_base03 = ' ".s:vmode."fg=".s:base03 ."'" exe "let s:fg_base02 = ' ".s:vmode."fg=".s:base02 ."'" exe "let s:fg_base01 = ' ".s:vmode."fg=".s:base01 ."'" exe "let s:fg_base00 = ' ".s:vmode."fg=".s:base00 ."'" exe "let s:fg_base0 = ' ".s:vmode."fg=".s:base0 ."'" exe "let s:fg_base1 = ' ".s:vmode."fg=".s:base1 ."'" exe "let s:fg_base2 = ' ".s:vmode."fg=".s:base2 ."'" exe "let s:fg_base3 = ' ".s:vmode."fg=".s:base3 ."'" exe "let s:fg_green = ' ".s:vmode."fg=".s:green ."'" exe "let s:fg_yellow = ' ".s:vmode."fg=".s:yellow ."'" exe "let s:fg_orange = ' ".s:vmode."fg=".s:orange ."'" exe "let s:fg_red = ' ".s:vmode."fg=".s:red ."'" exe "let s:fg_magenta = ' ".s:vmode."fg=".s:magenta."'" exe "let s:fg_violet = ' ".s:vmode."fg=".s:violet ."'" exe "let s:fg_blue = ' ".s:vmode."fg=".s:blue ."'" exe "let s:fg_cyan = ' ".s:vmode."fg=".s:cyan ."'" exe "let s:fmt_none = ' ".s:vmode."=NONE". " term=NONE". "'" exe "let s:fmt_bold = ' ".s:vmode."=NONE".s:b. " term=NONE".s:b."'" exe "let s:fmt_bldi = ' ".s:vmode."=NONE".s:b. " term=NONE".s:b."'" exe "let s:fmt_undr = ' ".s:vmode."=NONE".s:u. " term=NONE".s:u."'" exe "let s:fmt_undb = ' ".s:vmode."=NONE".s:u.s:b. " term=NONE".s:u.s:b."'" exe "let s:fmt_undi = ' ".s:vmode."=NONE".s:u. " term=NONE".s:u."'" exe "let s:fmt_uopt = ' ".s:vmode."=NONE".s:ou. " term=NONE".s:ou."'" exe "let s:fmt_curl = ' ".s:vmode."=NONE".s:c. " term=NONE".s:c."'" exe "let s:fmt_ital = ' ".s:vmode."=NONE".s:i. " term=NONE".s:i."'" exe "let s:fmt_stnd = ' ".s:vmode."=NONE".s:s. " term=NONE".s:s."'" exe "let s:fmt_revr = ' ".s:vmode."=NONE".s:r. " term=NONE".s:r."'" exe "let s:fmt_revb = ' ".s:vmode."=NONE".s:r.s:b. " term=NONE".s:r.s:b."'" " revbb (reverse bold for bright colors) is only set to actual bold in low " color terminals (t_co=8, such as OS X Terminal.app) and should only be used " with colors 8-15. exe "let s:fmt_revbb = ' ".s:vmode."=NONE".s:r.s:bb. " term=NONE".s:r.s:bb."'" exe "let s:fmt_revbbu = ' ".s:vmode."=NONE".s:r.s:bb.s:u." term=NONE".s:r.s:bb.s:u."'" if has("gui_running") exe "let s:sp_none = ' guisp=".s:none ."'" exe "let s:sp_back = ' guisp=".s:back ."'" exe "let s:sp_base03 = ' guisp=".s:base03 ."'" exe "let s:sp_base02 = ' guisp=".s:base02 ."'" exe "let s:sp_base01 = ' guisp=".s:base01 ."'" exe "let s:sp_base00 = ' guisp=".s:base00 ."'" exe "let s:sp_base0 = ' guisp=".s:base0 ."'" exe "let s:sp_base1 = ' guisp=".s:base1 ."'" exe "let s:sp_base2 = ' guisp=".s:base2 ."'" exe "let s:sp_base3 = ' guisp=".s:base3 ."'" exe "let s:sp_green = ' guisp=".s:green ."'" exe "let s:sp_yellow = ' guisp=".s:yellow ."'" exe "let s:sp_orange = ' guisp=".s:orange ."'" exe "let s:sp_red = ' guisp=".s:red ."'" exe "let s:sp_magenta = ' guisp=".s:magenta."'" exe "let s:sp_violet = ' guisp=".s:violet ."'" exe "let s:sp_blue = ' guisp=".s:blue ."'" exe "let s:sp_cyan = ' guisp=".s:cyan ."'" else let s:sp_none = "" let s:sp_back = "" let s:sp_base03 = "" let s:sp_base02 = "" let s:sp_base01 = "" let s:sp_base00 = "" let s:sp_base0 = "" let s:sp_base1 = "" let s:sp_base2 = "" let s:sp_base3 = "" let s:sp_green = "" let s:sp_yellow = "" let s:sp_orange = "" let s:sp_red = "" let s:sp_magenta = "" let s:sp_violet = "" let s:sp_blue = "" let s:sp_cyan = "" endif "}}} " Basic highlighting"{{{ " --------------------------------------------------------------------- " note that link syntax to avoid duplicate configuration doesn't work with the " exe compiled formats exe "hi! Normal" .s:fmt_none .s:fg_base0 .s:bg_back exe "hi! Comment" .s:fmt_ital .s:fg_base01 .s:bg_none " *Comment any comment exe "hi! Constant" .s:fmt_none .s:fg_cyan .s:bg_none " *Constant any constant " String a string constant: "this is a string" " Character a character constant: 'c', '\n' " Number a number constant: 234, 0xff " Boolean a boolean constant: TRUE, false " Float a floating point constant: 2.3e10 exe "hi! Identifier" .s:fmt_none .s:fg_blue .s:bg_none " *Identifier any variable name " Function function name (also: methods for classes) " exe "hi! Statement" .s:fmt_none .s:fg_green .s:bg_none " *Statement any statement " Conditional if, then, else, endif, switch, etc. " Repeat for, do, while, etc. " Label case, default, etc. " Operator "sizeof", "+", "*", etc. " Keyword any other keyword " Exception try, catch, throw exe "hi! PreProc" .s:fmt_none .s:fg_orange .s:bg_none " *PreProc generic Preprocessor " Include preprocessor #include " Define preprocessor #define " Macro same as Define " PreCondit preprocessor #if, #else, #endif, etc. exe "hi! Type" .s:fmt_none .s:fg_yellow .s:bg_none " *Type int, long, char, etc. " StorageClass static, register, volatile, etc. " Structure struct, union, enum, etc. " Typedef A typedef exe "hi! Special" .s:fmt_none .s:fg_red .s:bg_none " *Special any special symbol " SpecialChar special character in a constant " Tag you can use CTRL-] on this " Delimiter character that needs attention " SpecialComment special things inside a comment " Debug debugging statements exe "hi! Underlined" .s:fmt_none .s:fg_violet .s:bg_none " *Underlined text that stands out, HTML links exe "hi! Ignore" .s:fmt_none .s:fg_none .s:bg_none " *Ignore left blank, hidden |hl-Ignore| exe "hi! Error" .s:fmt_bold .s:fg_red .s:bg_none " *Error any erroneous construct exe "hi! Todo" .s:fmt_bold .s:fg_magenta.s:bg_none " *Todo anything that needs extra attention; mostly the " keywords TODO FIXME and XXX " "}}} " Extended highlighting "{{{ " --------------------------------------------------------------------- if (g:solarized_visibility=="high") exe "hi! SpecialKey" .s:fmt_revr .s:fg_red .s:bg_none exe "hi! NonText" .s:fmt_bold .s:fg_red .s:bg_none elseif (g:solarized_visibility=="low") exe "hi! SpecialKey" .s:fmt_bold .s:fg_base02 .s:bg_none exe "hi! NonText" .s:fmt_bold .s:fg_base02 .s:bg_none else exe "hi! SpecialKey" .s:fmt_bold .s:fg_base00 .s:bg_base02 exe "hi! NonText" .s:fmt_bold .s:fg_base00 .s:bg_none endif exe "hi! StatusLine" .s:fmt_none .s:fg_base1 .s:bg_base02 .s:fmt_revbb exe "hi! StatusLineNC" .s:fmt_none .s:fg_base00 .s:bg_base02 .s:fmt_revbb exe "hi! Visual" .s:fmt_none .s:fg_base01 .s:bg_base03 .s:fmt_revbb exe "hi! Directory" .s:fmt_none .s:fg_blue .s:bg_none exe "hi! ErrorMsg" .s:fmt_revr .s:fg_red .s:bg_none exe "hi! IncSearch" .s:fmt_stnd .s:fg_orange .s:bg_none exe "hi! Search" .s:fmt_revr .s:fg_yellow .s:bg_none exe "hi! MoreMsg" .s:fmt_none .s:fg_blue .s:bg_none exe "hi! ModeMsg" .s:fmt_none .s:fg_blue .s:bg_none exe "hi! LineNr" .s:fmt_none .s:fg_base01 .s:bg_base02 exe "hi! Question" .s:fmt_bold .s:fg_cyan .s:bg_none if ( has("gui_running") || &t_Co > 8 ) exe "hi! VertSplit" .s:fmt_none .s:fg_base00 .s:bg_base00 else exe "hi! VertSplit" .s:fmt_revbb .s:fg_base00 .s:bg_base02 endif exe "hi! Title" .s:fmt_bold .s:fg_orange .s:bg_none exe "hi! VisualNOS" .s:fmt_stnd .s:fg_none .s:bg_base02 .s:fmt_revbb exe "hi! WarningMsg" .s:fmt_bold .s:fg_red .s:bg_none exe "hi! WildMenu" .s:fmt_none .s:fg_base2 .s:bg_base02 .s:fmt_revbb exe "hi! Folded" .s:fmt_undb .s:fg_base0 .s:bg_base02 .s:sp_base03 exe "hi! FoldColumn" .s:fmt_none .s:fg_base0 .s:bg_base02 if (g:solarized_diffmode=="high") exe "hi! DiffAdd" .s:fmt_revr .s:fg_green .s:bg_none exe "hi! DiffChange" .s:fmt_revr .s:fg_yellow .s:bg_none exe "hi! DiffDelete" .s:fmt_revr .s:fg_red .s:bg_none exe "hi! DiffText" .s:fmt_revr .s:fg_blue .s:bg_none elseif (g:solarized_diffmode=="low") exe "hi! DiffAdd" .s:fmt_undr .s:fg_green .s:bg_none .s:sp_green exe "hi! DiffChange" .s:fmt_undr .s:fg_yellow .s:bg_none .s:sp_yellow exe "hi! DiffDelete" .s:fmt_bold .s:fg_red .s:bg_none exe "hi! DiffText" .s:fmt_undr .s:fg_blue .s:bg_none .s:sp_blue else " normal if has("gui_running") exe "hi! DiffAdd" .s:fmt_bold .s:fg_green .s:bg_base02 .s:sp_green exe "hi! DiffChange" .s:fmt_bold .s:fg_yellow .s:bg_base02 .s:sp_yellow exe "hi! DiffDelete" .s:fmt_bold .s:fg_red .s:bg_base02 exe "hi! DiffText" .s:fmt_bold .s:fg_blue .s:bg_base02 .s:sp_blue else exe "hi! DiffAdd" .s:fmt_none .s:fg_green .s:bg_base02 .s:sp_green exe "hi! DiffChange" .s:fmt_none .s:fg_yellow .s:bg_base02 .s:sp_yellow exe "hi! DiffDelete" .s:fmt_none .s:fg_red .s:bg_base02 exe "hi! DiffText" .s:fmt_none .s:fg_blue .s:bg_base02 .s:sp_blue endif endif exe "hi! SignColumn" .s:fmt_none .s:fg_base0 exe "hi! Conceal" .s:fmt_none .s:fg_blue .s:bg_none exe "hi! SpellBad" .s:fmt_curl .s:fg_none .s:bg_none .s:sp_red exe "hi! SpellCap" .s:fmt_curl .s:fg_none .s:bg_none .s:sp_violet exe "hi! SpellRare" .s:fmt_curl .s:fg_none .s:bg_none .s:sp_cyan exe "hi! SpellLocal" .s:fmt_curl .s:fg_none .s:bg_none .s:sp_yellow exe "hi! Pmenu" .s:fmt_none .s:fg_base0 .s:bg_base02 .s:fmt_revbb exe "hi! PmenuSel" .s:fmt_none .s:fg_base01 .s:bg_base2 .s:fmt_revbb exe "hi! PmenuSbar" .s:fmt_none .s:fg_base2 .s:bg_base0 .s:fmt_revbb exe "hi! PmenuThumb" .s:fmt_none .s:fg_base0 .s:bg_base03 .s:fmt_revbb exe "hi! TabLine" .s:fmt_undr .s:fg_base0 .s:bg_base02 .s:sp_base0 exe "hi! TabLineFill" .s:fmt_undr .s:fg_base0 .s:bg_base02 .s:sp_base0 exe "hi! TabLineSel" .s:fmt_undr .s:fg_base01 .s:bg_base2 .s:sp_base0 .s:fmt_revbbu exe "hi! CursorColumn" .s:fmt_none .s:fg_none .s:bg_base02 exe "hi! CursorLine" .s:fmt_uopt .s:fg_none .s:bg_base02 .s:sp_base1 exe "hi! ColorColumn" .s:fmt_none .s:fg_none .s:bg_base02 exe "hi! Cursor" .s:fmt_none .s:fg_base03 .s:bg_base0 hi! link lCursor Cursor exe "hi! MatchParen" .s:fmt_bold .s:fg_red .s:bg_base01 "}}} " vim syntax highlighting "{{{ " --------------------------------------------------------------------- "exe "hi! vimLineComment" . s:fg_base01 .s:bg_none .s:fmt_ital "hi! link vimComment Comment "hi! link vimLineComment Comment hi! link vimVar Identifier hi! link vimFunc Function hi! link vimUserFunc Function hi! link helpSpecial Special hi! link vimSet Normal hi! link vimSetEqual Normal exe "hi! vimCommentString" .s:fmt_none .s:fg_violet .s:bg_none exe "hi! vimCommand" .s:fmt_none .s:fg_yellow .s:bg_none exe "hi! vimCmdSep" .s:fmt_bold .s:fg_blue .s:bg_none exe "hi! helpExample" .s:fmt_none .s:fg_base1 .s:bg_none exe "hi! helpOption" .s:fmt_none .s:fg_cyan .s:bg_none exe "hi! helpNote" .s:fmt_none .s:fg_magenta.s:bg_none exe "hi! helpVim" .s:fmt_none .s:fg_magenta.s:bg_none exe "hi! helpHyperTextJump" .s:fmt_undr .s:fg_blue .s:bg_none exe "hi! helpHyperTextEntry".s:fmt_none .s:fg_green .s:bg_none exe "hi! vimIsCommand" .s:fmt_none .s:fg_base00 .s:bg_none exe "hi! vimSynMtchOpt" .s:fmt_none .s:fg_yellow .s:bg_none exe "hi! vimSynType" .s:fmt_none .s:fg_cyan .s:bg_none exe "hi! vimHiLink" .s:fmt_none .s:fg_blue .s:bg_none exe "hi! vimHiGroup" .s:fmt_none .s:fg_blue .s:bg_none exe "hi! vimGroup" .s:fmt_undb .s:fg_blue .s:bg_none "}}} " diff highlighting "{{{ " --------------------------------------------------------------------- hi! link diffAdded Statement hi! link diffLine Identifier "}}} " git & gitcommit highlighting "{{{ "git "exe "hi! gitDateHeader" "exe "hi! gitIdentityHeader" "exe "hi! gitIdentityKeyword" "exe "hi! gitNotesHeader" "exe "hi! gitReflogHeader" "exe "hi! gitKeyword" "exe "hi! gitIdentity" "exe "hi! gitEmailDelimiter" "exe "hi! gitEmail" "exe "hi! gitDate" "exe "hi! gitMode" "exe "hi! gitHashAbbrev" "exe "hi! gitHash" "exe "hi! gitReflogMiddle" "exe "hi! gitReference" "exe "hi! gitStage" "exe "hi! gitType" "exe "hi! gitDiffAdded" "exe "hi! gitDiffRemoved" "gitcommit "exe "hi! gitcommitSummary" exe "hi! gitcommitComment" .s:fmt_ital .s:fg_base01 .s:bg_none hi! link gitcommitUntracked gitcommitComment hi! link gitcommitDiscarded gitcommitComment hi! link gitcommitSelected gitcommitComment exe "hi! gitcommitUnmerged" .s:fmt_bold .s:fg_green .s:bg_none exe "hi! gitcommitOnBranch" .s:fmt_bold .s:fg_base01 .s:bg_none exe "hi! gitcommitBranch" .s:fmt_bold .s:fg_magenta .s:bg_none hi! link gitcommitNoBranch gitcommitBranch exe "hi! gitcommitDiscardedType".s:fmt_none .s:fg_red .s:bg_none exe "hi! gitcommitSelectedType" .s:fmt_none .s:fg_green .s:bg_none "exe "hi! gitcommitUnmergedType" "exe "hi! gitcommitType" "exe "hi! gitcommitNoChanges" "exe "hi! gitcommitHeader" exe "hi! gitcommitHeader" .s:fmt_none .s:fg_base01 .s:bg_none exe "hi! gitcommitUntrackedFile".s:fmt_bold .s:fg_cyan .s:bg_none exe "hi! gitcommitDiscardedFile".s:fmt_bold .s:fg_red .s:bg_none exe "hi! gitcommitSelectedFile" .s:fmt_bold .s:fg_green .s:bg_none exe "hi! gitcommitUnmergedFile" .s:fmt_bold .s:fg_yellow .s:bg_none exe "hi! gitcommitFile" .s:fmt_bold .s:fg_base0 .s:bg_none hi! link gitcommitDiscardedArrow gitcommitDiscardedFile hi! link gitcommitSelectedArrow gitcommitSelectedFile hi! link gitcommitUnmergedArrow gitcommitUnmergedFile "exe "hi! gitcommitArrow" "exe "hi! gitcommitOverflow" "exe "hi! gitcommitBlank" " }}} " html highlighting "{{{ " --------------------------------------------------------------------- exe "hi! htmlTag" .s:fmt_none .s:fg_base01 .s:bg_none exe "hi! htmlEndTag" .s:fmt_none .s:fg_base01 .s:bg_none exe "hi! htmlTagN" .s:fmt_bold .s:fg_base1 .s:bg_none exe "hi! htmlTagName" .s:fmt_bold .s:fg_blue .s:bg_none exe "hi! htmlSpecialTagName".s:fmt_ital .s:fg_blue .s:bg_none exe "hi! htmlArg" .s:fmt_none .s:fg_base00 .s:bg_none exe "hi! javaScript" .s:fmt_none .s:fg_yellow .s:bg_none "}}} " perl highlighting "{{{ " --------------------------------------------------------------------- exe "hi! perlHereDoc" . s:fg_base1 .s:bg_back .s:fmt_none exe "hi! perlVarPlain" . s:fg_yellow .s:bg_back .s:fmt_none exe "hi! perlStatementFileDesc". s:fg_cyan.s:bg_back.s:fmt_none "}}} " tex highlighting "{{{ " --------------------------------------------------------------------- exe "hi! texStatement" . s:fg_cyan .s:bg_back .s:fmt_none exe "hi! texMathZoneX" . s:fg_yellow .s:bg_back .s:fmt_none exe "hi! texMathMatcher" . s:fg_yellow .s:bg_back .s:fmt_none exe "hi! texMathMatcher" . s:fg_yellow .s:bg_back .s:fmt_none exe "hi! texRefLabel" . s:fg_yellow .s:bg_back .s:fmt_none "}}} " ruby highlighting "{{{ " --------------------------------------------------------------------- exe "hi! rubyDefine" . s:fg_base1 .s:bg_back .s:fmt_bold "rubyInclude "rubySharpBang "rubyAccess "rubyPredefinedVariable "rubyBoolean "rubyClassVariable "rubyBeginEnd "rubyRepeatModifier "hi! link rubyArrayDelimiter Special " [ , , ] "rubyCurlyBlock { , , } "hi! link rubyClass Keyword "hi! link rubyModule Keyword "hi! link rubyKeyword Keyword "hi! link rubyOperator Operator "hi! link rubyIdentifier Identifier "hi! link rubyInstanceVariable Identifier "hi! link rubyGlobalVariable Identifier "hi! link rubyClassVariable Identifier "hi! link rubyConstant Type "}}} " haskell syntax highlighting"{{{ " --------------------------------------------------------------------- " For use with syntax/haskell.vim : Haskell Syntax File " http://www.vim.org/scripts/script.php?script_id=3034 " See also Steffen Siering's github repository: " http://github.com/urso/dotrc/blob/master/vim/syntax/haskell.vim " --------------------------------------------------------------------- " " Treat True and False specially, see the plugin referenced above let hs_highlight_boolean=1 " highlight delims, see the plugin referenced above let hs_highlight_delimiters=1 exe "hi! cPreCondit". s:fg_orange.s:bg_none .s:fmt_none exe "hi! VarId" . s:fg_blue .s:bg_none .s:fmt_none exe "hi! ConId" . s:fg_yellow .s:bg_none .s:fmt_none exe "hi! hsImport" . s:fg_magenta.s:bg_none .s:fmt_none exe "hi! hsString" . s:fg_base00 .s:bg_none .s:fmt_none exe "hi! hsStructure" . s:fg_cyan .s:bg_none .s:fmt_none exe "hi! hs_hlFunctionName" . s:fg_blue .s:bg_none exe "hi! hsStatement" . s:fg_cyan .s:bg_none .s:fmt_none exe "hi! hsImportLabel" . s:fg_cyan .s:bg_none .s:fmt_none exe "hi! hs_OpFunctionName" . s:fg_yellow .s:bg_none .s:fmt_none exe "hi! hs_DeclareFunction" . s:fg_orange .s:bg_none .s:fmt_none exe "hi! hsVarSym" . s:fg_cyan .s:bg_none .s:fmt_none exe "hi! hsType" . s:fg_yellow .s:bg_none .s:fmt_none exe "hi! hsTypedef" . s:fg_cyan .s:bg_none .s:fmt_none exe "hi! hsModuleName" . s:fg_green .s:bg_none .s:fmt_undr exe "hi! hsModuleStartLabel" . s:fg_magenta.s:bg_none .s:fmt_none hi! link hsImportParams Delimiter hi! link hsDelimTypeExport Delimiter hi! link hsModuleStartLabel hsStructure hi! link hsModuleWhereLabel hsModuleStartLabel " following is for the haskell-conceal plugin " the first two items don't have an impact, but better safe exe "hi! hsNiceOperator" . s:fg_cyan .s:bg_none .s:fmt_none exe "hi! hsniceoperator" . s:fg_cyan .s:bg_none .s:fmt_none "}}} " pandoc markdown syntax highlighting "{{{ " --------------------------------------------------------------------- "PandocHiLink pandocNormalBlock exe "hi! pandocTitleBlock" .s:fg_blue .s:bg_none .s:fmt_none exe "hi! pandocTitleBlockTitle" .s:fg_blue .s:bg_none .s:fmt_bold exe "hi! pandocTitleComment" .s:fg_blue .s:bg_none .s:fmt_bold exe "hi! pandocComment" .s:fg_base01 .s:bg_none .s:fmt_ital exe "hi! pandocVerbatimBlock" .s:fg_yellow .s:bg_none .s:fmt_none hi! link pandocVerbatimBlockDeep pandocVerbatimBlock hi! link pandocCodeBlock pandocVerbatimBlock hi! link pandocCodeBlockDelim pandocVerbatimBlock exe "hi! pandocBlockQuote" .s:fg_blue .s:bg_none .s:fmt_none exe "hi! pandocBlockQuoteLeader1" .s:fg_blue .s:bg_none .s:fmt_none exe "hi! pandocBlockQuoteLeader2" .s:fg_cyan .s:bg_none .s:fmt_none exe "hi! pandocBlockQuoteLeader3" .s:fg_yellow .s:bg_none .s:fmt_none exe "hi! pandocBlockQuoteLeader4" .s:fg_red .s:bg_none .s:fmt_none exe "hi! pandocBlockQuoteLeader5" .s:fg_base0 .s:bg_none .s:fmt_none exe "hi! pandocBlockQuoteLeader6" .s:fg_base01 .s:bg_none .s:fmt_none exe "hi! pandocListMarker" .s:fg_magenta.s:bg_none .s:fmt_none exe "hi! pandocListReference" .s:fg_magenta.s:bg_none .s:fmt_undr " Definitions " --------------------------------------------------------------------- let s:fg_pdef = s:fg_violet exe "hi! pandocDefinitionBlock" .s:fg_pdef .s:bg_none .s:fmt_none exe "hi! pandocDefinitionTerm" .s:fg_pdef .s:bg_none .s:fmt_stnd exe "hi! pandocDefinitionIndctr" .s:fg_pdef .s:bg_none .s:fmt_bold exe "hi! pandocEmphasisDefinition" .s:fg_pdef .s:bg_none .s:fmt_ital exe "hi! pandocEmphasisNestedDefinition" .s:fg_pdef .s:bg_none .s:fmt_bldi exe "hi! pandocStrongEmphasisDefinition" .s:fg_pdef .s:bg_none .s:fmt_bold exe "hi! pandocStrongEmphasisNestedDefinition" .s:fg_pdef.s:bg_none.s:fmt_bldi exe "hi! pandocStrongEmphasisEmphasisDefinition" .s:fg_pdef.s:bg_none.s:fmt_bldi exe "hi! pandocStrikeoutDefinition" .s:fg_pdef .s:bg_none .s:fmt_revr exe "hi! pandocVerbatimInlineDefinition" .s:fg_pdef .s:bg_none .s:fmt_none exe "hi! pandocSuperscriptDefinition" .s:fg_pdef .s:bg_none .s:fmt_none exe "hi! pandocSubscriptDefinition" .s:fg_pdef .s:bg_none .s:fmt_none " Tables " --------------------------------------------------------------------- let s:fg_ptable = s:fg_blue exe "hi! pandocTable" .s:fg_ptable.s:bg_none .s:fmt_none exe "hi! pandocTableStructure" .s:fg_ptable.s:bg_none .s:fmt_none hi! link pandocTableStructureTop pandocTableStructre hi! link pandocTableStructureEnd pandocTableStructre exe "hi! pandocTableZebraLight" .s:fg_ptable.s:bg_base03.s:fmt_none exe "hi! pandocTableZebraDark" .s:fg_ptable.s:bg_base02.s:fmt_none exe "hi! pandocEmphasisTable" .s:fg_ptable.s:bg_none .s:fmt_ital exe "hi! pandocEmphasisNestedTable" .s:fg_ptable.s:bg_none .s:fmt_bldi exe "hi! pandocStrongEmphasisTable" .s:fg_ptable.s:bg_none .s:fmt_bold exe "hi! pandocStrongEmphasisNestedTable" .s:fg_ptable.s:bg_none .s:fmt_bldi exe "hi! pandocStrongEmphasisEmphasisTable" .s:fg_ptable.s:bg_none .s:fmt_bldi exe "hi! pandocStrikeoutTable" .s:fg_ptable.s:bg_none .s:fmt_revr exe "hi! pandocVerbatimInlineTable" .s:fg_ptable.s:bg_none .s:fmt_none exe "hi! pandocSuperscriptTable" .s:fg_ptable.s:bg_none .s:fmt_none exe "hi! pandocSubscriptTable" .s:fg_ptable.s:bg_none .s:fmt_none " Headings " --------------------------------------------------------------------- let s:fg_phead = s:fg_orange exe "hi! pandocHeading" .s:fg_phead .s:bg_none.s:fmt_bold exe "hi! pandocHeadingMarker" .s:fg_yellow.s:bg_none.s:fmt_bold exe "hi! pandocEmphasisHeading" .s:fg_phead .s:bg_none.s:fmt_bldi exe "hi! pandocEmphasisNestedHeading" .s:fg_phead .s:bg_none.s:fmt_bldi exe "hi! pandocStrongEmphasisHeading" .s:fg_phead .s:bg_none.s:fmt_bold exe "hi! pandocStrongEmphasisNestedHeading" .s:fg_phead .s:bg_none.s:fmt_bldi exe "hi! pandocStrongEmphasisEmphasisHeading".s:fg_phead .s:bg_none.s:fmt_bldi exe "hi! pandocStrikeoutHeading" .s:fg_phead .s:bg_none.s:fmt_revr exe "hi! pandocVerbatimInlineHeading" .s:fg_phead .s:bg_none.s:fmt_bold exe "hi! pandocSuperscriptHeading" .s:fg_phead .s:bg_none.s:fmt_bold exe "hi! pandocSubscriptHeading" .s:fg_phead .s:bg_none.s:fmt_bold " Links " --------------------------------------------------------------------- exe "hi! pandocLinkDelim" .s:fg_base01 .s:bg_none .s:fmt_none exe "hi! pandocLinkLabel" .s:fg_blue .s:bg_none .s:fmt_undr exe "hi! pandocLinkText" .s:fg_blue .s:bg_none .s:fmt_undb exe "hi! pandocLinkURL" .s:fg_base00 .s:bg_none .s:fmt_undr exe "hi! pandocLinkTitle" .s:fg_base00 .s:bg_none .s:fmt_undi exe "hi! pandocLinkTitleDelim" .s:fg_base01 .s:bg_none .s:fmt_undi .s:sp_base00 exe "hi! pandocLinkDefinition" .s:fg_cyan .s:bg_none .s:fmt_undr .s:sp_base00 exe "hi! pandocLinkDefinitionID" .s:fg_blue .s:bg_none .s:fmt_bold exe "hi! pandocImageCaption" .s:fg_violet .s:bg_none .s:fmt_undb exe "hi! pandocFootnoteLink" .s:fg_green .s:bg_none .s:fmt_undr exe "hi! pandocFootnoteDefLink" .s:fg_green .s:bg_none .s:fmt_bold exe "hi! pandocFootnoteInline" .s:fg_green .s:bg_none .s:fmt_undb exe "hi! pandocFootnote" .s:fg_green .s:bg_none .s:fmt_none exe "hi! pandocCitationDelim" .s:fg_magenta.s:bg_none .s:fmt_none exe "hi! pandocCitation" .s:fg_magenta.s:bg_none .s:fmt_none exe "hi! pandocCitationID" .s:fg_magenta.s:bg_none .s:fmt_undr exe "hi! pandocCitationRef" .s:fg_magenta.s:bg_none .s:fmt_none " Main Styles " --------------------------------------------------------------------- exe "hi! pandocStyleDelim" .s:fg_base01 .s:bg_none .s:fmt_none exe "hi! pandocEmphasis" .s:fg_base0 .s:bg_none .s:fmt_ital exe "hi! pandocEmphasisNested" .s:fg_base0 .s:bg_none .s:fmt_bldi exe "hi! pandocStrongEmphasis" .s:fg_base0 .s:bg_none .s:fmt_bold exe "hi! pandocStrongEmphasisNested" .s:fg_base0 .s:bg_none .s:fmt_bldi exe "hi! pandocStrongEmphasisEmphasis" .s:fg_base0 .s:bg_none .s:fmt_bldi exe "hi! pandocStrikeout" .s:fg_base01 .s:bg_none .s:fmt_revr exe "hi! pandocVerbatimInline" .s:fg_yellow .s:bg_none .s:fmt_none exe "hi! pandocSuperscript" .s:fg_violet .s:bg_none .s:fmt_none exe "hi! pandocSubscript" .s:fg_violet .s:bg_none .s:fmt_none exe "hi! pandocRule" .s:fg_blue .s:bg_none .s:fmt_bold exe "hi! pandocRuleLine" .s:fg_blue .s:bg_none .s:fmt_bold exe "hi! pandocEscapePair" .s:fg_red .s:bg_none .s:fmt_bold exe "hi! pandocCitationRef" .s:fg_magenta.s:bg_none .s:fmt_none exe "hi! pandocNonBreakingSpace" . s:fg_red .s:bg_none .s:fmt_revr hi! link pandocEscapedCharacter pandocEscapePair hi! link pandocLineBreak pandocEscapePair " Embedded Code " --------------------------------------------------------------------- exe "hi! pandocMetadataDelim" .s:fg_base01 .s:bg_none .s:fmt_none exe "hi! pandocMetadata" .s:fg_blue .s:bg_none .s:fmt_none exe "hi! pandocMetadataKey" .s:fg_blue .s:bg_none .s:fmt_none exe "hi! pandocMetadata" .s:fg_blue .s:bg_none .s:fmt_bold hi! link pandocMetadataTitle pandocMetadata "}}} " Utility autocommand "{{{ " --------------------------------------------------------------------- " In cases where Solarized is initialized inside a terminal vim session and " then transferred to a gui session via the command `:gui`, the gui vim process " does not re-read the colorscheme (or .vimrc for that matter) so any `has_gui` " related code that sets gui specific values isn't executed. " " Currently, Solarized sets only the cterm or gui values for the colorscheme " depending on gui or terminal mode. It's possible that, if the following " autocommand method is deemed excessively poor form, that approach will be " used again and the autocommand below will be dropped. " " However it seems relatively benign in this case to include the autocommand " here. It fires only in cases where vim is transferring from terminal to gui " mode (detected with the script scope s:vmode variable). It also allows for " other potential terminal customizations that might make gui mode suboptimal. " autocmd GUIEnter * if (s:vmode != "gui") | exe "colorscheme " . g:colors_name | endif "}}} " Highlight Trailing Space {{{ " Experimental: Different highlight when on cursorline function! s:SolarizedHiTrail() if g:solarized_hitrail==0 hi! clear solarizedTrailingSpace else syn match solarizedTrailingSpace "\s*$" exe "hi! solarizedTrailingSpace " .s:fmt_undr .s:fg_red .s:bg_none .s:sp_red endif endfunction augroup SolarizedHiTrail autocmd! if g:solarized_hitrail==1 autocmd! Syntax * call s:SolarizedHiTrail() autocmd! ColorScheme * if g:colors_name == "solarized" | call s:SolarizedHiTrail() | else | augroup! s:SolarizedHiTrail | endif endif augroup END " }}} " Menus "{{{ " --------------------------------------------------------------------- " Turn off Solarized menu by including the following assignment in your .vimrc: " " let g:solarized_menu=0 function! s:SolarizedOptions() new "new buffer setf vim "vim filetype let failed = append(0, s:defaults_list) let failed = append(0, s:colorscheme_list) let failed = append(0, s:options_list) let failed = append(0, s:lazycat_list) 0 "jump back to the top endfunction if !exists(":SolarizedOptions") command SolarizedOptions :call s:SolarizedOptions() endif function! SolarizedMenu() if exists("g:loaded_solarized_menu") try silent! aunmenu Solarized endtry endif let g:loaded_solarized_menu = 1 if g:colors_name == "solarized" && g:solarized_menu != 0 amenu &Solarized.&Contrast.&Low\ Contrast :let g:solarized_contrast="low" \| colorscheme solarized<CR> amenu &Solarized.&Contrast.&Normal\ Contrast :let g:solarized_contrast="normal" \| colorscheme solarized<CR> amenu &Solarized.&Contrast.&High\ Contrast :let g:solarized_contrast="high" \| colorscheme solarized<CR> an &Solarized.&Contrast.-sep- <Nop> amenu &Solarized.&Contrast.&Help:\ Contrast :help 'solarized_contrast'<CR> amenu &Solarized.&Visibility.&Low\ Visibility :let g:solarized_visibility="low" \| colorscheme solarized<CR> amenu &Solarized.&Visibility.&Normal\ Visibility :let g:solarized_visibility="normal" \| colorscheme solarized<CR> amenu &Solarized.&Visibility.&High\ Visibility :let g:solarized_visibility="high" \| colorscheme solarized<CR> an &Solarized.&Visibility.-sep- <Nop> amenu &Solarized.&Visibility.&Help:\ Visibility :help 'solarized_visibility'<CR> amenu &Solarized.&Background.&Toggle\ Background :ToggleBG<CR> amenu &Solarized.&Background.&Dark\ Background :set background=dark \| colorscheme solarized<CR> amenu &Solarized.&Background.&Light\ Background :set background=light \| colorscheme solarized<CR> an &Solarized.&Background.-sep- <Nop> amenu &Solarized.&Background.&Help:\ ToggleBG :help togglebg<CR> if g:solarized_bold==0 | let l:boldswitch="On" | else | let l:boldswitch="Off" | endif exe "amenu &Solarized.&Styling.&Turn\\ Bold\\ ".l:boldswitch." :let g:solarized_bold=(abs(g:solarized_bold-1)) \\| colorscheme solarized<CR>" if g:solarized_italic==0 | let l:italicswitch="On" | else | let l:italicswitch="Off" | endif exe "amenu &Solarized.&Styling.&Turn\\ Italic\\ ".l:italicswitch." :let g:solarized_italic=(abs(g:solarized_italic-1)) \\| colorscheme solarized<CR>" if g:solarized_underline==0 | let l:underlineswitch="On" | else | let l:underlineswitch="Off" | endif exe "amenu &Solarized.&Styling.&Turn\\ Underline\\ ".l:underlineswitch." :let g:solarized_underline=(abs(g:solarized_underline-1)) \\| colorscheme solarized<CR>" amenu &Solarized.&Diff\ Mode.&Low\ Diff\ Mode :let g:solarized_diffmode="low" \| colorscheme solarized<CR> amenu &Solarized.&Diff\ Mode.&Normal\ Diff\ Mode :let g:solarized_diffmode="normal" \| colorscheme solarized<CR> amenu &Solarized.&Diff\ Mode.&High\ Diff\ Mode :let g:solarized_diffmode="high" \| colorscheme solarized<CR> if g:solarized_hitrail==0 | let l:hitrailswitch="On" | else | let l:hitrailswitch="Off" | endif exe "amenu &Solarized.&Experimental.&Turn\\ Highlight\\ Trailing\\ Spaces\\ ".l:hitrailswitch." :let g:solarized_hitrail=(abs(g:solarized_hitrail-1)) \\| colorscheme solarized<CR>" an &Solarized.&Experimental.-sep- <Nop> amenu &Solarized.&Experimental.&Help:\ HiTrail :help 'solarized_hitrail'<CR> an &Solarized.-sep1- <Nop> amenu &Solarized.&Autogenerate\ options :SolarizedOptions<CR> an &Solarized.-sep2- <Nop> amenu &Solarized.&Help.&Solarized\ Help :help solarized<CR> amenu &Solarized.&Help.&Toggle\ Background\ Help :help togglebg<CR> amenu &Solarized.&Help.&Removing\ This\ Menu :help solarized-menu<CR> an 9999.77 &Help.&Solarized\ Colorscheme :help solarized<CR> an 9999.78 &Help.&Toggle\ Background :help togglebg<CR> an 9999.79 &Help.-sep3- <Nop> endif endfunction autocmd ColorScheme * if g:colors_name != "solarized" | silent! aunmenu Solarized | else | call SolarizedMenu() | endif "}}} " License "{{{ " --------------------------------------------------------------------- " " Copyright (c) 2011 Ethan Schoonover " " Permission is hereby granted, free of charge, to any person obtaining a copy " of this software and associated documentation files (the "Software"), to deal " in the Software without restriction, including without limitation the rights " to use, copy, modify, merge, publish, distribute, sublicense, and/or sell " copies of the Software, and to permit persons to whom the Software is " furnished to do so, subject to the following conditions: " " The above copyright notice and this permission notice shall be included in " all copies or substantial portions of the Software. " " THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR " IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, " FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE " AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER " LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, " OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN " THE SOFTWARE. " " vim:foldmethod=marker:foldlevel=0 "}}} "}}}

 

 

欢迎关注微信公众号,以技术为主,涉及历史、人文等多领域的学习与感悟,每周三到七篇推文,只有全部原创,只有干货没有鸡汤

 






技术帖      linux      unix      配置文件      vim     


京ICP备15018585号