Commits

Josh VanderLinden committed 073f474

Changes from work

Comments (0)

Files changed (12)

.vim/colors/solarized.vim

-../vim-colors-solarized/colors/solarized.vim
+" 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)
+"
+" 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.
+"
+" ---------------------------------------------------------------------
+" INSTALLATION:
+" ---------------------------------------------------------------------
+"
+" Two options for installation: manual or pathogen
+" 
+" MANUAL INSTALLATION OPTION:
+" ---------------------------------------------------------------------
+" 
+" 1.  Put the files in the right place!
+" 2.  Move `solarized.vim` to your `.vim/colors` directory.
+" 
+" 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:
+" 
+"     set background=dark
+"     colorscheme solarized
+" 
+" or, for the light background mode of Solarized:
+" 
+"     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.
+"
+" Other options are detailed below.
+"
+" IMPORTANT NOTE FOR TERMINAL USERS:
+"
+" If you are going to use Solarized in Terminal mode (i.e. not in a GUI 
+" version like gvim or macvim), **please please please** consider setting your 
+" terminal emulator's colorscheme to used the Solarized palette. I've included 
+" palettes for some popular terminal emulator as well as Xdefaults in the 
+" official Solarized download available from:
+" 
+" http://ethanschoonover.com/solarized
+" 
+" If you use Solarized without these colors, Solarized will by default use an 
+" approximate set of 256 colors.  It isn't bad looking and has been extensively 
+" tweaked, but it's still not quite the real thing.
+" 
+" If you do use the custom terminal colors, simply add the following line 
+" *before* the `colorschem solarized` line:
+" 
+"     let g:solarized_termcolors=16
+" 
+" ---------------------------------------------------------------------
+" TOGGLE BACKGROUND FUNCTION
+" ---------------------------------------------------------------------
+" Here's a quick script that toggles the background color, using F5 in this 
+" example. You can drop this into .vimrc:
+"
+" function! ToggleBackground()
+"     if (g:solarized_style=="dark")
+"     let g:solarized_style="light"
+"     colorscheme solarized
+" else
+"     let g:solarized_style="dark"
+"     colorscheme solarized
+" endif
+" endfunction
+" command! Togbg call ToggleBackground()
+" nnoremap <F5> :call ToggleBackground()<CR>
+" inoremap <F5> <ESC>:call ToggleBackground()<CR>a
+" vnoremap <F5> <ESC>:call ToggleBackground()<CR>
+"
+" ---------------------------------------------------------------------
+" OPTIONS
+" ---------------------------------------------------------------------
+" 
+" Set these in your vimrc file prior to calling the colorscheme.
+"
+" option name               default     optional
+" ------------------------------------------------
+" g:solarized_termcolors=   256     |   16
+" g:solarized_termtrans =   0       |   1
+" g:solarized_degrade   =   0       |   1
+" g:solarized_bold      =   1       |   0
+" g:solarized_underline =   1       |   0
+" g:solarized_italic    =   1       |   0
+" g:solarized_style     =   "dark"  |   "light"
+" g:solarized_contrast  =   "normal"|   "high" or "low"
+" ------------------------------------------------
+"
+" OPTION DETAILS
+"
+" ------------------------------------------------
+" g:solarized_termcolors=   256     |   16
+" ------------------------------------------------
+" The most important option if you are using vim in terminal (non gui) mode!
+" This tells Solarized to use the 256 degraded color mode if running in a 256 
+" color capable terminal.  Otherwise, if set to `16` it will use the terminal 
+" emulators colorscheme (best option as long as you've set the emulators colors 
+" to the Solarized palette).
+"
+" If you are going to use Solarized in Terminal mode (i.e. not in a GUI 
+" version like gvim or macvim), **please please please** consider setting your 
+" terminal emulator's colorscheme to used the Solarized palette. I've included 
+" palettes for some popular terminal emulator as well as Xdefaults in the 
+" official Solarized download available from: 
+" http://ethanschoonover.com/solarized . If you use Solarized without these 
+" colors, Solarized will by default use an approximate set of 256 colors.  It 
+" isn't bad looking and has been extensively tweaked, but it's still not quite 
+" the real thing.
+"
+" ------------------------------------------------
+" g:solarized_termtrans =   0       |   1
+" ------------------------------------------------
+" If you use a terminal emulator with a transparent background and Solarized 
+" isn't displaying the background color transparently, set this to 1 and 
+" Solarized will use the default (transparent) background of the terminal 
+" emulator. *urxvt* required this in my testing; Terminal.app/iTerm2 did not.
+"
+" ------------------------------------------------
+" g:solarized_degrade   =   0       |   1
+" ------------------------------------------------
+" For test purposes only; forces Solarized to use the 256 degraded color mode 
+" to test the approximate color values for accuracy.
+"
+" ------------------------------------------------
+" g:solarized_bold      =   1       |   0
+" ------------------------------------------------
+" ------------------------------------------------
+" g:solarized_underline =   1       |   0
+" ------------------------------------------------
+" ------------------------------------------------
+" g:solarized_italic    =   1       |   0
+" ------------------------------------------------
+" If you wish to stop Solarized from displaying bold, underlined or 
+" italicized typefaces, simply assign a zero value to the appropriate 
+" variable, for example: `let g:solarized_italic=0`
+"
+" ------------------------------------------------
+" g:solarized_style     =   "dark"  |   "light"
+" ------------------------------------------------
+" Simply another way to force Solarized to use a dark or light background.  
+" It's better to use `set background=dark` or `set background=light` in your 
+" .vimrc file. This option is mostly used in scripts (quick background color 
+" change) or for testing. Note that, if set, g:solarized_style overrides the 
+" setting for "background".
+"
+" ------------------------------------------------
+" g:solarized_contrast  =   "normal"|   "high" or "low"
+" ------------------------------------------------
+" Stick with normal! It's been carefully tested. Setting this option to high 
+" or low does use the same Solarized palette but simply shifts some values up 
+" or down in order to expand or compress the tonal range displayed.
+"
+" ---------------------------------------------------------------------
+" 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/"
+"
+"
+" }}}
+" Default option values"{{{
+" ---------------------------------------------------------------------
+if !exists("g:solarized_termtrans")
+    let g:solarized_termtrans = 0
+endif
+if !exists("g:solarized_degrade")
+    let g:solarized_degrade = 0
+endif
+if !exists("g:solarized_bold")
+    let g:solarized_bold = 1
+endif
+if !exists("g:solarized_underline")
+    let g:solarized_underline = 1
+endif
+if !exists("g:solarized_italic")
+    let g:solarized_italic = 1
+endif
+if !exists("g:solarized_termcolors")
+    let g:solarized_termcolors = 256
+endif
+if !exists("g:solarized_style") && !exists("g:solarized_style")
+    let g:solarized_style = &background
+endif
+if !exists("g:solarized_contrast")
+    let g:solarized_contrast = "normal"
+endif
+"}}}
+" Colorscheme basic settings"{{{
+" ---------------------------------------------------------------------
+if g:solarized_style == "dark"
+    set background=dark
+elseif g:solarized_style == "light"
+    set background=light
+else
+    let g:solarized_style = &background
+endif
+
+hi clear
+if exists("syntax_on")
+  syntax reset
+endif
+
+let colors_name = "solarized"
+"let colors_name = &background
+"if background == "light"
+"    let colors_name = &background
+"else
+"    let colors_name = &background
+"endif
+"}}}
+" 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:g_back        = "#002b36"
+    let s:g_base03      = "#002b36"
+    let s:g_base02      = "#073642"
+    let s:g_base01      = "#586e75"
+    let s:g_base00      = "#657b83"
+    let s:g_base0       = "#839496"
+    let s:g_base1       = "#93a1a1"
+    let s:g_base2       = "#eee8d5"
+    let s:g_base3       = "#fdf6e3"
+    let s:g_yellow      = "#b58900"
+    let s:g_orange      = "#cb4b16"
+    let s:g_red         = "#dc322f"
+    let s:g_magenta     = "#d33682"
+    let s:g_violet      = "#6c71c4"
+    let s:g_blue        = "#268bd2"
+    let s:g_cyan        = "#2aa198"
+    let s:g_green       = "#859900"
+else
+    " these colors are for non-gui vim when CSApprox is installed. CSApprox 
+    " degrades the base colors poorly (bright blues instead of muted gray 
+    " blues) so we set all hex values here to ones which CSApprox will not
+    " change and which we approve of. Perhaps I should just can the hex values
+    " and use just the color table values, leaving these blank. Not much
+    " difference either way and I'd rather be thorough about it.
+    " They can also be used by setting g:solarized_degrade to 1 in vimrc
+    let s:g_back        = "#1c1c1c"
+    let s:g_base03      = "#1c1c1c"
+    let s:g_base02      = "#262626"
+    let s:g_base01      = "#4e4e4e"
+    let s:g_base00      = "#585858"
+    let s:g_base0       = "#808080"
+    let s:g_base1       = "#8a8a8a"
+    let s:g_base2       = "#d7d7af"
+    let s:g_base3       = "#ffffd7"
+    let s:g_yellow      = "#af8700"
+    let s:g_orange      = "#d75f00"
+    let s:g_red         = "#af0000"
+    let s:g_magenta     = "#af005f"
+    let s:g_violet      = "#5f5faf"
+    let s:g_blue        = "#0087ff"
+    let s:g_cyan        = "#00afaf"
+    let s:g_green       = "#5f8700"
+endif
+"}}}
+" 256 Terminal (no CSApprox) and 16 color fallback palettes"{{{
+" ---------------------------------------------------------------------
+" We also set this if gui is running as we use the optional formatting
+" values that get set here (ou==optional underline, ob==opt bold).
+if (has("gui_running") || &t_Co == 256) && g:solarized_termcolors != 16
+    let s:c_back        = "234"
+    let s:c_base03      = "234"
+    let s:c_base02      = "235"
+    let s:c_base01      = "239"
+    let s:c_base00      = "240"
+    let s:c_base0       = "244"
+    let s:c_base1       = "245"
+    let s:c_base2       = "187"
+    let s:c_base3       = "230"
+    let s:c_yellow      = "136"
+    let s:c_orange      = "166"
+    let s:c_red         = "124"
+    let s:c_magenta     = "125"
+    let s:c_violet      = "61"
+    let s:c_blue        = "33"
+    let s:c_cyan        = "37"
+    let s:c_green       = "64"
+    let s:ou            = ""
+    let s:ob            = ""
+elseif &t_Co > 8 || g:solarized_termcolors == 16
+    " NOTE: this requires terminal colors to be set to solarized standard
+    " 16 colors (see top of this file for details)
+    let s:c_back        = "NONE"
+    let s:c_base03      = "8"
+    let s:c_base02      = "0"
+    let s:c_base01      = "10"
+    let s:c_base00      = "11"
+    let s:c_base0       = "12"
+    let s:c_base1       = "14"
+    let s:c_base2       = "7"
+    let s:c_base3       = "15"
+    let s:c_green       = "2"
+    let s:c_yellow      = "3"
+    let s:c_orange      = "9"
+    let s:c_red         = "1"
+    let s:c_magenta     = "5"
+    let s:c_violet      = "13"
+    let s:c_blue        = "4"
+    let s:c_cyan        = "6"
+    let s:ou            = ""
+    let s:ob            = ""
+else " must be in an 8 color or less terminal
+    let s:c_back        = "NONE"
+    let s:c_base03      = "4"
+    let s:c_base02      = "darkgrey"
+    let s:c_base01      = "grey"
+    let s:c_base00      = "darkgrey"
+    let s:c_base0       = "6"
+    let s:c_base1       = "4"
+    let s:c_base2       = "7"
+    let s:c_base3       = "7"
+    let s:c_green       = "2"
+    let s:c_yellow      = "3"
+    let s:c_orange      = "3"
+    let s:c_red         = "1"
+    let s:c_magenta     = "5"
+    let s:c_violet      = "5"
+    let s:c_blue        = "4"
+    let s:c_cyan        = "6"
+    let s:ou            = ",underline"
+    let s:ob            = ",bold"
+endif
+"}}}
+" Formatting options and null values for passthrough effect"{{{
+" ---------------------------------------------------------------------
+let s:g_none            = "NONE"
+let s:c_none            = "NONE"
+let s:t_none            = "NONE"
+let s:n                 = "NONE"
+let s:c                 = ",undercurl"
+let s:r                 = ",reverse"
+let s:s                 = ",standout"
+"}}}
+" Alternate light scheme "{{{
+" ---------------------------------------------------------------------
+if g:solarized_style == "light"
+    let s:c_temp03      = s:c_base03
+    let s:c_temp02      = s:c_base02
+    let s:c_temp01      = s:c_base01
+    let s:c_temp00      = s:c_base00
+    let s:c_base03      = s:c_base3
+    let s:c_base02      = s:c_base2
+    let s:c_base01      = s:c_base1
+    let s:c_base00      = s:c_base0
+    let s:c_base0       = s:c_temp00
+    let s:c_base1       = s:c_temp01
+    let s:c_base2       = s:c_temp02
+    let s:c_base3       = s:c_temp03
+    let s:c_back        = s:c_base03
+    let s:g_temp03      = s:g_base03
+    let s:g_temp02      = s:g_base02
+    let s:g_temp01      = s:g_base01
+    let s:g_temp00      = s:g_base00
+    let s:g_base03      = s:g_base3
+    let s:g_base02      = s:g_base2
+    let s:g_base01      = s:g_base1
+    let s:g_base00      = s:g_base0
+    let s:g_base0       = s:g_temp00
+    let s:g_base1       = s:g_temp01
+    let s:g_base2       = s:g_temp02
+    let s:g_base3       = s:g_temp03
+    let s:g_back        = s:g_base03
+endif
+"}}}
+" Alternate inverted background scheme "{{{
+" ---------------------------------------------------------------------
+if g:solarized_style == "inverted"
+    let s:c_temp03      = s:c_base03
+    let s:c_temp02      = s:c_base02
+    let s:c_base03      = s:c_temp02
+    let s:c_base02      = s:c_temp03
+    let s:c_back        = s:c_base03
+    let s:g_temp03      = s:g_base03
+    let s:g_temp02      = s:g_base02
+    let s:g_base03      = s:g_temp02
+    let s:g_base02      = s:g_temp03
+    let s:g_back        = s:g_base03
+endif
+"}}}
+" Optional contrast schemes "{{{
+" ---------------------------------------------------------------------
+if g:solarized_contrast == "high"
+    let s:g_base03      = s:g_base03
+    let s:g_base02      = s:g_base02
+    let s:g_base01      = s:g_base00
+    let s:g_base00      = s:g_base0
+    let s:g_base0       = s:g_base1
+    let s:g_base1       = s:g_base2
+    let s:g_base2       = s:g_base3
+    let s:g_base3       = s:g_base3
+    let s:g_back        = s:g_back
+endif
+if g:solarized_contrast == "low"
+    let s:g_back        = s:g_base02
+    let s:ou            = ",underline"
+endif
+"}}}
+" Overrides dependent on user specified values"{{{
+" ---------------------------------------------------------------------
+if g:solarized_termtrans == 1
+    let s:c_back        = "NONE"   
+endif
+
+if g:solarized_bold == 1
+    let s:b             = ",bold"
+else
+    let s:b             = ""
+endif
+
+if g:solarized_underline == 1
+    let s:u             = ",underline"
+else
+    let s:u             = ""
+endif
+
+if g:solarized_italic == 1
+    let s:i             = ",italic"
+else
+    let s:i             = ""
+endif
+"}}}
+" Highlighting primitives"{{{
+" ---------------------------------------------------------------------
+
+exe "let s:bg_none      = ' ctermbg=".s:c_none   ." guibg=".s:g_none   ."'" 
+exe "let s:bg_back      = ' ctermbg=".s:c_back   ." guibg=".s:g_back   ."'" 
+exe "let s:bg_base03    = ' ctermbg=".s:c_base03 ." guibg=".s:g_base03 ."'" 
+exe "let s:bg_base02    = ' ctermbg=".s:c_base02 ." guibg=".s:g_base02 ."'" 
+exe "let s:bg_base01    = ' ctermbg=".s:c_base01 ." guibg=".s:g_base01 ."'" 
+exe "let s:bg_base00    = ' ctermbg=".s:c_base00 ." guibg=".s:g_base00 ."'" 
+exe "let s:bg_base0     = ' ctermbg=".s:c_base0  ." guibg=".s:g_base0  ."'" 
+exe "let s:bg_base1     = ' ctermbg=".s:c_base1  ." guibg=".s:g_base1  ."'" 
+exe "let s:bg_base2     = ' ctermbg=".s:c_base2  ." guibg=".s:g_base2  ."'" 
+exe "let s:bg_base3     = ' ctermbg=".s:c_base3  ." guibg=".s:g_base3  ."'" 
+exe "let s:bg_green     = ' ctermbg=".s:c_green  ." guibg=".s:g_green  ."'" 
+exe "let s:bg_yellow    = ' ctermbg=".s:c_yellow ." guibg=".s:g_yellow ."'" 
+exe "let s:bg_orange    = ' ctermbg=".s:c_orange ." guibg=".s:g_orange ."'" 
+exe "let s:bg_red       = ' ctermbg=".s:c_red    ." guibg=".s:g_red    ."'" 
+exe "let s:bg_magenta   = ' ctermbg=".s:c_magenta." guibg=".s:g_magenta."'" 
+exe "let s:bg_violet    = ' ctermbg=".s:c_violet ." guibg=".s:g_violet ."'" 
+exe "let s:bg_blue      = ' ctermbg=".s:c_blue   ." guibg=".s:g_blue   ."'" 
+exe "let s:bg_cyan      = ' ctermbg=".s:c_cyan   ." guibg=".s:g_cyan   ."'" 
+
+exe "let s:fg_none      = ' ctermfg=".s:c_none   ." guifg=".s:g_none   ."'" 
+exe "let s:fg_back      = ' ctermfg=".s:c_back   ." guifg=".s:g_back   ."'" 
+exe "let s:fg_base03    = ' ctermfg=".s:c_base03 ." guifg=".s:g_base03 ."'" 
+exe "let s:fg_base02    = ' ctermfg=".s:c_base02 ." guifg=".s:g_base02 ."'" 
+exe "let s:fg_base01    = ' ctermfg=".s:c_base01 ." guifg=".s:g_base01 ."'" 
+exe "let s:fg_base00    = ' ctermfg=".s:c_base00 ." guifg=".s:g_base00 ."'" 
+exe "let s:fg_base0     = ' ctermfg=".s:c_base0  ." guifg=".s:g_base0  ."'" 
+exe "let s:fg_base1     = ' ctermfg=".s:c_base1  ." guifg=".s:g_base1  ."'" 
+exe "let s:fg_base2     = ' ctermfg=".s:c_base2  ." guifg=".s:g_base2  ."'" 
+exe "let s:fg_base3     = ' ctermfg=".s:c_base3  ." guifg=".s:g_base3  ."'" 
+exe "let s:fg_green     = ' ctermfg=".s:c_green  ." guifg=".s:g_green  ."'" 
+exe "let s:fg_yellow    = ' ctermfg=".s:c_yellow ." guifg=".s:g_yellow ."'" 
+exe "let s:fg_orange    = ' ctermfg=".s:c_orange ." guifg=".s:g_orange ."'" 
+exe "let s:fg_red       = ' ctermfg=".s:c_red    ." guifg=".s:g_red    ."'" 
+exe "let s:fg_magenta   = ' ctermfg=".s:c_magenta." guifg=".s:g_magenta."'" 
+exe "let s:fg_violet    = ' ctermfg=".s:c_violet ." guifg=".s:g_violet ."'" 
+exe "let s:fg_blue      = ' ctermfg=".s:c_blue   ." guifg=".s:g_blue   ."'" 
+exe "let s:fg_cyan      = ' ctermfg=".s:c_cyan   ." guifg=".s:g_cyan   ."'" 
+
+exe "let s:sp_none      = ' guisp=".s:g_none   ."'" 
+exe "let s:sp_back      = ' guisp=".s:g_back   ."'" 
+exe "let s:sp_base03    = ' guisp=".s:g_base03 ."'" 
+exe "let s:sp_base02    = ' guisp=".s:g_base02 ."'" 
+exe "let s:sp_base01    = ' guisp=".s:g_base01 ."'" 
+exe "let s:sp_base00    = ' guisp=".s:g_base00 ."'" 
+exe "let s:sp_base0     = ' guisp=".s:g_base0  ."'" 
+exe "let s:sp_base1     = ' guisp=".s:g_base1  ."'" 
+exe "let s:sp_base2     = ' guisp=".s:g_base2  ."'" 
+exe "let s:sp_base3     = ' guisp=".s:g_base3  ."'" 
+exe "let s:sp_green     = ' guisp=".s:g_green  ."'" 
+exe "let s:sp_yellow    = ' guisp=".s:g_yellow ."'" 
+exe "let s:sp_orange    = ' guisp=".s:g_orange ."'" 
+exe "let s:sp_red       = ' guisp=".s:g_red    ."'" 
+exe "let s:sp_magenta   = ' guisp=".s:g_magenta."'" 
+exe "let s:sp_violet    = ' guisp=".s:g_violet ."'" 
+exe "let s:sp_blue      = ' guisp=".s:g_blue   ."'" 
+exe "let s:sp_cyan      = ' guisp=".s:g_cyan   ."'" 
+
+exe "let s:fmt_none     = ' cterm=NONE".    " gui=NONE".    " term=NONE".    "'"
+exe "let s:fmt_bold     = ' cterm=NONE".s:b." gui=NONE".s:b." term=NONE".s:b."'"
+exe "let s:fmt_bldi     = ' cterm=NONE".s:b." gui=NONE".s:b.s:i." term=NONE".s:b."'"
+exe "let s:fmt_undr     = ' cterm=NONE".s:u." gui=NONE".s:u." term=NONE".s:u."'"
+exe "let s:fmt_undb     = ' cterm=NONE".s:u.s:b." gui=NONE".s:u.s:b.
+            \" term=NONE".s:u.s:b."'"
+exe "let s:fmt_undi     = ' cterm=NONE".s:u." gui=NONE".s:u.s:i.
+            \" term=NONE".s:u."'"
+exe "let s:fmt_uopt     = ' cterm=NONE".s:ou." gui=NONE".s:ou.
+            \" term=NONE".s:ou."'"
+exe "let s:fmt_bopt     = ' cterm=NONE".s:ob." gui=NONE".s:ob.
+            \" term=NONE".s:ob."'"
+exe "let s:fmt_curl     = ' cterm=NONE".s:c." gui=NONE".s:c." term=NONE".s:c."'"
+exe "let s:fmt_ital     = ' cterm=NONE".    " gui=NONE".s:i." term=NONE".    "'"
+exe "let s:fmt_revr     = ' cterm=NONE".s:r." gui=NONE".s:r." term=NONE".s:r."'"
+exe "let s:fmt_stnd     = ' cterm=NONE".s:s." gui=NONE".s:s." term=NONE".s:s."'"
+"}}}
+" Basic highlighting"{{{
+" ---------------------------------------------------------------------
+" note that link syntax to avoid duplicate configuration doesn't work with the
+" exe compiled formats
+
+exe "hi Normal"         . s:fg_base0  .s:bg_back   .s:fmt_none
+
+exe "hi Comment"        . s:fg_base01 .s:bg_none   .s:fmt_ital
+"      *Comment         any comment
+
+exe "hi Constant"       . s:fg_cyan   .s:bg_none   .s:fmt_none
+"exe "hi String"         . s:fg_yellow .s:bg_none   .s:fmt_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:fg_blue   .s:bg_none   .s:fmt_none
+"      *Identifier      any variable name
+"       Function        function name (also: methods for classes)
+"
+exe "hi Statement"      . s:fg_green  .s:bg_none   .s:fmt_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:fg_orange .s:bg_none   .s:fmt_none
+"      *PreProc         generic Preprocessor
+"       Include         preprocessor #include
+"       Define          preprocessor #define
+"       Macro           same as Define
+"       PreCondit       preprocessor #if, #else, #endif, etc.
+
+exe "hi Type"           . s:fg_yellow .s:bg_none   .s:fmt_none
+"      *Type            int, long, char, etc.
+"       StorageClass    static, register, volatile, etc.
+"       Structure       struct, union, enum, etc.
+"       Typedef         A typedef
+
+exe "hi Special"        . s:fg_red    .s:bg_none   .s:fmt_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:fg_violet .s:bg_none   .s:fmt_none
+"      *Underlined      text that stands out, HTML links
+
+exe "hi Ignore"         . s:fg_none   .s:bg_none   .s:fmt_none
+"      *Ignore          left blank, hidden  |hl-Ignore|
+
+exe "hi Error"          . s:fg_red    .s:bg_none   .s:fmt_bold
+"      *Error           any erroneous construct
+
+exe "hi Todo"           . s:fg_magenta.s:bg_none   .s:fmt_bold
+"      *Todo            anything that needs extra attention; mostly the
+"                       keywords TODO FIXME and XXX
+"
+"Highlighting groups for various occasions
+"-----------------------------------------
+exe "hi SpecialKey"     . s:fg_base02 .s:bg_none   .s:fmt_none
+exe "hi NonText"        . s:fg_base02 .s:bg_none   .s:fmt_bold
+exe "hi Directory"      . s:fg_blue   .s:bg_none   .s:fmt_none
+exe "hi ErrorMsg"       . s:fg_red    .s:bg_none   .s:fmt_revr
+exe "hi IncSearch"      . s:fg_yellow .s:bg_none   .s:fmt_revr
+exe "hi Search"         . s:fg_yellow .s:bg_none   .s:fmt_stnd
+exe "hi MoreMsg"        . s:fg_blue   .s:bg_none   .s:fmt_none
+exe "hi ModeMsg"        . s:fg_blue   .s:bg_none   .s:fmt_none
+exe "hi LineNr"         . s:fg_base01 .s:bg_base02 .s:fmt_none
+exe "hi Question"       . s:fg_cyan   .s:bg_none   .s:fmt_bold
+exe "hi StatusLine"     . s:fg_base0  .s:bg_base02 .s:fmt_none
+exe "hi StatusLineNC"   . s:fg_base1  .s:bg_base02 .s:fmt_none
+exe "hi VertSplit"      . s:fg_base0  .s:bg_base02 .s:fmt_none
+exe "hi Title"          . s:fg_orange .s:bg_none   .s:fmt_bold
+exe "hi Visual"         . s:fg_none   .s:bg_base02 .s:fmt_stnd
+exe "hi VisualNOS"      . s:fg_none   .s:bg_base02 .s:fmt_stnd
+exe "hi WarningMsg"     . s:fg_red    .s:bg_none   .s:fmt_bold
+exe "hi WildMenu"       . s:fg_base1  .s:bg_base02 .s:fmt_none
+exe "hi Folded"         . s:fg_base0  .s:bg_base02 .s:fmt_undr   .s:sp_base03
+exe "hi FoldColumn"     . s:fg_base0  .s:bg_base02 .s:fmt_bold
+exe "hi DiffAdd"        . s:fg_green  .s:bg_none   .s:fmt_revr
+exe "hi DiffChange"     . s:fg_yellow .s:bg_none   .s:fmt_revr
+exe "hi DiffDelete"     . s:fg_red    .s:bg_none   .s:fmt_revr
+exe "hi DiffText"       . s:fg_blue   .s:bg_none   .s:fmt_revr
+exe "hi SignColumn"     . s:fg_base0  .s:bg_base02 .s:fmt_none
+exe "hi Conceal"        . s:fg_blue   .s:bg_none   .s:fmt_none
+exe "hi SpellBad"       . s:fg_none   .s:bg_none   .s:fmt_curl   .s:sp_red
+exe "hi SpellCap"       . s:fg_none   .s:bg_none   .s:fmt_curl   .s:sp_violet
+exe "hi SpellRare"      . s:fg_none   .s:bg_none   .s:fmt_curl   .s:sp_cyan
+exe "hi SpellLocal"     . s:fg_none   .s:bg_none   .s:fmt_curl   .s:sp_yellow
+exe "hi Pmenu"          . s:fg_base0  .s:bg_base02 .s:fmt_none
+exe "hi PmenuSel"       . s:fg_base2  .s:bg_base01 .s:fmt_none
+exe "hi PmenuSbar"      . s:fg_base0  .s:bg_base2  .s:fmt_none
+exe "hi PmenuThumb"     . s:fg_base03 .s:bg_base0  .s:fmt_none
+exe "hi TabLine"        . s:fg_base0  .s:bg_base02 .s:fmt_undr   .s:sp_base0
+exe "hi TabLineSel"     . s:fg_base2  .s:bg_base01 .s:fmt_undr   .s:sp_base0
+exe "hi TabLineFill"    . s:fg_base0  .s:bg_base02 .s:fmt_undr   .s:sp_base0
+exe "hi CursorColumn"   . s:fg_none   .s:bg_base02 .s:fmt_none
+exe "hi CursorLine"     . s:fg_none   .s:bg_base02 .s:fmt_uopt   .s:sp_base1
+exe "hi ColorColumn"    . s:fg_none   .s:bg_base02 .s:fmt_none
+exe "hi Cursor"         . s:fg_none   .s:bg_none   .s:fmt_revr
+exe "hi lCursor"        . s:fg_none   .s:bg_none   .s:fmt_stnd
+exe "hi MatchParen"     . s:fg_red    .s:bg_base01 .s:fmt_bold
+
+"}}}
+" Extended highlighting "{{{
+" ---------------------------------------------------------------------
+"}}}
+" vim syntax highlighting "{{{
+" ---------------------------------------------------------------------
+exe "hi vimLineComment" . s:fg_base01 .s:bg_none   .s:fmt_ital
+exe "hi vimCommentString".s:fg_violet .s:bg_none   .s:fmt_none
+hi link vimVar Identifier
+hi link vimFunc Function
+hi link vimUserFunc Function
+exe "hi vimCommand"     . s:fg_yellow .s:bg_none   .s:fmt_none
+exe "hi vimCmdSep"      . s:fg_blue   .s:bg_none   .s:fmt_bold
+exe "hi helpExample"    . s:fg_base1  .s:bg_none   .s:fmt_none
+hi link helpSpecial Special
+"exe "hi helpSpecial"    . s:fg_yellow .s:bg_none   .s:fmt_none
+exe "hi helpOption"     . s:fg_cyan   .s:bg_none   .s:fmt_none
+exe "hi helpNote"       . s:fg_magenta.s:bg_none   .s:fmt_none
+exe "hi helpVim"       . s:fg_magenta.s:bg_none   .s:fmt_none
+exe "hi helpHyperTextJump".s:fg_blue  .s:bg_none   .s:fmt_undr
+exe "hi helpHyperTextEntry".s:fg_green .s:bg_none   .s:fmt_none
+exe "hi vimIsCommand"   . s:fg_base00 .s:bg_none   .s:fmt_none
+exe "hi vimSynMtchOpt". s:fg_yellow .s:bg_none   .s:fmt_none
+exe "hi vimSynType"     . s:fg_cyan   .s:bg_none   .s:fmt_none
+exe "hi vimHiLink"      . s:fg_blue   .s:bg_none   .s:fmt_none
+exe "hi vimHiGroup"     . s:fg_blue   .s:bg_none   .s:fmt_none
+exe "hi vimGroup"       . s:fg_blue   .s:bg_none   .s:fmt_undb
+"}}}
+" html highlighting "{{{
+" ---------------------------------------------------------------------
+exe "hi htmlTag"        . s:fg_base01 .s:bg_none   .s:fmt_none
+exe "hi htmlEndTag"     . s:fg_base01 .s:bg_none   .s:fmt_none
+exe "hi htmlTagN"       . s:fg_base1  .s:bg_none   .s:fmt_bold
+exe "hi htmlTagName"    . s:fg_blue   .s:bg_none   .s:fmt_bold
+exe "hi htmlSpecialTagName". s:fg_blue  .s:bg_none .s:fmt_ital
+exe "hi htmlArg"        . s:fg_base00 .s:bg_none   .s:fmt_none
+exe "hi javaScript"     . s:fg_yellow .s:bg_none   .s:fmt_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
+
+"}}}
+" 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/ftplugin/html

-/home/wheaties/dev/sparkup/vim/ftplugin/html

.vim/syntax/sikuli.vim

-/home/wheaties/repos/vim-sikuli/sikuli.vim
 set wildcharm=<Tab> wildmenu wildmode=full
 " set cursorline cursorcolumn
 
-" Vim 7.3-specific config
-if version >= 703
-    set relativenumber
+set relativenumber
 
-    " Pull up NERD Tree and the Tag List plugins
-    nnoremap <silent> <F6> :NERDTreeToggle<CR>:set norelativenumber nolist<CR>
-else
-    set number
-    nnoremap <silent> <F6> :NERDTreeToggle<CR>:set nonumber nolist<CR>
-endif
+" Pull up NERD Tree and the Tag List plugins
+nnoremap <silent> <F6> :NERDTreeToggle<CR>:set norelativenumber nolist<CR>
+nnoremap <silent> <F5> :cd ~/dev/stc/stctaf<CR>:NERDTreeToggle<CR><C-w>l:e fabfile.py<CR><C-w>h/+stctaf\/<CR>
 
 " Replace stuff with line number :%s/\v^\[ ?\d+]/\=line(".")/
 
 au BufEnter,BufRead,BufNewFile *.coffee setlocal shiftwidth=2 tabstop=2 syntax=coffee nolist
 au BufEnter,BufRead,BufNewFile *.rb setlocal shiftwidth=2 tabstop=2 syntax=ruby nolist
 au BufEnter,BufRead,BufNewFile *.hs setlocal shiftwidth=2 tabstop=2 syntax=haskell nolist
+au BufEnter,BufRead,BufNewFile *.py setlocal list relativenumber
 "au BufWritePost *.coffee silent CoffeeMake! | cwindow
 
 " Highlight trailing spaces
     set guioptions=-T
     set guioptions=-t
 
-    " Maximize the window
-    nnoremap <silent> <F5> :set lines=999 columns=999<CR>:cd ~/dev/G3/G3code/backend<CR>
-
     " Automatically save the state of files when closed
     autocmd BufWinLeave *.* silent mkview
 

plugin

-.vim/plugin

plugin/CloseBuffer.vim

+" Allows closing of buffers but not windows when you have multiple windows
+" Maintainer: Josh VanderLinden
+" License: Public domain
+
+if exists("loaded_CloseBuffer")
+    finish
+endif
+
+let loaded_CloseBuffer = 1
+let s:keepcpo = &cpo
+set cpo&vim
+
+if !hasmapto('<Plug>ClosebufferClose')
+    map <unique> <Leader>bd <Plug>ClosebufferClose
+endif
+noremap <unique> <script> <Plug>ClosebufferClose <SID>Close
+noremenu <script> Plugin.Close\ Buffer <SID>Close
+
+noremap <SID>Close :call <SID>Close()<CR>
+
+function s:Close()
+    python << EOF
+import vim
+make_name = lambda c: 'new_buffer%i' % c
+
+if len(vim.windows) > 1:
+    # We're only interested in doing things when we have more than one window
+    bid = vim.current.buffer.number
+    if len(vim.buffers) > 1:
+        vim.command(':bn')
+    else:
+        counter = 0
+        name = make_name(counter)
+        names = [b.name for b in vim.buffers]
+        while name in names:
+            counter += 1
+            name = make_name(counter)
+        vim.command(':e%s' % name)
+    vim.command(':bd%i' % bid)
+EOF
+endfunc
+
+if !exists(":Close")
+    command Close :call s:Close()
+endif
+
+let &cpo= s:keepcpo
+unlet s:keepcpo

plugin/FindFile.vim

+" vim600: set foldmethod=marker:
+" $Id:$
+" PURPOSE: {{{
+"   - FindFile: Switch to an auto-completing buffer to open a file quickly.
+"
+" REQUIREMENTS:
+"   - Vim 7.0
+"
+" USAGE:
+"   Put this file in your ~/.vim/plugin directory.
+"   If you are working on a project, go to the root directory of the project,
+"   then execute:
+"
+"       :FindFileCache .<CR>
+"       or
+"       :FC .<CR>
+"
+"   This will recursively parse the directory and create the internal cache.
+"
+"   You can also put in multiple arguments in :FC:
+"
+"       :FC /dir1 /dir2 /dir3
+"
+"   You can add to the cache by calling :FC again.  File with the same path
+"   will not be added to the cache twice.
+"
+"   To find a file:
+"
+"       :FindFile<CR>
+"       or
+"       :FF<CR>
+"
+"   This opens a scratch buffer that you can type in the file name.  Press
+"   <Esc> will quit the buffer, while <Enter> will select and edit the file.
+"
+"   To clear the internal cache, do:
+"
+"       :FindFileCacheClear<CR>
+"       or
+"       :FCC<CR>
+"
+"
+"   You can put the following lines in your ~/.vimrc in order to invoke
+"   FindFile quickly by hitting <C-f>:
+"
+"       :nmap <C-f> :FindFile<CR>
+"
+"   By default, all the *.o, *.pyc, and */tmp/* files will be ignored, in
+"   addition to the wildignore patterns.  You can customize this by setting in
+"   your .vimrc:
+"
+"       let g:FindFileIgnore = ['*.o', '*.pyc', '*/tmp/*']
+"
+" CREDITS:
+"   Please mail any comment/suggestion/patch to 
+"   William Lee <wl1012@yahoo.com>
+"
+" Section: Mappings {{{1
+command! -nargs=* -complete=dir FindFileCache call <SID>CacheDir(<f-args>)
+command! -nargs=* -complete=dir FC call <SID>CacheDir(<f-args>)
+
+command! FindFileCacheClear call <SID>CacheClear()
+command! FCC call <SID>CacheClear()
+
+command! FindFile call <SID>FindFile()
+command! FF call <SID>FindFile()
+
+command! FindFileSplit call <SID>FindFileSplit()
+command! FS call <SID>FindFileSplit()
+
+" Global Settings {{{1
+if !exists("g:FindFileIgnore")
+    let g:FindFileIgnore = ['*.o', '*.pyc', '*/tmp/*']
+endif
+
+" Section: Functions {{{1
+" File cache to store the filename
+let s:fileCache = {}
+" The sorted keys for the dictionary
+let s:fileKeys = []
+
+fun! CompleteFile(findstart, base)
+	if a:findstart
+		return 0
+	else
+		" TODO: We can definitely do a binary search on the keys instead of
+		" doing a linear match.
+		for k in s:fileKeys
+			let matchExpr = <SID>EscapeChars(a:base)
+			if match(k, matchExpr) == 0
+				call complete_add({'word': k, 'menu': s:fileCache[k], 'icase' : 1})
+			endif
+			if complete_check()
+				break
+			endif
+		endfor
+		return []
+	endif
+endfun
+
+fun! <SID>MayComplete(c)
+    if pumvisible()
+        return a:c
+    else
+	    return "" . a:c . "\<C-X>\<C-O>"
+    endif
+endfun
+
+fun! <SID>FindFileSplit()
+    split
+    call <SID>FindFile()
+endfun
+
+fun! <SID>FindFile()
+	new FindFile
+	setlocal buftype=nofile
+	setlocal bufhidden=hide
+	setlocal noswapfile
+	" Map the keys for completion:
+	" We are remapping keys from ascii 33 (!) to 126 (~)
+	let k = 33
+	while (k < 127)
+		let c = escape(nr2char(k), "\\'|")
+		let remapCmd = "inoremap <expr> <buffer> " . c . " <SID>MayComplete('" . c . "')"
+		exe remapCmd
+		let k = k + 1
+	endwhile
+
+	inoremap <buffer> <CR> <ESC>:silent call <SID>EditFile(getline("."))<CR>
+	inoremap <buffer> <ESC> <C-[>:silent call <SID>QuitBuff()<CR>
+	nnoremap <buffer> <ESC> :silent call <SID>QuitBuff()<CR>
+	setlocal completeopt=menuone,longest,preview
+	setlocal omnifunc=CompleteFile
+	setlocal noignorecase
+	startinsert
+endfun
+
+fun! <SID>CacheClear()
+	let s:fileCache = {}
+	let s:fileKeys = []
+	echo "FindFile cache cleared."
+endfun
+
+fun! <SID>EscapeChars(toEscape)
+	return escape(a:toEscape, ". \!\@\#\$\%\^\&\*\(\)\-\=\\\|\~\`\'")
+endfun
+
+fun! <SID>CacheDir(...)
+	echo "Finding files to cache..."
+	for d in a:000
+		"Creates the dictionary that will parse all files recursively
+		for i in g:FindFileIgnore
+			let s = "setlocal wildignore+=" . i
+			exe s
+		endfor
+		let files = glob(d . "/**")
+		for i in g:FindFileIgnore
+			let s = "setlocal wildignore-=" . i
+			exe s
+		endfor
+		let ctr = 0
+		for f in split(files, "\n")
+			let fname = fnamemodify(f, ":t")
+			let fpath = fnamemodify(f, ":p")
+			" We only glob the files, not directory
+			if !isdirectory(fpath)
+				" If the cache already has this entry, we'll just skip it
+				let hasEntry = 0
+				while has_key(s:fileCache, fname)
+					if s:fileCache[fname] == fpath
+						let hasEntry = 1
+						break
+					endif
+					let fnameArr = split(fname, ":")
+					if len(fnameArr) > 1
+						let fname = fnameArr[0] . ":" . (fnameArr[1] + 1)
+					else
+						let fname = fname . ":1"
+					endif
+				endwhile
+				if !hasEntry
+					let s:fileCache[fname] = fpath
+					let ctr = ctr + 1
+				endif
+			endif
+		endfor
+		let s:fileKeys = sort(copy(keys(s:fileCache)))
+		echo "Found " . ctr . " new files in '" . d . "'. Cache has " . len(s:fileKeys) . " entries."
+	endfor
+endfun
+
+fun! <SID>QuitBuff()
+	silent exe "bd!"
+endfun
+
+fun! <SID>EditFile(f)
+	" Closes the buffer
+	let fileToOpen = a:f
+	if has_key(s:fileCache, a:f)
+		let fileToOpen = s:fileCache[a:f]
+	else
+		" We attempt to find the file in the list if it is not a
+		" complete key
+		let matchExpr = <SID>EscapeChars(a:f)
+		for k in s:fileKeys
+			if match(k, matchExpr) == 0
+				let fileToOpen = s:fileCache[k]
+				break
+			endif
+		endfor
+	endif
+	if filereadable(fileToOpen)
+		silent exe "bd!"
+		silent exe "edit " . fileToOpen
+		echo "File: " . fileToOpen
+	else
+		echo "File " . fileToOpen . " not found. Run ':FileFindCache .' to refresh if necessary."
+	endif
+endfun

plugin/MQUtils.vim

+" Mercurial Patch Queue Utils
+" This plugin allows you to quickly interact with Mercurial Queues within VIM
+" Maintainer: Josh VanderLinden
+" License: Public domain
+
+if exists("loaded_MQUtils")
+    finish
+endif
+
+let loaded_MQUtils = 1
+let s:keepcpo = &cpo
+set cpo&vim
+
+if !hasmapto('<Plug>MqutilsOpenpatch')
+    map <unique> <Leader>pf <Plug>MqutilsOpenpatch
+endif
+noremap <unique> <script> <Plug>MqutilsOpenpatch <SID>OpenPatch
+noremenu <script> Plugin.Open\ Current\ Patch <SID>OpenPatch
+
+noremap <SID>OpenPatch :call <SID>OpenPatch()<CR>
+
+function s:OpenPatch()
+    " This is what does all of the work of finding and opening a patch file
+    python << EOF
+import commands
+patch = commands.getoutput('hg qtop')
+if 'unknown command' in patch:
+    print 'Mercurial Queues extension not installed.'
+elif 'no Mercurial repository' in patch:
+    print 'Not in a Mercurial repository.'
+elif 'no patch' in patch:
+    print patch
+else:
+    import vim, os
+    root = commands.getoutput('hg root')
+    patch_file = os.path.join(root, '.hg', 'patches', patch)
+    vim.command(':e %s' % patch_file)
+EOF
+endfunc
+
+if !exists(":OpenPatch")
+    command OpenPatch :call s:OpenPatch()
+endif
+
+let &cpo= s:keepcpo
+unlet s:keepcpo

plugin/NERD_tree.vim

+" ============================================================================
+" File:        NERD_tree.vim
+" Description: vim global plugin that provides a nice tree explorer
+" Maintainer:  Martin Grenfell <martin.grenfell at gmail dot com>
+" Last Change: 1 December, 2009
+" License:     This program is free software. It comes without any warranty,
+"              to the extent permitted by applicable law. You can redistribute
+"              it and/or modify it under the terms of the Do What The Fuck You
+"              Want To Public License, Version 2, as published by Sam Hocevar.
+"              See http://sam.zoy.org/wtfpl/COPYING for more details.
+"
+" ============================================================================
+let s:NERD_tree_version = '4.1.0'
+
+" SECTION: Script init stuff {{{1
+"============================================================
+if exists("loaded_nerd_tree")
+    finish
+endif
+if v:version < 700
+    echoerr "NERDTree: this plugin requires vim >= 7. DOWNLOAD IT! You'll thank me later!"
+    finish
+endif
+let loaded_nerd_tree = 1
+
+"for line continuation - i.e dont want C in &cpo
+let s:old_cpo = &cpo
+set cpo&vim
+
+"Function: s:initVariable() function {{{2
+"This function is used to initialise a given variable to a given value. The
+"variable is only initialised if it does not exist prior
+"
+"Args:
+"var: the name of the var to be initialised
+"value: the value to initialise var to
+"
+"Returns:
+"1 if the var is set, 0 otherwise
+function! s:initVariable(var, value)
+    if !exists(a:var)
+        exec 'let ' . a:var . ' = ' . "'" . a:value . "'"
+        return 1
+    endif
+    return 0
+endfunction
+
+"SECTION: Init variable calls and other random constants {{{2
+call s:initVariable("g:NERDChristmasTree", 1)
+call s:initVariable("g:NERDTreeAutoCenter", 1)
+call s:initVariable("g:NERDTreeAutoCenterThreshold", 3)
+call s:initVariable("g:NERDTreeCaseSensitiveSort", 0)
+call s:initVariable("g:NERDTreeChDirMode", 0)
+if !exists("g:NERDTreeIgnore")
+    let g:NERDTreeIgnore = ['\~$']
+endif
+call s:initVariable("g:NERDTreeBookmarksFile", expand('$HOME') . '/.NERDTreeBookmarks')
+call s:initVariable("g:NERDTreeHighlightCursorline", 1)
+call s:initVariable("g:NERDTreeHijackNetrw", 1)
+call s:initVariable("g:NERDTreeMouseMode", 1)
+call s:initVariable("g:NERDTreeNotificationThreshold", 100)
+call s:initVariable("g:NERDTreeQuitOnOpen", 0)
+call s:initVariable("g:NERDTreeShowBookmarks", 0)
+call s:initVariable("g:NERDTreeShowFiles", 1)
+call s:initVariable("g:NERDTreeShowHidden", 0)
+call s:initVariable("g:NERDTreeShowLineNumbers", 0)
+call s:initVariable("g:NERDTreeSortDirs", 1)
+
+if !exists("g:NERDTreeSortOrder")
+    let g:NERDTreeSortOrder = ['\/$', '*', '\.swp$',  '\.bak$', '\~$']
+else
+    "if there isnt a * in the sort sequence then add one
+    if count(g:NERDTreeSortOrder, '*') < 1
+        call add(g:NERDTreeSortOrder, '*')
+    endif
+endif
+
+"we need to use this number many times for sorting... so we calculate it only
+"once here
+let s:NERDTreeSortStarIndex = index(g:NERDTreeSortOrder, '*')
+
+if !exists('g:NERDTreeStatusline')
+
+    "the exists() crap here is a hack to stop vim spazzing out when
+    "loading a session that was created with an open nerd tree. It spazzes
+    "because it doesnt store b:NERDTreeRoot (its a b: var, and its a hash)
+    let g:NERDTreeStatusline = "%{exists('b:NERDTreeRoot')?b:NERDTreeRoot.path.str():''}"
+
+endif
+call s:initVariable("g:NERDTreeWinPos", "left")
+call s:initVariable("g:NERDTreeWinSize", 31)
+
+let s:running_windows = has("win16") || has("win32") || has("win64")
+
+"init the shell commands that will be used to copy nodes, and remove dir trees
+"
+"Note: the space after the command is important
+if s:running_windows
+    call s:initVariable("g:NERDTreeRemoveDirCmd", 'rmdir /s /q ')
+else
+    call s:initVariable("g:NERDTreeRemoveDirCmd", 'rm -rf ')
+    call s:initVariable("g:NERDTreeCopyCmd", 'cp -r ')
+endif
+
+
+"SECTION: Init variable calls for key mappings {{{2
+call s:initVariable("g:NERDTreeMapActivateNode", "o")
+call s:initVariable("g:NERDTreeMapChangeRoot", "C")
+call s:initVariable("g:NERDTreeMapChdir", "cd")
+call s:initVariable("g:NERDTreeMapCloseChildren", "X")
+call s:initVariable("g:NERDTreeMapCloseDir", "x")
+call s:initVariable("g:NERDTreeMapDeleteBookmark", "D")
+call s:initVariable("g:NERDTreeMapMenu", "m")
+call s:initVariable("g:NERDTreeMapHelp", "?")
+call s:initVariable("g:NERDTreeMapJumpFirstChild", "K")
+call s:initVariable("g:NERDTreeMapJumpLastChild", "J")
+call s:initVariable("g:NERDTreeMapJumpNextSibling", "<C-j>")
+call s:initVariable("g:NERDTreeMapJumpParent", "p")
+call s:initVariable("g:NERDTreeMapJumpPrevSibling", "<C-k>")
+call s:initVariable("g:NERDTreeMapJumpRoot", "P")
+call s:initVariable("g:NERDTreeMapOpenExpl", "e")
+call s:initVariable("g:NERDTreeMapOpenInTab", "t")
+call s:initVariable("g:NERDTreeMapOpenInTabSilent", "T")
+call s:initVariable("g:NERDTreeMapOpenRecursively", "O")
+call s:initVariable("g:NERDTreeMapOpenSplit", "i")
+call s:initVariable("g:NERDTreeMapOpenVSplit", "s")
+call s:initVariable("g:NERDTreeMapPreview", "g" . NERDTreeMapActivateNode)
+call s:initVariable("g:NERDTreeMapPreviewSplit", "g" . NERDTreeMapOpenSplit)
+call s:initVariable("g:NERDTreeMapPreviewVSplit", "g" . NERDTreeMapOpenVSplit)
+call s:initVariable("g:NERDTreeMapQuit", "q")
+call s:initVariable("g:NERDTreeMapRefresh", "r")
+call s:initVariable("g:NERDTreeMapRefreshRoot", "R")
+call s:initVariable("g:NERDTreeMapToggleBookmarks", "B")
+call s:initVariable("g:NERDTreeMapToggleFiles", "F")
+call s:initVariable("g:NERDTreeMapToggleFilters", "f")
+call s:initVariable("g:NERDTreeMapToggleHidden", "I")
+call s:initVariable("g:NERDTreeMapToggleZoom", "A")
+call s:initVariable("g:NERDTreeMapUpdir", "u")
+call s:initVariable("g:NERDTreeMapUpdirKeepOpen", "U")
+
+"SECTION: Script level variable declaration{{{2
+if s:running_windows
+    let s:escape_chars =  " `\|\"#%&,?()\*^<>"
+else
+    let s:escape_chars =  " \\`\|\"#%&,?()\*^<>"
+endif
+let s:NERDTreeBufName = 'NERD_tree_'
+
+let s:tree_wid = 2
+let s:tree_markup_reg = '^[ `|]*[\-+~]'
+let s:tree_up_dir_line = '.. (up a dir)'
+
+"the number to add to the nerd tree buffer name to make the buf name unique
+let s:next_buffer_number = 1
+
+" SECTION: Commands {{{1
+"============================================================
+"init the command that users start the nerd tree with
+command! -n=? -complete=dir -bar NERDTree :call s:initNerdTree('<args>')
+command! -n=? -complete=dir -bar NERDTreeToggle :call s:toggle('<args>')
+command! -n=0 -bar NERDTreeClose :call s:closeTreeIfOpen()
+command! -n=1 -complete=customlist,s:completeBookmarks -bar NERDTreeFromBookmark call s:initNerdTree('<args>')
+command! -n=0 -bar NERDTreeMirror call s:initNerdTreeMirror()
+command! -n=0 -bar NERDTreeFind call s:findAndRevealPath()
+" SECTION: Auto commands {{{1
+"============================================================
+augroup NERDTree
+    "Save the cursor position whenever we close the nerd tree
+    exec "autocmd BufWinLeave ". s:NERDTreeBufName ."* call <SID>saveScreenState()"
+    "cache bookmarks when vim loads
+    autocmd VimEnter * call s:Bookmark.CacheBookmarks(0)
+
+    "load all nerdtree plugins after vim starts
+    autocmd VimEnter * runtime! nerdtree_plugin/**/*.vim
+augroup END
+
+if g:NERDTreeHijackNetrw
+    augroup NERDTreeHijackNetrw
+        autocmd VimEnter * silent! autocmd! FileExplorer
+        au BufEnter,VimEnter * call s:checkForBrowse(expand("<amatch>"))
+    augroup END
+endif
+
+"SECTION: Classes {{{1
+"============================================================
+"CLASS: Bookmark {{{2
+"============================================================
+let s:Bookmark = {}
+" FUNCTION: Bookmark.activate() {{{3
+function! s:Bookmark.activate()
+    if self.path.isDirectory
+        call self.toRoot()
+    else
+        if self.validate()
+            let n = s:TreeFileNode.New(self.path)
+            call n.open()
+        endif
+    endif
+endfunction
+" FUNCTION: Bookmark.AddBookmark(name, path) {{{3
+" Class method to add a new bookmark to the list, if a previous bookmark exists
+" with the same name, just update the path for that bookmark
+function! s:Bookmark.AddBookmark(name, path)
+    for i in s:Bookmark.Bookmarks()
+        if i.name ==# a:name
+            let i.path = a:path
+            return
+        endif
+    endfor
+    call add(s:Bookmark.Bookmarks(), s:Bookmark.New(a:name, a:path))
+    call s:Bookmark.Sort()
+endfunction
+" Function: Bookmark.Bookmarks()   {{{3
+" Class method to get all bookmarks. Lazily initializes the bookmarks global
+" variable
+function! s:Bookmark.Bookmarks()
+    if !exists("g:NERDTreeBookmarks")
+        let g:NERDTreeBookmarks = []
+    endif
+    return g:NERDTreeBookmarks
+endfunction
+" Function: Bookmark.BookmarkExistsFor(name)   {{{3
+" class method that returns 1 if a bookmark with the given name is found, 0
+" otherwise
+function! s:Bookmark.BookmarkExistsFor(name)
+    try
+        call s:Bookmark.BookmarkFor(a:name)
+        return 1
+    catch /^NERDTree.BookmarkNotFoundError/
+        return 0
+    endtry
+endfunction
+" Function: Bookmark.BookmarkFor(name)   {{{3
+" Class method to get the bookmark that has the given name. {} is return if no
+" bookmark is found
+function! s:Bookmark.BookmarkFor(name)
+    for i in s:Bookmark.Bookmarks()
+        if i.name ==# a:name
+            return i
+        endif
+    endfor
+    throw "NERDTree.BookmarkNotFoundError: no bookmark found for name: \"". a:name  .'"'
+endfunction
+" Function: Bookmark.BookmarkNames()   {{{3
+" Class method to return an array of all bookmark names
+function! s:Bookmark.BookmarkNames()
+    let names = []
+    for i in s:Bookmark.Bookmarks()
+        call add(names, i.name)
+    endfor
+    return names
+endfunction
+" FUNCTION: Bookmark.CacheBookmarks(silent) {{{3
+" Class method to read all bookmarks from the bookmarks file intialize
+" bookmark objects for each one.
+"
+" Args:
+" silent - dont echo an error msg if invalid bookmarks are found
+function! s:Bookmark.CacheBookmarks(silent)
+    if filereadable(g:NERDTreeBookmarksFile)
+        let g:NERDTreeBookmarks = []
+        let g:NERDTreeInvalidBookmarks = []
+        let bookmarkStrings = readfile(g:NERDTreeBookmarksFile)
+        let invalidBookmarksFound = 0
+        for i in bookmarkStrings
+
+            "ignore blank lines
+            if i != ''
+
+                let name = substitute(i, '^\(.\{-}\) .*$', '\1', '')
+                let path = substitute(i, '^.\{-} \(.*\)$', '\1', '')
+
+                try
+                    let bookmark = s:Bookmark.New(name, s:Path.New(path))
+                    call add(g:NERDTreeBookmarks, bookmark)
+                catch /^NERDTree.InvalidArgumentsError/
+                    call add(g:NERDTreeInvalidBookmarks, i)
+                    let invalidBookmarksFound += 1
+                endtry
+            endif
+        endfor
+        if invalidBookmarksFound
+            call s:Bookmark.Write()
+            if !a:silent
+                call s:echo(invalidBookmarksFound . " invalid bookmarks were read. See :help NERDTreeInvalidBookmarks for info.")
+            endif
+        endif
+        call s:Bookmark.Sort()
+    endif
+endfunction
+" FUNCTION: Bookmark.compareTo(otherbookmark) {{{3
+" Compare these two bookmarks for sorting purposes
+function! s:Bookmark.compareTo(otherbookmark)
+    return a:otherbookmark.name < self.name
+endfunction
+" FUNCTION: Bookmark.ClearAll() {{{3
+" Class method to delete all bookmarks.
+function! s:Bookmark.ClearAll()
+    for i in s:Bookmark.Bookmarks()
+        call i.delete()
+    endfor
+    call s:Bookmark.Write()
+endfunction
+" FUNCTION: Bookmark.delete() {{{3
+" Delete this bookmark. If the node for this bookmark is under the current
+" root, then recache bookmarks for its Path object
+function! s:Bookmark.delete()
+    let node = {}
+    try
+        let node = self.getNode(1)
+    catch /^NERDTree.BookmarkedNodeNotFoundError/
+    endtry
+    call remove(s:Bookmark.Bookmarks(), index(s:Bookmark.Bookmarks(), self))
+    if !empty(node)
+        call node.path.cacheDisplayString()
+    endif
+    call s:Bookmark.Write()
+endfunction
+" FUNCTION: Bookmark.getNode(searchFromAbsoluteRoot) {{{3
+" Gets the treenode for this bookmark
+"
+" Args:
+" searchFromAbsoluteRoot: specifies whether we should search from the current
+" tree root, or the highest cached node
+function! s:Bookmark.getNode(searchFromAbsoluteRoot)
+    let searchRoot = a:searchFromAbsoluteRoot ? s:TreeDirNode.AbsoluteTreeRoot() : b:NERDTreeRoot
+    let targetNode = searchRoot.findNode(self.path)
+    if empty(targetNode)
+        throw "NERDTree.BookmarkedNodeNotFoundError: no node was found for bookmark: " . self.name
+    endif
+    return targetNode
+endfunction
+" FUNCTION: Bookmark.GetNodeForName(name, searchFromAbsoluteRoot) {{{3
+" Class method that finds the bookmark with the given name and returns the
+" treenode for it.
+function! s:Bookmark.GetNodeForName(name, searchFromAbsoluteRoot)
+    let bookmark = s:Bookmark.BookmarkFor(a:name)
+    return bookmark.getNode(a:searchFromAbsoluteRoot)
+endfunction
+" FUNCTION: Bookmark.GetSelected() {{{3
+" returns the Bookmark the cursor is over, or {}
+function! s:Bookmark.GetSelected()
+    let line = getline(".")
+    let name = substitute(line, '^>\(.\{-}\) .\+$', '\1', '')
+    if name != line
+        try
+            return s:Bookmark.BookmarkFor(name)
+        catch /^NERDTree.BookmarkNotFoundError/
+            return {}
+        endtry
+    endif
+    return {}
+endfunction
+
+" Function: Bookmark.InvalidBookmarks()   {{{3
+" Class method to get all invalid bookmark strings read from the bookmarks
+" file
+function! s:Bookmark.InvalidBookmarks()
+    if !exists("g:NERDTreeInvalidBookmarks")
+        let g:NERDTreeInvalidBookmarks = []
+    endif
+    return g:NERDTreeInvalidBookmarks
+endfunction
+" FUNCTION: Bookmark.mustExist() {{{3
+function! s:Bookmark.mustExist()
+    if !self.path.exists()
+        call s:Bookmark.CacheBookmarks(1)
+        throw "NERDTree.BookmarkPointsToInvalidLocationError: the bookmark \"".
+            \ self.name ."\" points to a non existing location: \"". self.path.str()
+    endif
+endfunction
+" FUNCTION: Bookmark.New(name, path) {{{3
+" Create a new bookmark object with the given name and path object
+function! s:Bookmark.New(name, path)
+    if a:name =~ ' '
+        throw "NERDTree.IllegalBookmarkNameError: illegal name:" . a:name
+    endif
+
+    let newBookmark = copy(self)
+    let newBookmark.name = a:name
+    let newBookmark.path = a:path
+    return newBookmark
+endfunction
+" FUNCTION: Bookmark.openInNewTab(options) {{{3
+" Create a new bookmark object with the given name and path object
+function! s:Bookmark.openInNewTab(options)
+    let currentTab = tabpagenr()
+    if self.path.isDirectory
+        tabnew
+        call s:initNerdTree(self.name)
+    else
+        exec "tabedit " . bookmark.path.str({'format': 'Edit'})
+    endif
+
+    if has_key(a:options, 'stayInCurrentTab')
+        exec "tabnext " . currentTab
+    endif
+endfunction
+" Function: Bookmark.setPath(path)   {{{3
+" makes this bookmark point to the given path
+function! s:Bookmark.setPath(path)
+    let self.path = a:path
+endfunction
+" Function: Bookmark.Sort()   {{{3
+" Class method that sorts all bookmarks
+function! s:Bookmark.Sort()
+    let CompareFunc = function("s:compareBookmarks")
+    call sort(s:Bookmark.Bookmarks(), CompareFunc)
+endfunction
+" Function: Bookmark.str()   {{{3
+" Get the string that should be rendered in the view for this bookmark
+function! s:Bookmark.str()
+    let pathStrMaxLen = winwidth(s:getTreeWinNum()) - 4 - len(self.name)
+    if &nu
+        let pathStrMaxLen = pathStrMaxLen - &numberwidth
+    endif
+
+    let pathStr = self.path.str({'format': 'UI'})
+    if len(pathStr) > pathStrMaxLen
+        let pathStr = '<' . strpart(pathStr, len(pathStr) - pathStrMaxLen)
+    endif
+    return '>' . self.name . ' ' . pathStr
+endfunction
+" FUNCTION: Bookmark.toRoot() {{{3
+" Make the node for this bookmark the new tree root
+function! s:Bookmark.toRoot()
+    if self.validate()
+        try
+            let targetNode = self.getNode(1)
+        catch /^NERDTree.BookmarkedNodeNotFoundError/
+            let targetNode = s:TreeFileNode.New(s:Bookmark.BookmarkFor(self.name).path)
+        endtry
+        call targetNode.makeRoot()
+        call s:renderView()
+        call targetNode.putCursorHere(0, 0)
+    endif
+endfunction
+" FUNCTION: Bookmark.ToRoot(name) {{{3
+" Make the node for this bookmark the new tree root
+function! s:Bookmark.ToRoot(name)
+    let bookmark = s:Bookmark.BookmarkFor(a:name)
+    call bookmark.toRoot()
+endfunction
+
+
+"FUNCTION: Bookmark.validate() {{{3
+function! s:Bookmark.validate()
+    if self.path.exists()
+        return 1
+    else
+        call s:Bookmark.CacheBookmarks(1)
+        call s:renderView()
+        call s:echo(self.name . "now points to an invalid location. See :help NERDTreeInvalidBookmarks for info.")
+        return 0
+    endif
+endfunction
+
+" Function: Bookmark.Write()   {{{3
+" Class method to write all bookmarks to the bookmarks file
+function! s:Bookmark.Write()
+    let bookmarkStrings = []
+    for i in s:Bookmark.Bookmarks()
+        call add(bookmarkStrings, i.name . ' ' . i.path.str())
+    endfor
+
+    "add a blank line before the invalid ones
+    call add(bookmarkStrings, "")
+
+    for j in s:Bookmark.InvalidBookmarks()
+        call add(bookmarkStrings, j)
+    endfor
+    call writefile(bookmarkStrings, g:NERDTreeBookmarksFile)
+endfunction
+"CLASS: KeyMap {{{2
+"============================================================
+let s:KeyMap = {}
+"FUNCTION: KeyMap.All() {{{3
+function! s:KeyMap.All()
+    if !exists("s:keyMaps")
+        let s:keyMaps = []
+    endif
+    return s:keyMaps
+endfunction
+
+"FUNCTION: KeyMap.BindAll() {{{3
+function! s:KeyMap.BindAll()
+    for i in s:KeyMap.All()
+        call i.bind()
+    endfor
+endfunction
+
+"FUNCTION: KeyMap.bind() {{{3
+function! s:KeyMap.bind()
+    exec "nnoremap <silent> <buffer> ". self.key ." :call ". self.callback ."()<cr>"
+endfunction
+
+"FUNCTION: KeyMap.Create(options) {{{3
+function! s:KeyMap.Create(options)
+    let newKeyMap = copy(self)
+    let newKeyMap.key = a:options['key']
+    let newKeyMap.quickhelpText = a:options['quickhelpText']
+    let newKeyMap.callback = a:options['callback']
+    call add(s:KeyMap.All(), newKeyMap)
+endfunction
+"CLASS: MenuController {{{2
+"============================================================
+let s:MenuController = {}
+"FUNCTION: MenuController.New(menuItems) {{{3
+"create a new menu controller that operates on the given menu items
+function! s:MenuController.New(menuItems)
+    let newMenuController =  copy(self)
+    if a:menuItems[0].isSeparator()
+        let newMenuController.menuItems = a:menuItems[1:-1]
+    else
+        let newMenuController.menuItems = a:menuItems
+    endif
+    return newMenuController
+endfunction
+
+"FUNCTION: MenuController.showMenu() {{{3
+"start the main loop of the menu and get the user to choose/execute a menu
+"item
+function! s:MenuController.showMenu()
+    call self._saveOptions()
+
+    try
+        let self.selection = 0
+
+        let done = 0
+        while !done
+            redraw!
+            call self._echoPrompt()
+            let key = nr2char(getchar())
+            let done = self._handleKeypress(key)
+        endwhile
+    finally
+        call self._restoreOptions()
+    endtry
+
+    if self.selection != -1
+        let m = self._current()
+        call m.execute()
+    endif
+endfunction
+
+"FUNCTION: MenuController._echoPrompt() {{{3
+function! s:MenuController._echoPrompt()
+    echo "NERDTree Menu. Use j/k/enter and the shortcuts indicated"
+    echo "=========================================================="
+
+    for i in range(0, len(self.menuItems)-1)
+        if self.selection == i
+            echo "> " . self.menuItems[i].text
+        else
+            echo "  " . self.menuItems[i].text
+        endif
+    endfor
+endfunction
+
+"FUNCTION: MenuController._current(key) {{{3
+"get the MenuItem that is curently selected
+function! s:MenuController._current()
+    return self.menuItems[self.selection]
+endfunction
+
+"FUNCTION: MenuController._handleKeypress(key) {{{3
+"change the selection (if appropriate) and return 1 if the user has made
+"their choice, 0 otherwise
+function! s:MenuController._handleKeypress(key)
+    if a:key == 'j'
+        call self._cursorDown()
+    elseif a:key == 'k'
+        call self._cursorUp()
+    elseif a:key == nr2char(27) "escape
+        let self.selection = -1
+        return 1
+    elseif a:key == "\r" || a:key == "\n" "enter and ctrl-j
+        return 1
+    else
+        let index = self._nextIndexFor(a:key)
+        if index != -1
+            let self.selection = index
+            if len(self._allIndexesFor(a:key)) == 1
+                return 1
+            endif
+        endif
+    endif
+
+    return 0
+endfunction
+
+"FUNCTION: MenuController._allIndexesFor(shortcut) {{{3
+"get indexes to all menu items with the given shortcut
+function! s:MenuController._allIndexesFor(shortcut)
+    let toReturn = []
+
+    for i in range(0, len(self.menuItems)-1)
+        if self.menuItems[i].shortcut == a:shortcut
+            call add(toReturn, i)
+        endif
+    endfor
+
+    return toReturn
+endfunction
+
+"FUNCTION: MenuController._nextIndexFor(shortcut) {{{3
+"get the index to the next menu item with the given shortcut, starts from the
+"current cursor location and wraps around to the top again if need be
+function! s:MenuController._nextIndexFor(shortcut)
+    for i in range(self.selection+1, len(self.menuItems)-1)
+        if self.menuItems[i].shortcut == a:shortcut
+            return i
+        endif
+    endfor
+
+    for i in range(0, self.selection)
+        if self.menuItems[i].shortcut == a:shortcut
+            return i
+        endif
+    endfor
+
+    return -1
+endfunction
+
+"FUNCTION: MenuController._setCmdheight() {{{3
+"sets &cmdheight to whatever is needed to display the menu
+function! s:MenuController._setCmdheight()
+    let &cmdheight = len(self.menuItems) + 3
+endfunction
+
+"FUNCTION: MenuController._saveOptions() {{{3
+"set any vim options that are required to make the menu work (saving their old
+"values)
+function! s:MenuController._saveOptions()
+    let self._oldLazyredraw = &lazyredraw
+    let self._oldCmdheight = &cmdheight
+    set nolazyredraw
+    call self._setCmdheight()
+endfunction
+
+"FUNCTION: MenuController._restoreOptions() {{{3
+"restore the options we saved in _saveOptions()
+function! s:MenuController._restoreOptions()
+    let &cmdheight = self._oldCmdheight
+    let &lazyredraw = self._oldLazyredraw
+endfunction
+
+"FUNCTION: MenuController._cursorDown() {{{3
+"move the cursor to the next menu item, skipping separators
+function! s:MenuController._cursorDown()
+    let done = 0
+    while !done
+        if self.selection < len(self.menuItems)-1
+            let self.selection += 1
+        else
+            let self.selection = 0
+        endif
+
+        if !self._current().isSeparator()
+            let done = 1
+        endif
+    endwhile
+endfunction
+
+"FUNCTION: MenuController._cursorUp() {{{3
+"move the cursor to the previous menu item, skipping separators
+function! s:MenuController._cursorUp()
+    let done = 0
+    while !done
+        if self.selection > 0
+            let self.selection -= 1
+        else
+            let self.selection = len(self.menuItems)-1
+        endif
+
+        if !self._current().isSeparator()
+            let done = 1
+        endif
+    endwhile
+endfunction
+
+"CLASS: MenuItem {{{2
+"============================================================
+let s:MenuItem = {}
+"FUNCTION: MenuItem.All() {{{3
+"get all top level menu items
+function! s:MenuItem.All()
+    if !exists("s:menuItems")
+        let s:menuItems = []
+    endif
+    return s:menuItems
+endfunction
+
+"FUNCTION: MenuItem.AllEnabled() {{{3
+"get all top level menu items that are currently enabled
+function! s:MenuItem.AllEnabled()
+    let toReturn = []
+    for i in s:MenuItem.All()
+        if i.enabled()
+            call add(toReturn, i)
+        endif
+    endfor
+    return toReturn
+endfunction
+
+"FUNCTION: MenuItem.Create(options) {{{3
+"make a new menu item and add it to the global list
+function! s:MenuItem.Create(options)
+    let newMenuItem = copy(self)
+
+    let newMenuItem.text = a:options['text']
+    let newMenuItem.shortcut = a:options['shortcut']
+    let newMenuItem.children = []
+
+    let newMenuItem.isActiveCallback = -1
+    if has_key(a:options, 'isActiveCallback')
+        let newMenuItem.isActiveCallback = a:options['isActiveCallback']
+    endif
+
+    let newMenuItem.callback = -1
+    if has_key(a:options, 'callback')
+        let newMenuItem.callback = a:options['callback']
+    endif
+
+    if has_key(a:options, 'parent')
+        call add(a:options['parent'].children, newMenuItem)
+    else
+        call add(s:MenuItem.All(), newMenuItem)
+    endif
+
+    return newMenuItem
+endfunction
+
+"FUNCTION: MenuItem.CreateSeparator(options) {{{3
+"make a new separator menu item and add it to the global list
+function! s:MenuItem.CreateSeparator(options)
+    let standard_options = { 'text': '--------------------',
+                \ 'shortcut': -1,
+                \ 'callback': -1 }
+    let options = extend(a:options, standard_options, "force")
+
+    return s:MenuItem.Create(options)
+endfunction
+
+"FUNCTION: MenuItem.CreateSubmenu(options) {{{3
+"make a new submenu and add it to global list
+function! s:MenuItem.CreateSubmenu(options)
+    let standard_options = { 'callback': -1 }
+    let options = extend(a:options, standard_options, "force")
+
+    return s:MenuItem.Create(options)
+endfunction
+
+"FUNCTION: MenuItem.enabled() {{{3
+"return 1 if this menu item should be displayed
+"
+"delegates off to the isActiveCallback, and defaults to 1 if no callback was
+"specified
+function! s:MenuItem.enabled()
+    if self.isActiveCallback != -1
+        return {self.isActiveCallback}()
+    endif
+    return 1
+endfunction
+
+"FUNCTION: MenuItem.execute() {{{3
+"perform the action behind this menu item, if this menuitem has children then
+"display a new menu for them, otherwise deletegate off to the menuitem's
+"callback
+function! s:MenuItem.execute()
+    if len(self.children)
+        let mc = s:MenuController.New(self.children)
+        call mc.showMenu()
+    else
+        if self.callback != -1
+            call {self.callback}()
+        endif
+    endif
+endfunction
+
+"FUNCTION: MenuItem.isSeparator() {{{3
+"return 1 if this menuitem is a separator
+function! s:MenuItem.isSeparator()
+    return self.callback == -1 && self.children == []
+endfunction
+
+"FUNCTION: MenuItem.isSubmenu() {{{3
+"return 1 if this menuitem is a submenu
+function! s:MenuItem.isSubmenu()
+    return self.callback == -1 && !empty(self.children)
+endfunction
+
+"CLASS: TreeFileNode {{{2
+"This class is the parent of the TreeDirNode class and constitures the
+"'Component' part of the composite design pattern between the treenode
+"classes.
+"============================================================
+let s:TreeFileNode = {}
+"FUNCTION: TreeFileNode.activate(forceKeepWinOpen) {{{3
+function! s:TreeFileNode.activate(forceKeepWinOpen)
+    call self.open()
+    if !a:forceKeepWinOpen
+        call s:closeTreeIfQuitOnOpen()
+    end
+endfunction
+"FUNCTION: TreeFileNode.bookmark(name) {{{3
+"bookmark this node with a:name
+function! s:TreeFileNode.bookmark(name)
+    try
+        let oldMarkedNode = s:Bookmark.GetNodeForName(a:name, 1)
+        call oldMarkedNode.path.cacheDisplayString()
+    catch /^NERDTree.BookmarkNotFoundError/
+    endtry
+
+    call s:Bookmark.AddBookmark(a:name, self.path)
+    call self.path.cacheDisplayString()
+    call s:Bookmark.Write()
+endfunction
+"FUNCTION: TreeFileNode.cacheParent() {{{3
+"initializes self.parent if it isnt already
+function! s:TreeFileNode.cacheParent()
+    if empty(self.parent)
+        let parentPath = self.path.getParent()
+        if parentPath.equals(self.path)