From 4469385ac7cf03936fab7d23fafd562af7f7053f Mon Sep 17 00:00:00 2001 From: jluehrs2 Date: Sun, 9 Sep 2007 16:56:40 -0500 Subject: add my .vim directory --- vim/plugin/rainbow_paren.vim | 88 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 vim/plugin/rainbow_paren.vim (limited to 'vim/plugin/rainbow_paren.vim') diff --git a/vim/plugin/rainbow_paren.vim b/vim/plugin/rainbow_paren.vim new file mode 100644 index 0000000..3578d63 --- /dev/null +++ b/vim/plugin/rainbow_paren.vim @@ -0,0 +1,88 @@ +" this script by Shawn M Moore aka Sartak +" also by Michael R Geddes aka frogonwheels +" originally by anonymous + +" this in the public domain +" last updated 25 Mar 07 + +" this does nothing unless you, +" let g:rainbow = 1 + +" and set which kinds of character pairs you want to rainbow +" let g:rainbow_paren = 1 " () +" let g:rainbow_brace = 1 " {} +" let g:rainbow_bracket = 1 " [] +" let g:rainbow_angle = 1 " <> + +" if you want the different types to nest, such that the braces in ({}) are +" colored the same as the internal parens of (()), then +" let g:rainbow_nested = 1 + +" you probably also want to use something like +" autocmd BufReadPost * source /path/to/rainbow_parens.vim +" autocmd BufNewFile * source /path/to/rainbow_parens.vim + +if exists("g:rainbow") && g:rainbow != 0 + hi level1c ctermfg=darkcyan + hi level2c ctermfg=darkgreen + hi level3c ctermfg=darkyellow + hi level4c ctermfg=darkblue + hi level5c ctermfg=darkmagenta + hi level6c ctermfg=darkred " this color is never nested, it only appears on the outermost layer + + " helper function + func s:DoSyn(cur, top, left, right, uniq) + let uniq = a:uniq + if exists("g:rainbow_nested") && g:rainbow_nested != 0 + let uniq = "" + endif + + let cmd = 'syn region level'.uniq.a:cur.' transparent fold matchgroup=level'.a:cur.'c start=/'.a:left.'/ end=/'.a:right.'/ contains=TOP' + + let i = a:cur + + if i == 1 + let i = a:top + endif + + while i <= a:top + let cmd = cmd . ',level' . uniq . i + let i = i + 1 + endwhile + exe cmd + endfunc + + func s:DoSyntaxes(count) + let i = 1 + + while i <= a:count + " if you define new pairs, make sure to take into account that the + " delimiter is currently / and that it uses regex, so you need to escape + " regex metachars (like what is done for brackets) + + if exists("g:rainbow_paren") && g:rainbow_paren != 0 + call s:DoSyn(i, a:count, "(", ")", "a") + endif + + if exists("g:rainbow_brace") && g:rainbow_brace != 0 + call s:DoSyn(i, a:count, "{", "}", "b") + endif + + if exists("g:rainbow_bracket") && g:rainbow_bracket != 0 + call s:DoSyn(i, a:count, "\\[", "\\]", "c") + endif + + if exists("g:rainbow_angle") && g:rainbow_angle != 0 + call s:DoSyn(i, a:count, "<", ">", "d") + endif + + let i = i + 1 + endwhile + endfun + + call s:DoSyntaxes(6) " 6 is the number of colors we have + + delfun s:DoSyn + delfun s:DoSyntaxes +endif + -- cgit v1.2.3-54-g00ecf