aboutsummaryrefslogtreecommitdiff
path: root/vim
diff options
context:
space:
mode:
Diffstat (limited to 'vim')
-rwxr-xr-xvim/after/syntax/haml.vim9
-rwxr-xr-xvim/after/syntax/html.vim10
-rw-r--r--vim/autoload/togglebg.vim55
-rw-r--r--vim/bitmaps/togglebg.pngbin1674 -> 0 bytes
-rw-r--r--vim/colors/desert.vim108
-rwxr-xr-xvim/colors/fruit.vim69
-rw-r--r--vim/colors/solarized.vim1117
-rwxr-xr-xvim/compiler/coffee.vim68
-rw-r--r--vim/doc/NERD_tree.txt1222
-rwxr-xr-xvim/doc/bufexplorer.txt513
-rw-r--r--vim/doc/solarized.txt254
-rwxr-xr-xvim/ftdetect/coffee.vim8
-rwxr-xr-xvim/ftdetect/eco.vim1
-rw-r--r--vim/ftdetect/scala.vim2
-rwxr-xr-xvim/ftplugin/coffee.vim221
-rwxr-xr-xvim/indent/coffee.vim328
-rw-r--r--vim/indent/scala.vim83
-rw-r--r--vim/nerdtree_plugin/exec_menuitem.vim41
-rw-r--r--vim/nerdtree_plugin/fs_menu.vim194
-rw-r--r--vim/plugin/NERD_tree.vim4059
-rw-r--r--vim/plugin/ScrollColor.vim457
-rwxr-xr-xvim/plugin/bufexplorer.vim1162
-rw-r--r--vim/plugin/rspec.vim36
-rwxr-xr-xvim/syntax/coffee.vim236
-rwxr-xr-xvim/syntax/eco.vim62
-rw-r--r--vim/syntax/scala.vim151
26 files changed, 0 insertions, 10466 deletions
diff --git a/vim/after/syntax/haml.vim b/vim/after/syntax/haml.vim
deleted file mode 100755
index d82fbea..0000000
--- a/vim/after/syntax/haml.vim
+++ /dev/null
@@ -1,9 +0,0 @@
-" Language: CoffeeScript
-" Maintainer: Sven Felix Oberquelle <Svelix.Github@gmail.com>
-" URL: http://github.com/kchmck/vim-coffee-script
-" License: WTFPL
-
-" Inherit coffee from html so coffeeComment isn't redefined and given higher
-" priority than hamlInterpolation.
-syn cluster hamlCoffeescript contains=@htmlCoffeeScript
-syn region hamlCoffeescriptFilter matchgroup=hamlFilter start="^\z(\s*\):coffeescript\s*$" end="^\%(\z1 \| *$\)\@!" contains=@hamlCoffeeScript,hamlInterpolation keepend
diff --git a/vim/after/syntax/html.vim b/vim/after/syntax/html.vim
deleted file mode 100755
index 63ebaec..0000000
--- a/vim/after/syntax/html.vim
+++ /dev/null
@@ -1,10 +0,0 @@
-" Language: CoffeeScript
-" Maintainer: Mick Koch <kchmck@gmail.com>
-" URL: http://github.com/kchmck/vim-coffee-script
-" License: WTFPL
-
-" Syntax highlighting for text/coffeescript script tags
-syn include @htmlCoffeeScript syntax/coffee.vim
-syn region coffeeScript start=+<script [^>]*type *=[^>]*text/coffeescript[^>]*>+
-\ end=+</script>+me=s-1 keepend
-\ contains=@htmlCoffeeScript,htmlScriptTag,@htmlPreproc
diff --git a/vim/autoload/togglebg.vim b/vim/autoload/togglebg.vim
deleted file mode 100644
index 108511f..0000000
--- a/vim/autoload/togglebg.vim
+++ /dev/null
@@ -1,55 +0,0 @@
-" Toggle Background
-" Modified: 2011 Apr 29
-" Maintainer: Ethan Schoonover
-" License: OSI approved MIT license
-
-if exists("g:loaded_togglebg")
- finish
-endif
-let g:loaded_togglebg = 1
-
-" noremap is a bit misleading here if you are unused to vim mapping.
-" in fact, there is remapping, but only of script locally defined remaps, in
-" this case <SID>TogBG. The <script> argument modifies the noremap scope in
-" this regard (and the noremenu below).
-nnoremap <unique> <script> <Plug>ToggleBackground <SID>TogBG
-inoremap <unique> <script> <Plug>ToggleBackground <ESC><SID>TogBG<ESC>a
-vnoremap <unique> <script> <Plug>ToggleBackground <ESC><SID>TogBG<ESC>gv
-nnoremenu <script> Window.Toggle\ Background <SID>TogBG
-inoremenu <script> Window.Toggle\ Background <ESC><SID>TogBG<ESC>a
-vnoremenu <script> Window.Toggle\ Background <ESC><SID>TogBG<ESC>gv
-tmenu Window.Toggle\ Background Toggle light and dark background modes
-nnoremenu <script> ToolBar.togglebg <SID>TogBG
-inoremenu <script> ToolBar.togglebg <ESC><SID>TogBG<ESC>a
-vnoremenu <script> ToolBar.togglebg <ESC><SID>TogBG<ESC>gv
-tmenu ToolBar.togglebg Toggle light and dark background modes
-noremap <SID>TogBG :call <SID>TogBG()<CR>
-
-function! s:TogBG()
- let &background = ( &background == "dark"? "light" : "dark" )
- if exists("g:colors_name")
- exe "colorscheme " . g:colors_name
- endif
-endfunction
-
-if !exists(":ToggleBG")
- command ToggleBG :call s:TogBG()
-endif
-
-function! ToggleBackground()
- echo "Please update your ToggleBackground mapping. ':help togglebg' for information."
-endfunction
-
-function! togglebg#map(mapActivation)
- try
- exe "silent! nmap <unique> ".a:mapActivation." <Plug>ToggleBackground"
- exe "silent! imap <unique> ".a:mapActivation." <Plug>ToggleBackground"
- exe "silent! vmap <unique> ".a:mapActivation." <Plug>ToggleBackground"
- finally
- return 0
- endtry
-endfunction
-
-if !exists("no_plugin_maps") && !hasmapto('<Plug>ToggleBackground')
- call togglebg#map("<F5>")
-endif
diff --git a/vim/bitmaps/togglebg.png b/vim/bitmaps/togglebg.png
deleted file mode 100644
index 4c7dfef..0000000
--- a/vim/bitmaps/togglebg.png
+++ /dev/null
Binary files differ
diff --git a/vim/colors/desert.vim b/vim/colors/desert.vim
deleted file mode 100644
index 7166220..0000000
--- a/vim/colors/desert.vim
+++ /dev/null
@@ -1,108 +0,0 @@
-" Vim color file
-" Maintainer: Hans Fugal <hans@fugal.net>
-" Last Change: $Date: 2004/06/13 19:30:30 $
-" Last Change: $Date: 2004/06/13 19:30:30 $
-" URL: http://hans.fugal.net/vim/colors/desert.vim
-" Version: $Id: desert.vim,v 1.1 2004/06/13 19:30:30 vimboss Exp $
-
-" cool help screens
-" :he group-name
-" :he highlight-groups
-" :he cterm-colors
-
-set background=dark
-if version > 580
- " no guarantees for version 5.8 and below, but this makes it stop
- " complaining
- hi clear
- if exists("syntax_on")
- syntax reset
- endif
-endif
-let g:colors_name="desert"
-
-hi Normal guifg=White guibg=grey20
-
-" highlight groups
-hi Cursor guibg=khaki guifg=slategrey
-"hi CursorIM
-"hi Directory
-"hi DiffAdd
-"hi DiffChange
-"hi DiffDelete
-"hi DiffText
-"hi ErrorMsg
-hi VertSplit guibg=#c2bfa5 guifg=grey50 gui=none
-hi Folded guibg=grey30 guifg=gold
-hi FoldColumn guibg=grey30 guifg=tan
-hi IncSearch guifg=slategrey guibg=khaki
-"hi LineNr
-hi ModeMsg guifg=goldenrod
-hi MoreMsg guifg=SeaGreen
-hi NonText guifg=LightBlue guibg=grey30
-hi Question guifg=springgreen
-hi Search guibg=peru guifg=wheat
-hi SpecialKey guifg=yellowgreen
-hi StatusLine guibg=#c2bfa5 guifg=black gui=none
-hi StatusLineNC guibg=#c2bfa5 guifg=grey50 gui=none
-hi Title guifg=indianred
-hi Visual gui=none guifg=khaki guibg=olivedrab
-"hi VisualNOS
-hi WarningMsg guifg=salmon
-"hi WildMenu
-"hi Menu
-"hi Scrollbar
-"hi Tooltip
-
-" syntax highlighting groups
-hi Comment guifg=SkyBlue
-hi Constant guifg=#ffa0a0
-hi Identifier guifg=palegreen
-hi Statement guifg=khaki
-hi PreProc guifg=indianred
-hi Type guifg=darkkhaki
-hi Special guifg=navajowhite
-"hi Underlined
-hi Ignore guifg=grey40
-"hi Error
-hi Todo guifg=orangered guibg=yellow2
-
-" color terminal definitions
-hi SpecialKey ctermfg=darkgreen
-hi NonText cterm=bold ctermfg=darkblue
-hi Directory ctermfg=darkcyan
-hi ErrorMsg cterm=bold ctermfg=7 ctermbg=1
-hi IncSearch cterm=NONE ctermfg=yellow ctermbg=green
-hi Search cterm=NONE ctermfg=grey ctermbg=blue
-hi MoreMsg ctermfg=darkgreen
-hi ModeMsg cterm=NONE ctermfg=brown
-hi LineNr ctermfg=3
-hi Question ctermfg=green
-hi StatusLine cterm=bold,reverse
-hi StatusLineNC cterm=reverse
-hi VertSplit cterm=reverse
-hi Title ctermfg=5
-hi Visual cterm=reverse
-hi VisualNOS cterm=bold,underline
-hi WarningMsg ctermfg=1
-hi WildMenu ctermfg=0 ctermbg=3
-hi Folded ctermfg=darkgrey ctermbg=NONE
-hi FoldColumn ctermfg=darkgrey ctermbg=NONE
-hi DiffAdd ctermbg=4
-hi DiffChange ctermbg=5
-hi DiffDelete cterm=bold ctermfg=4 ctermbg=6
-hi DiffText cterm=bold ctermbg=1
-hi Comment ctermfg=darkcyan
-hi Constant ctermfg=brown
-hi Special ctermfg=5
-hi Identifier ctermfg=6
-hi Statement ctermfg=3
-hi PreProc ctermfg=5
-hi Type ctermfg=2
-hi Underlined cterm=underline ctermfg=5
-hi Ignore cterm=bold ctermfg=7
-hi Ignore ctermfg=darkgrey
-hi Error cterm=bold ctermfg=7 ctermbg=1
-
-
-"vim: sw=4
diff --git a/vim/colors/fruit.vim b/vim/colors/fruit.vim
deleted file mode 100755
index 624b90f..0000000
--- a/vim/colors/fruit.vim
+++ /dev/null
@@ -1,69 +0,0 @@
-" Vim color file
-" Maintainer: Tiza
-" Last Change: 2002/08/28 Wed 00:28.
-" version: 1.3
-" This color scheme uses a light background.
-
-set background=light
-hi clear
-if exists("syntax_on")
- syntax reset
-endif
-
-let colors_name = "fruit"
-
-hi Normal guifg=#404040 guibg=#f8f8f8
-
-" Search
-hi IncSearch gui=UNDERLINE guifg=#404040 guibg=#40ffff
-hi Search gui=NONE guifg=#404040 guibg=#ffff60
-
-" Messages
-hi ErrorMsg gui=NONE guifg=#ff0000 guibg=#ffe4e4
-hi WarningMsg gui=NONE guifg=#ff0000 guibg=#ffe4e4
-hi ModeMsg gui=NONE guifg=#ff4080 guibg=NONE
-hi MoreMsg gui=NONE guifg=#009070 guibg=NONE
-hi Question gui=NONE guifg=#f030d0 guibg=NONE
-
-" Split area
-hi StatusLine gui=BOLD guifg=#f8f8f8 guibg=#404040
-hi StatusLineNC gui=NONE guifg=#a4a4a4 guibg=#404040
-hi VertSplit gui=NONE guifg=#f8f8f8 guibg=#404040
-hi WildMenu gui=BOLD guifg=#f8f8f8 guibg=#ff4080
-
-" Diff
-hi DiffText gui=NONE guifg=#e04040 guibg=#ffd8d8
-hi DiffChange gui=NONE guifg=#408040 guibg=#d0f0d0
-hi DiffDelete gui=NONE guifg=#4848ff guibg=#ffd0ff
-hi DiffAdd gui=NONE guifg=#4848ff guibg=#ffd0ff
-
-" Cursor
-hi Cursor gui=NONE guifg=#0000ff guibg=#00e0ff
-hi lCursor gui=NONE guifg=#f8f8f8 guibg=#8000ff
-hi CursorIM gui=NONE guifg=#f8f8f8 guibg=#8000ff
-
-" Fold
-hi Folded gui=NONE guifg=#20605c guibg=#b8e8dc
-hi FoldColumn gui=NONE guifg=#40a098 guibg=#f0f0f0
-
-" Other
-hi Directory gui=NONE guifg=#0070b8 guibg=NONE
-hi LineNr gui=NONE guifg=#acacac guibg=NONE
-hi NonText gui=BOLD guifg=#00a0c0 guibg=#ececec
-hi SpecialKey gui=NONE guifg=#4040ff guibg=NONE
-hi Title gui=NONE guifg=#0050a0 guibg=#c0e8ff
-hi Visual gui=NONE guifg=#484848 guibg=#e0e0e0
-" hi VisualNOS gui=NONE guifg=#484848 guibg=#e0e0e0
-
-" Syntax group
-hi Comment gui=NONE guifg=#ff4080 guibg=NONE
-hi Constant gui=NONE guifg=#8016ff guibg=NONE
-hi Error gui=BOLD guifg=#ffffff guibg=#ff4080
-hi Identifier gui=NONE guifg=#008888 guibg=NONE
-hi Ignore gui=NONE guifg=#f8f8f8 guibg=NONE
-hi PreProc gui=NONE guifg=#e06800 guibg=NONE
-hi Special gui=NONE guifg=#4a9400 guibg=NONE
-hi Statement gui=NONE guifg=#f030d0 guibg=NONE
-hi Todo gui=UNDERLINE guifg=#ff0070 guibg=#ffe0f4
-hi Type gui=NONE guifg=#0070e6 guibg=NONE
-hi Underlined gui=UNDERLINE guifg=fg guibg=NONE
diff --git a/vim/colors/solarized.vim b/vim/colors/solarized.vim
deleted file mode 100644
index 70f5223..0000000
--- a/vim/colors/solarized.vim
+++ /dev/null
@@ -1,1117 +0,0 @@
-" 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
-"}}}
diff --git a/vim/compiler/coffee.vim b/vim/compiler/coffee.vim
deleted file mode 100755
index 6d97cd8..0000000
--- a/vim/compiler/coffee.vim
+++ /dev/null
@@ -1,68 +0,0 @@
-" Language: CoffeeScript
-" Maintainer: Mick Koch <kchmck@gmail.com>
-" URL: http://github.com/kchmck/vim-coffee-script
-" License: WTFPL
-
-if exists('current_compiler')
- finish
-endif
-
-let current_compiler = 'coffee'
-" Pattern to check if coffee is the compiler
-let s:pat = '^' . current_compiler
-
-" Extra options passed to CoffeeMake
-if !exists("coffee_make_options")
- let coffee_make_options = ""
-endif
-
-" Get a `makeprg` for the current filename. This is needed to support filenames
-" with spaces and quotes, but also not break generic `make`.
-function! s:GetMakePrg()
- return 'coffee -c ' . g:coffee_make_options . ' $* ' . fnameescape(expand('%'))
-endfunction
-
-" Set `makeprg` and return 1 if coffee is still the compiler, else return 0.
-function! s:SetMakePrg()
- if &l:makeprg =~ s:pat
- let &l:makeprg = s:GetMakePrg()
- elseif &g:makeprg =~ s:pat
- let &g:makeprg = s:GetMakePrg()
- else
- return 0
- endif
-
- return 1
-endfunction
-
-" Set a dummy compiler so we can check whether to set locally or globally.
-CompilerSet makeprg=coffee
-call s:SetMakePrg()
-
-CompilerSet errorformat=Error:\ In\ %f\\,\ %m\ on\ line\ %l,
- \Error:\ In\ %f\\,\ Parse\ error\ on\ line\ %l:\ %m,
- \SyntaxError:\ In\ %f\\,\ %m,
- \%-G%.%#
-
-" Compile the current file.
-command! -bang -bar -nargs=* CoffeeMake make<bang> <args>
-
-" Set `makeprg` on rename since we embed the filename in the setting.
-augroup CoffeeUpdateMakePrg
- autocmd!
-
- " Update `makeprg` if coffee is still the compiler, else stop running this
- " function.
- function! s:UpdateMakePrg()
- if !s:SetMakePrg()
- autocmd! CoffeeUpdateMakePrg
- endif
- endfunction
-
- " Set autocmd locally if compiler was set locally.
- if &l:makeprg =~ s:pat
- autocmd BufFilePost,BufWritePost <buffer> call s:UpdateMakePrg()
- else
- autocmd BufFilePost,BufWritePost call s:UpdateMakePrg()
- endif
-augroup END
diff --git a/vim/doc/NERD_tree.txt b/vim/doc/NERD_tree.txt
deleted file mode 100644
index 2e2278c..0000000
--- a/vim/doc/NERD_tree.txt
+++ /dev/null
@@ -1,1222 +0,0 @@
-*NERD_tree.txt* A tree explorer plugin that owns your momma!
-
-
-
- omg its ... ~
-
- ________ ________ _ ____________ ____ __________ ____________~
- /_ __/ / / / ____/ / | / / ____/ __ \/ __ \ /_ __/ __ \/ ____/ ____/~
- / / / /_/ / __/ / |/ / __/ / /_/ / / / / / / / /_/ / __/ / __/ ~
- / / / __ / /___ / /| / /___/ _, _/ /_/ / / / / _, _/ /___/ /___ ~
- /_/ /_/ /_/_____/ /_/ |_/_____/_/ |_/_____/ /_/ /_/ |_/_____/_____/ ~
-
-
- Reference Manual~
-
-
-
-
-==============================================================================
-CONTENTS *NERDTree-contents*
-
- 1.Intro...................................|NERDTree|
- 2.Functionality provided..................|NERDTreeFunctionality|
- 2.1.Global commands...................|NERDTreeGlobalCommands|
- 2.2.Bookmarks.........................|NERDTreeBookmarks|
- 2.2.1.The bookmark table..........|NERDTreeBookmarkTable|
- 2.2.2.Bookmark commands...........|NERDTreeBookmarkCommands|
- 2.2.3.Invalid bookmarks...........|NERDTreeInvalidBookmarks|
- 2.3.NERD tree mappings................|NERDTreeMappings|
- 2.4.The NERD tree menu................|NERDTreeMenu|
- 3.Options.................................|NERDTreeOptions|
- 3.1.Option summary....................|NERDTreeOptionSummary|
- 3.2.Option details....................|NERDTreeOptionDetails|
- 4.The NERD tree API.......................|NERDTreeAPI|
- 4.1.Key map API.......................|NERDTreeKeymapAPI|
- 4.2.Menu API..........................|NERDTreeMenuAPI|
- 5.About...................................|NERDTreeAbout|
- 6.Changelog...............................|NERDTreeChangelog|
- 7.Credits.................................|NERDTreeCredits|
- 8.License.................................|NERDTreeLicense|
-
-==============================================================================
-1. Intro *NERDTree*
-
-What is this "NERD tree"??
-
-The NERD tree allows you to explore your filesystem and to open files and
-directories. It presents the filesystem to you in the form of a tree which you
-manipulate with the keyboard and/or mouse. It also allows you to perform
-simple filesystem operations.
-
-The following features and functionality are provided by the NERD tree:
- * Files and directories are displayed in a hierarchical tree structure
- * Different highlighting is provided for the following types of nodes:
- * files
- * directories
- * sym-links
- * windows .lnk files
- * read-only files
- * executable files
- * Many (customisable) mappings are provided to manipulate the tree:
- * Mappings to open/close/explore directory nodes
- * Mappings to open files in new/existing windows/tabs
- * Mappings to change the current root of the tree
- * Mappings to navigate around the tree
- * ...
- * Directories and files can be bookmarked.
- * Most NERD tree navigation can also be done with the mouse
- * Filtering of tree content (can be toggled at runtime)
- * custom file filters to prevent e.g. vim backup files being displayed
- * optional displaying of hidden files (. files)
- * files can be "turned off" so that only directories are displayed
- * The position and size of the NERD tree window can be customised
- * The order in which the nodes in the tree are listed can be customised.
- * A model of your filesystem is created/maintained as you explore it. This
- has several advantages:
- * All filesystem information is cached and is only re-read on demand
- * If you revisit a part of the tree that you left earlier in your
- session, the directory nodes will be opened/closed as you left them
- * The script remembers the cursor position and window position in the NERD
- tree so you can toggle it off (or just close the tree window) and then
- reopen it (with NERDTreeToggle) the NERD tree window will appear exactly
- as you left it
- * You can have a separate NERD tree for each tab, share trees across tabs,
- or a mix of both.
- * By default the script overrides the default file browser (netw), so if
- you :edit a directory a (slighly modified) NERD tree will appear in the
- current window
- * A programmable menu system is provided (simulates right clicking on a
- node)
- * one default menu plugin is provided to perform basic filesytem
- operations (create/delete/move/copy files/directories)
- * There's an API for adding your own keymappings
-
-
-==============================================================================
-2. Functionality provided *NERDTreeFunctionality*
-
-------------------------------------------------------------------------------
-2.1. Global Commands *NERDTreeGlobalCommands*
-
-:NERDTree [<start-directory> | <bookmark>] *:NERDTree*
- Opens a fresh NERD tree. The root of the tree depends on the argument
- given. There are 3 cases: If no argument is given, the current directory
- will be used. If a directory is given, that will be used. If a bookmark
- name is given, the corresponding directory will be used. For example: >
- :NERDTree /home/marty/vim7/src
- :NERDTree foo (foo is the name of a bookmark)
-<
-:NERDTreeFromBookmark <bookmark> *:NERDTreeFromBookmark*
- Opens a fresh NERD tree with the root initialized to the dir for
- <bookmark>. This only reason to use this command over :NERDTree is for
- the completion (which is for bookmarks rather than directories).
-
-:NERDTreeToggle [<start-directory> | <bookmark>] *:NERDTreeToggle*
- If a NERD tree already exists for this tab, it is reopened and rendered
- again. If no NERD tree exists for this tab then this command acts the
- same as the |:NERDTree| command.
-
-:NERDTreeMirror *:NERDTreeMirror*
- Shares an existing NERD tree, from another tab, in the current tab.
- Changes made to one tree are reflected in both as they are actually the
- same buffer.
-
- If only one other NERD tree exists, that tree is automatically mirrored. If
- more than one exists, the script will ask which tree to mirror.
-
-:NERDTreeClose *:NERDTreeClose*
- Close the NERD tree in this tab.
-
-:NERDTreeFind *:NERDTreeFind*
- Find the current file in the tree. If no tree exists for the current tab,
- or the file is not under the current root, then initialize a new tree where
- the root is the directory of the current file.
-
-------------------------------------------------------------------------------
-2.2. Bookmarks *NERDTreeBookmarks*
-
-Bookmarks in the NERD tree are a way to tag files or directories of interest.
-For example, you could use bookmarks to tag all of your project directories.
-
-------------------------------------------------------------------------------
-2.2.1. The Bookmark Table *NERDTreeBookmarkTable*
-
-If the bookmark table is active (see |NERDTree-B| and
-|'NERDTreeShowBookmarks'|), it will be rendered above the tree. You can double
-click bookmarks or use the |NERDTree-o| mapping to activate them. See also,
-|NERDTree-t| and |NERDTree-T|
-
-------------------------------------------------------------------------------
-2.2.2. Bookmark commands *NERDTreeBookmarkCommands*
-
-Note that the following commands are only available in the NERD tree buffer.
-
-:Bookmark <name>
- Bookmark the current node as <name>. If there is already a <name>
- bookmark, it is overwritten. <name> must not contain spaces.
-
-:BookmarkToRoot <bookmark>
- Make the directory corresponding to <bookmark> the new root. If a treenode
- corresponding to <bookmark> is already cached somewhere in the tree then
- the current tree will be used, otherwise a fresh tree will be opened.
- Note that if <bookmark> points to a file then its parent will be used
- instead.
-
-:RevealBookmark <bookmark>
- If the node is cached under the current root then it will be revealed
- (i.e. directory nodes above it will be opened) and the cursor will be
- placed on it.
-
-:OpenBookmark <bookmark>
- <bookmark> must point to a file. The file is opened as though |NERDTree-o|
- was applied. If the node is cached under the current root then it will be
- revealed and the cursor will be placed on it.
-
-:ClearBookmarks [<bookmarks>]
- Remove all the given bookmarks. If no bookmarks are given then remove all
- bookmarks on the current node.
-
-:ClearAllBookmarks
- Remove all bookmarks.
-
-:ReadBookmarks
- Re-read the bookmarks in the |'NERDTreeBookmarksFile'|.
-
-See also |:NERDTree| and |:NERDTreeFromBookmark|.
-
-------------------------------------------------------------------------------
-2.2.3. Invalid Bookmarks *NERDTreeInvalidBookmarks*
-
-If invalid bookmarks are detected, the script will issue an error message and
-the invalid bookmarks will become unavailable for use.
-
-These bookmarks will still be stored in the bookmarks file (see
-|'NERDTreeBookmarksFile'|), down the bottom. There will always be a blank line
-after the valid bookmarks but before the invalid ones.
-
-Each line in the bookmarks file represents one bookmark. The proper format is:
-<bookmark name><space><full path to the bookmark location>
-
-After you have corrected any invalid bookmarks, either restart vim, or go
-:ReadBookmarks from the NERD tree window.
-
-------------------------------------------------------------------------------
-2.3. NERD tree Mappings *NERDTreeMappings*
-
-Default Description~ help-tag~
-Key~
-
-o.......Open files, directories and bookmarks....................|NERDTree-o|
-go......Open selected file, but leave cursor in the NERDTree.....|NERDTree-go|
-t.......Open selected node/bookmark in a new tab.................|NERDTree-t|
-T.......Same as 't' but keep the focus on the current tab........|NERDTree-T|
-i.......Open selected file in a split window.....................|NERDTree-i|
-gi......Same as i, but leave the cursor on the NERDTree..........|NERDTree-gi|
-s.......Open selected file in a new vsplit.......................|NERDTree-s|
-gs......Same as s, but leave the cursor on the NERDTree..........|NERDTree-gs|
-O.......Recursively open the selected directory..................|NERDTree-O|
-x.......Close the current nodes parent...........................|NERDTree-x|
-X.......Recursively close all children of the current node.......|NERDTree-X|
-e.......Edit the current dif.....................................|NERDTree-e|
-
-<CR>...............same as |NERDTree-o|.
-double-click.......same as the |NERDTree-o| map.
-middle-click.......same as |NERDTree-i| for files, same as
- |NERDTree-e| for dirs.
-
-D.......Delete the current bookmark .............................|NERDTree-D|
-
-P.......Jump to the root node....................................|NERDTree-P|
-p.......Jump to current nodes parent.............................|NERDTree-p|
-K.......Jump up inside directories at the current tree depth.....|NERDTree-K|
-J.......Jump down inside directories at the current tree depth...|NERDTree-J|
-<C-J>...Jump down to the next sibling of the current directory...|NERDTree-C-J|
-<C-K>...Jump up to the previous sibling of the current directory.|NERDTree-C-K|
-
-C.......Change the tree root to the selected dir.................|NERDTree-C|
-u.......Move the tree root up one directory......................|NERDTree-u|
-U.......Same as 'u' except the old root node is left open........|NERDTree-U|
-r.......Recursively refresh the current directory................|NERDTree-r|
-R.......Recursively refresh the current root.....................|NERDTree-R|
-m.......Display the NERD tree menu...............................|NERDTree-m|
-cd......Change the CWD to the dir of the selected node...........|NERDTree-cd|
-
-I.......Toggle whether hidden files displayed....................|NERDTree-I|
-f.......Toggle whether the file filters are used.................|NERDTree-f|
-F.......Toggle whether files are displayed.......................|NERDTree-F|
-B.......Toggle whether the bookmark table is displayed...........|NERDTree-B|
-
-q.......Close the NERDTree window................................|NERDTree-q|
-A.......Zoom (maximize/minimize) the NERDTree window.............|NERDTree-A|
-?.......Toggle the display of the quick help.....................|NERDTree-?|
-
-------------------------------------------------------------------------------
- *NERDTree-o*
-Default key: o
-Map option: NERDTreeMapActivateNode
-Applies to: files and directories.
-
-If a file node is selected, it is opened in the previous window.
-
-If a directory is selected it is opened or closed depending on its current
-state.
-
-If a bookmark that links to a directory is selected then that directory
-becomes the new root.
-
-If a bookmark that links to a file is selected then that file is opened in the
-previous window.
-
-------------------------------------------------------------------------------
- *NERDTree-go*
-Default key: go
-Map option: None
-Applies to: files.
-
-If a file node is selected, it is opened in the previous window, but the
-cursor does not move.
-
-The key combo for this mapping is always "g" + NERDTreeMapActivateNode (see
-|NERDTree-o|).
-
-------------------------------------------------------------------------------
- *NERDTree-t*
-Default key: t
-Map option: NERDTreeMapOpenInTab
-Applies to: files and directories.
-
-Opens the selected file in a new tab. If a directory is selected, a fresh
-NERD Tree for that directory is opened in a new tab.
-
-If a bookmark which points to a directory is selected, open a NERD tree for
-that directory in a new tab. If the bookmark points to a file, open that file
-in a new tab.
-
-------------------------------------------------------------------------------
- *NERDTree-T*
-Default key: T
-Map option: NERDTreeMapOpenInTabSilent
-Applies to: files and directories.
-
-The same as |NERDTree-t| except that the focus is kept in the current tab.
-
-------------------------------------------------------------------------------
- *NERDTree-i*
-Default key: i
-Map option: NERDTreeMapOpenSplit
-Applies to: files.
-
-Opens the selected file in a new split window and puts the cursor in the new
-window.
-
-------------------------------------------------------------------------------
- *NERDTree-gi*
-Default key: gi
-Map option: None
-Applies to: files.
-
-The same as |NERDTree-i| except that the cursor is not moved.
-
-The key combo for this mapping is always "g" + NERDTreeMapOpenSplit (see
-|NERDTree-i|).
-
-------------------------------------------------------------------------------
- *NERDTree-s*
-Default key: s
-Map option: NERDTreeMapOpenVSplit
-Applies to: files.
-
-Opens the selected file in a new vertically split window and puts the cursor in
-the new window.
-
-------------------------------------------------------------------------------
- *NERDTree-gs*
-Default key: gs
-Map option: None
-Applies to: files.
-
-The same as |NERDTree-s| except that the cursor is not moved.
-
-The key combo for this mapping is always "g" + NERDTreeMapOpenVSplit (see
-|NERDTree-s|).
-
-------------------------------------------------------------------------------
- *NERDTree-O*
-Default key: O
-Map option: NERDTreeMapOpenRecursively
-Applies to: directories.
-
-Recursively opens the selelected directory.
-
-All files and directories are cached, but if a directory would not be
-displayed due to file filters (see |'NERDTreeIgnore'| |NERDTree-f|) or the
-hidden file filter (see |'NERDTreeShowHidden'|) then its contents are not
-cached. This is handy, especially if you have .svn directories.
-
-------------------------------------------------------------------------------
- *NERDTree-x*
-Default key: x
-Map option: NERDTreeMapCloseDir
-Applies to: files and directories.
-
-Closes the parent of the selected node.
-
-------------------------------------------------------------------------------
- *NERDTree-X*
-Default key: X
-Map option: NERDTreeMapCloseChildren
-Applies to: directories.
-
-Recursively closes all children of the selected directory.
-
-Tip: To quickly "reset" the tree, use |NERDTree-P| with this mapping.
-
-------------------------------------------------------------------------------
- *NERDTree-e*
-Default key: e
-Map option: NERDTreeMapOpenExpl
-Applies to: files and directories.
-
-|:edit|s the selected directory, or the selected file's directory. This could
-result in a NERD tree or a netrw being opened, depending on
-|'NERDTreeHijackNetrw'|.
-
-------------------------------------------------------------------------------
- *NERDTree-D*
-Default key: D
-Map option: NERDTreeMapDeleteBookmark
-Applies to: lines in the bookmarks table
-
-Deletes the currently selected bookmark.
-
-------------------------------------------------------------------------------
- *NERDTree-P*
-Default key: P
-Map option: NERDTreeMapJumpRoot
-Applies to: no restrictions.
-
-Jump to the tree root.
-
-------------------------------------------------------------------------------
- *NERDTree-p*
-Default key: p
-Map option: NERDTreeMapJumpParent
-Applies to: files and directories.
-
-Jump to the parent node of the selected node.
-
-------------------------------------------------------------------------------
- *NERDTree-K*
-Default key: K
-Map option: NERDTreeMapJumpFirstChild
-Applies to: files and directories.
-
-Jump to the first child of the current nodes parent.
-
-If the cursor is already on the first node then do the following:
- * loop back thru the siblings of the current nodes parent until we find an
- open dir with children
- * go to the first child of that node
-
-------------------------------------------------------------------------------
- *NERDTree-J*
-Default key: J
-Map option: NERDTreeMapJumpLastChild
-Applies to: files and directories.
-
-Jump to the last child of the current nodes parent.
-
-If the cursor is already on the last node then do the following:
- * loop forward thru the siblings of the current nodes parent until we find
- an open dir with children
- * go to the last child of that node
-
-------------------------------------------------------------------------------
- *NERDTree-C-J*
-Default key: <C-J>
-Map option: NERDTreeMapJumpNextSibling
-Applies to: files and directories.
-
-Jump to the next sibling of the selected node.
-
-------------------------------------------------------------------------------
- *NERDTree-C-K*
-Default key: <C-K>
-Map option: NERDTreeMapJumpPrevSibling
-Applies to: files and directories.
-
-Jump to the previous sibling of the selected node.
-
-------------------------------------------------------------------------------
- *NERDTree-C*
-Default key: C
-Map option: NERDTreeMapChdir
-Applies to: directories.
-
-Make the selected directory node the new tree root. If a file is selected, its
-parent is used.
-
-------------------------------------------------------------------------------
- *NERDTree-u*
-Default key: u
-Map option: NERDTreeMapUpdir
-Applies to: no restrictions.
-
-Move the tree root up a dir (like doing a "cd ..").
-
-------------------------------------------------------------------------------
- *NERDTree-U*
-Default key: U
-Map option: NERDTreeMapUpdirKeepOpen
-Applies to: no restrictions.
-
-Like |NERDTree-u| except that the old tree root is kept open.
-
-------------------------------------------------------------------------------
- *NERDTree-r*
-Default key: r
-Map option: NERDTreeMapRefresh
-Applies to: files and directories.
-
-If a dir is selected, recursively refresh that dir, i.e. scan the filesystem
-for changes and represent them in the tree.
-
-If a file node is selected then the above is done on it's parent.
-
-------------------------------------------------------------------------------
- *NERDTree-R*
-Default key: R
-Map option: NERDTreeMapRefreshRoot
-Applies to: no restrictions.
-
-Recursively refresh the tree root.
-
-------------------------------------------------------------------------------
- *NERDTree-m*
-Default key: m
-Map option: NERDTreeMapMenu
-Applies to: files and directories.
-
-Display the NERD tree menu. See |NERDTreeMenu| for details.
-
-------------------------------------------------------------------------------
- *NERDTree-cd*
-Default key: cd
-Map option: NERDTreeMapChdir
-Applies to: files and directories.
-
-Change vims current working directory to that of the selected node.
-
-------------------------------------------------------------------------------
- *NERDTree-I*
-Default key: I
-Map option: NERDTreeMapToggleHidden
-Applies to: no restrictions.
-
-Toggles whether hidden files (i.e. "dot files") are displayed.
-
-------------------------------------------------------------------------------
- *NERDTree-f*
-Default key: f
-Map option: NERDTreeMapToggleFilters
-Applies to: no restrictions.
-
-Toggles whether file filters are used. See |'NERDTreeIgnore'| for details.
-
-------------------------------------------------------------------------------
- *NERDTree-F*
-Default key: F
-Map option: NERDTreeMapToggleFiles
-Applies to: no restrictions.
-
-Toggles whether file nodes are displayed.
-
-------------------------------------------------------------------------------
- *NERDTree-B*
-Default key: B
-Map option: NERDTreeMapToggleBookmarks
-Applies to: no restrictions.
-
-Toggles whether the bookmarks table is displayed.
-
-------------------------------------------------------------------------------
- *NERDTree-q*
-Default key: q
-Map option: NERDTreeMapQuit
-Applies to: no restrictions.
-
-Closes the NERDtree window.
-
-------------------------------------------------------------------------------
- *NERDTree-A*
-Default key: A
-Map option: NERDTreeMapToggleZoom
-Applies to: no restrictions.
-
-Maximize (zoom) and minimize the NERDtree window.
-
-------------------------------------------------------------------------------
- *NERDTree-?*
-Default key: ?
-Map option: NERDTreeMapHelp
-Applies to: no restrictions.
-
-Toggles whether the quickhelp is displayed.
-
-------------------------------------------------------------------------------
-2.3. The NERD tree menu *NERDTreeMenu*
-
-The NERD tree has a menu that can be programmed via the an API (see
-|NERDTreeMenuAPI|). The idea is to simulate the "right click" menus that most
-file explorers have.
-
-The script comes with two default menu plugins: exec_menuitem.vim and
-fs_menu.vim. fs_menu.vim adds some basic filesystem operations to the menu for
-creating/deleting/moving/copying files and dirs. exec_menuitem.vim provides a
-menu item to execute executable files.
-
-Related tags: |NERDTree-m| |NERDTreeApi|
-
-==============================================================================
-3. Customisation *NERDTreeOptions*
-
-
-------------------------------------------------------------------------------
-3.1. Customisation summary *NERDTreeOptionSummary*
-
-The script provides the following options that can customise the behaviour the
-NERD tree. These options should be set in your vimrc.
-
-|'loaded_nerd_tree'| Turns off the script.
-
-|'NERDChristmasTree'| Tells the NERD tree to make itself colourful
- and pretty.
-
-|'NERDTreeAutoCenter'| Controls whether the NERD tree window centers
- when the cursor moves within a specified
- distance to the top/bottom of the window.
-|'NERDTreeAutoCenterThreshold'| Controls the sensitivity of autocentering.
-
-|'NERDTreeCaseSensitiveSort'| Tells the NERD tree whether to be case
- sensitive or not when sorting nodes.
-
-|'NERDTreeChDirMode'| Tells the NERD tree if/when it should change
- vim's current working directory.
-
-|'NERDTreeHighlightCursorline'| Tell the NERD tree whether to highlight the
- current cursor line.
-
-|'NERDTreeHijackNetrw'| Tell the NERD tree whether to replace the netrw
- autocommands for exploring local directories.
-
-|'NERDTreeIgnore'| Tells the NERD tree which files to ignore.
-
-|'NERDTreeBookmarksFile'| Where the bookmarks are stored.
-
-|'NERDTreeMouseMode'| Tells the NERD tree how to handle mouse
- clicks.
-
-|'NERDTreeQuitOnOpen'| Closes the tree window after opening a file.
-
-|'NERDTreeShowBookmarks'| Tells the NERD tree whether to display the
- bookmarks table on startup.
-
-|'NERDTreeShowFiles'| Tells the NERD tree whether to display files
- in the tree on startup.
-
-|'NERDTreeShowHidden'| Tells the NERD tree whether to display hidden
- files on startup.
-
-|'NERDTreeShowLineNumbers'| Tells the NERD tree whether to display line
- numbers in the tree window.
-
-|'NERDTreeSortOrder'| Tell the NERD tree how to sort the nodes in
- the tree.
-
-|'NERDTreeStatusline'| Set a statusline for NERD tree windows.
-
-|'NERDTreeWinPos'| Tells the script where to put the NERD tree
- window.
-
-|'NERDTreeWinSize'| Sets the window size when the NERD tree is
- opened.
-
-------------------------------------------------------------------------------
-3.2. Customisation details *NERDTreeOptionDetails*
-
-To enable any of the below options you should put the given line in your
-~/.vimrc
-
- *'loaded_nerd_tree'*
-If this plugin is making you feel homicidal, it may be a good idea to turn it
-off with this line in your vimrc: >
- let loaded_nerd_tree=1
-<
-------------------------------------------------------------------------------
- *'NERDChristmasTree'*
-Values: 0 or 1.
-Default: 1.
-
-If this option is set to 1 then some extra syntax highlighting elements are
-added to the nerd tree to make it more colourful.
-
-Set it to 0 for a more vanilla looking tree.
-
-------------------------------------------------------------------------------
- *'NERDTreeAutoCenter'*
-Values: 0 or 1.
-Default: 1
-
-If set to 1, the NERD tree window will center around the cursor if it moves to
-within |'NERDTreeAutoCenterThreshold'| lines of the top/bottom of the window.
-
-This is ONLY done in response to tree navigation mappings,
-i.e. |NERDTree-J| |NERDTree-K| |NERDTree-C-J| |NERDTree-C-K| |NERDTree-p|
-|NERDTree-P|
-
-The centering is done with a |zz| operation.
-
-------------------------------------------------------------------------------
- *'NERDTreeAutoCenterThreshold'*
-Values: Any natural number.
-Default: 3
-
-This option controls the "sensitivity" of the NERD tree auto centering. See
-|'NERDTreeAutoCenter'| for details.
-
-------------------------------------------------------------------------------
- *'NERDTreeCaseSensitiveSort'*
-Values: 0 or 1.
-Default: 0.
-
-By default the NERD tree does not sort nodes case sensitively, i.e. nodes
-could appear like this: >
- bar.c
- Baz.c
- blarg.c
- boner.c
- Foo.c
-<
-But, if you set this option to 1 then the case of the nodes will be taken into
-account. The above nodes would then be sorted like this: >
- Baz.c
- Foo.c
- bar.c
- blarg.c
- boner.c
-<
-------------------------------------------------------------------------------
- *'NERDTreeChDirMode'*
-
-Values: 0, 1 or 2.
-Default: 0.
-
-Use this option to tell the script when (if at all) to change the current
-working directory (CWD) for vim.
-
-If it is set to 0 then the CWD is never changed by the NERD tree.
-
-If set to 1 then the CWD is changed when the NERD tree is first loaded to the
-directory it is initialized in. For example, if you start the NERD tree with >
- :NERDTree /home/marty/foobar
-<
-then the CWD will be changed to /home/marty/foobar and will not be changed
-again unless you init another NERD tree with a similar command.
-
-If the option is set to 2 then it behaves the same as if set to 1 except that
-the CWD is changed whenever the tree root is changed. For example, if the CWD
-is /home/marty/foobar and you make the node for /home/marty/foobar/baz the new
-root then the CWD will become /home/marty/foobar/baz.
-
-------------------------------------------------------------------------------
- *'NERDTreeHighlightCursorline'*
-Values: 0 or 1.
-Default: 1.
-
-If set to 1, the current cursor line in the NERD tree buffer will be
-highlighted. This is done using the |'cursorline'| option.
-
-------------------------------------------------------------------------------
- *'NERDTreeHijackNetrw'*
-Values: 0 or 1.
-Default: 1.
-
-If set to 1, doing a >
- :edit <some directory>
-<
-will open up a "secondary" NERD tree instead of a netrw in the target window.
-
-Secondary NERD trees behaves slighly different from a regular trees in the
-following respects:
- 1. 'o' will open the selected file in the same window as the tree,
- replacing it.
- 2. you can have as many secondary tree as you want in the same tab.
-
-------------------------------------------------------------------------------
- *'NERDTreeIgnore'*
-Values: a list of regular expressions.
-Default: ['\~$'].
-
-This option is used to specify which files the NERD tree should ignore. It
-must be a list of regular expressions. When the NERD tree is rendered, any
-files/dirs that match any of the regex's in 'NERDTreeIgnore' wont be
-displayed.
-
-For example if you put the following line in your vimrc: >
- let NERDTreeIgnore=['\.vim$', '\~$']
-<
-then all files ending in .vim or ~ will be ignored.
-
-Note: to tell the NERD tree not to ignore any files you must use the following
-line: >
- let NERDTreeIgnore=[]
-<
-
-The file filters can be turned on and off dynamically with the |NERDTree-f|
-mapping.
-
-------------------------------------------------------------------------------
- *'NERDTreeBookmarksFile'*
-Values: a path
-Default: $HOME/.NERDTreeBookmarks
-
-This is where bookmarks are saved. See |NERDTreeBookmarkCommands|.
-
-------------------------------------------------------------------------------
- *'NERDTreeMouseMode'*
-Values: 1, 2 or 3.
-Default: 1.
-
-If set to 1 then a double click on a node is required to open it.
-If set to 2 then a single click will open directory nodes, while a double
-click will still be required for file nodes.
-If set to 3 then a single click will open any node.
-
-Note: a double click anywhere on a line that a tree node is on will
-activate it, but all single-click activations must be done on name of the node
-itself. For example, if you have the following node: >
- | | |-application.rb
-<
-then (to single click activate it) you must click somewhere in
-'application.rb'.
-
-------------------------------------------------------------------------------
- *'NERDTreeQuitOnOpen'*
-
-Values: 0 or 1.
-Default: 0
-
-If set to 1, the NERD tree window will close after opening a file with the
-|NERDTree-o|, |NERDTree-i|, |NERDTree-t| and |NERDTree-T| mappings.
-
-------------------------------------------------------------------------------
- *'NERDTreeShowBookmarks'*
-Values: 0 or 1.
-Default: 0.
-
-If this option is set to 1 then the bookmarks table will be displayed.
-
-This option can be toggled dynamically, per tree, with the |NERDTree-B|
-mapping.
-
-------------------------------------------------------------------------------
- *'NERDTreeShowFiles'*
-Values: 0 or 1.
-Default: 1.
-
-If this option is set to 1 then files are displayed in the NERD tree. If it is
-set to 0 then only directories are displayed.
-
-This option can be toggled dynamically, per tree, with the |NERDTree-F|
-mapping and is useful for drastically shrinking the tree when you are
-navigating to a different part of the tree.
-
-------------------------------------------------------------------------------
- *'NERDTreeShowHidden'*
-Values: 0 or 1.
-Default: 0.
-
-This option tells vim whether to display hidden files by default. This option
-can be dynamically toggled, per tree, with the |NERDTree-I| mapping. Use one
-of the follow lines to set this option: >
- let NERDTreeShowHidden=0
- let NERDTreeShowHidden=1
-<
-
-------------------------------------------------------------------------------
- *'NERDTreeShowLineNumbers'*
-Values: 0 or 1.
-Default: 0.
-
-This option tells vim whether to display line numbers for the NERD tree
-window. Use one of the follow lines to set this option: >
- let NERDTreeShowLineNumbers=0
- let NERDTreeShowLineNumbers=1
-<
-
-------------------------------------------------------------------------------
- *'NERDTreeSortOrder'*
-Values: a list of regular expressions.
-Default: ['\/$', '*', '\.swp$', '\.bak$', '\~$']
-
-This option is set to a list of regular expressions which are used to
-specify the order of nodes under their parent.
-
-For example, if the option is set to: >
- ['\.vim$', '\.c$', '\.h$', '*', 'foobar']
-<
-then all .vim files will be placed at the top, followed by all .c files then
-all .h files. All files containing the string 'foobar' will be placed at the
-end. The star is a special flag: it tells the script that every node that
-doesnt match any of the other regexps should be placed here.
-
-If no star is present in 'NERDTreeSortOrder' then one is automatically
-appended to the array.
-
-The regex '\/$' should be used to match directory nodes.
-
-After this sorting is done, the files in each group are sorted alphabetically.
-
-Other examples: >
- (1) ['*', '\/$']
- (2) []
- (3) ['\/$', '\.rb$', '\.php$', '*', '\.swp$', '\.bak$', '\~$']
-<
-1. Directories will appear last, everything else will appear above.
-2. Everything will simply appear in alphabetical order.
-3. Dirs will appear first, then ruby and php. Swap files, bak files and vim
- backup files will appear last with everything else preceding them.
-
-------------------------------------------------------------------------------
- *'NERDTreeStatusline'*
-Values: Any valid statusline setting.
-Default: %{b:NERDTreeRoot.path.strForOS(0)}
-
-Tells the script what to use as the |'statusline'| setting for NERD tree
-windows.
-
-Note that the statusline is set using |:let-&| not |:set| so escaping spaces
-isn't necessary.
-
-Setting this option to -1 will will deactivate it so that your global
-statusline setting is used instead.
-
-------------------------------------------------------------------------------
- *'NERDTreeWinPos'*
-Values: "left" or "right"
-Default: "left".
-
-This option is used to determine where NERD tree window is placed on the
-screen.
-
-This option makes it possible to use two different explorer plugins
-simultaneously. For example, you could have the taglist plugin on the left of
-the window and the NERD tree on the right.
-
-------------------------------------------------------------------------------
- *'NERDTreeWinSize'*
-Values: a positive integer.
-Default: 31.
-
-This option is used to change the size of the NERD tree when it is loaded.
-
-==============================================================================
-4. The NERD tree API *NERDTreeAPI*
-
-The NERD tree script allows you to add custom key mappings and menu items via
-a set of API calls. Any scripts that use this API should be placed in
-~/.vim/nerdtree_plugin/ (*nix) or ~/vimfiles/nerdtree_plugin (windows).
-
-The script exposes some prototype objects that can be used to manipulate the
-tree and/or get information from it: >
- g:NERDTreePath
- g:NERDTreeDirNode
- g:NERDTreeFileNode
- g:NERDTreeBookmark
-<
-See the code/comments in NERD_tree.vim to find how to use these objects. The
-following code conventions are used:
- * class members start with a capital letter
- * instance members start with a lower case letter
- * private members start with an underscore
-
-See this blog post for more details:
- http://got-ravings.blogspot.com/2008/09/vim-pr0n-prototype-based-objects.html
-
-------------------------------------------------------------------------------
-4.1. Key map API *NERDTreeKeymapAPI*
-
-NERDTreeAddKeyMap({options}) *NERDTreeAddKeyMap()*
- Adds a new keymapping for all NERD tree buffers.
- {options} must be a dictionary, and must contain the following keys:
- "key" - the trigger key for the new mapping
- "callback" - the function the new mapping will be bound to
- "quickhelpText" - the text that will appear in the quickhelp (see
- |NERDTree-?|)
-
- Example: >
- call NERDTreeAddKeyMap({
- \ 'key': 'b',
- \ 'callback': 'NERDTreeEchoCurrentNode',
- \ 'quickhelpText': 'echo full path of current node' })
-
- function! NERDTreeEchoCurrentNode()
- let n = g:NERDTreeFileNode.GetSelected()
- if n != {}
- echomsg 'Current node: ' . n.path.str()
- endif
- endfunction
-<
- This code should sit in a file like ~/.vim/nerdtree_plugin/mymapping.vim.
- It adds a (rather useless) mapping on 'b' which echos the full path to the
- current node.
-
-------------------------------------------------------------------------------
-4.2. Menu API *NERDTreeMenuAPI*
-
-NERDTreeAddSubmenu({options}) *NERDTreeAddSubmenu()*
- Creates and returns a new submenu.
-
- {options} must be a dictionary and must contain the following keys:
- "text" - the text of the submenu that the user will see
- "shortcut" - a shortcut key for the submenu (need not be unique)
-
- The following keys are optional:
- "isActiveCallback" - a function that will be called to determine whether
- this submenu item will be displayed or not. The callback function must return
- 0 or 1.
- "parent" - the parent submenu of the new submenu (returned from a previous
- invocation of NERDTreeAddSubmenu()). If this key is left out then the new
- submenu will sit under the top level menu.
-
- See below for an example.
-
-NERDTreeAddMenuItem({options}) *NERDTreeAddMenuItem()*
- Adds a new menu item to the NERD tree menu (see |NERDTreeMenu|).
-
- {options} must be a dictionary and must contain the
- following keys:
- "text" - the text of the menu item which the user will see
- "shortcut" - a shortcut key for the menu item (need not be unique)
- "callback" - the function that will be called when the user activates the
- menu item.
-
- The following keys are optional:
- "isActiveCallback" - a function that will be called to determine whether
- this menu item will be displayed or not. The callback function must return
- 0 or 1.
- "parent" - if the menu item belongs under a submenu then this key must be
- specified. This value for this key will be the object that
- was returned when the submenu was created with |NERDTreeAddSubmenu()|.
-
- See below for an example.
-
-NERDTreeAddMenuSeparator([{options}]) *NERDTreeAddMenuSeparator()*
- Adds a menu separator (a row of dashes).
-
- {options} is an optional dictionary that may contain the following keys:
- "isActiveCallback" - see description in |NERDTreeAddMenuItem()|.
-
-Below is an example of the menu API in action. >
- call NERDTreeAddMenuSeparator()
-
- call NERDTreeAddMenuItem({
- \ 'text': 'a (t)op level menu item',
- \ 'shortcut': 't',
- \ 'callback': 'SomeFunction' })
-
- let submenu = NERDTreeAddSubmenu({
- \ 'text': 'a (s)ub menu',
- \ 'shortcut': 's' })
-
- call NERDTreeAddMenuItem({
- \ 'text': '(n)ested item 1',
- \ 'shortcut': 'n',
- \ 'callback': 'SomeFunction',
- \ 'parent': submenu })
-
- call NERDTreeAddMenuItem({
- \ 'text': '(n)ested item 2',
- \ 'shortcut': 'n',
- \ 'callback': 'SomeFunction',
- \ 'parent': submenu })
-<
-This will create the following menu: >
- --------------------
- a (t)op level menu item
- a (s)ub menu
-<
-Where selecting "a (s)ub menu" will lead to a second menu: >
- (n)ested item 1
- (n)ested item 2
-<
-When any of the 3 concrete menu items are selected the function "SomeFunction"
-will be called.
-
-------------------------------------------------------------------------------
-NERDTreeRender() *NERDTreeRender()*
- Re-renders the NERD tree buffer. Useful if you change the state of the
- tree and you want to it to be reflected in the UI.
-
-==============================================================================
-5. About *NERDTreeAbout*
-
-The author of the NERD tree is a terrible terrible monster called Martyzilla
-who gobbles up small children with milk and sugar for breakfast.
-
-He can be reached at martin.grenfell at gmail dot com. He would love to hear
-from you, so feel free to send him suggestions and/or comments about this
-plugin. Don't be shy --- the worst he can do is slaughter you and stuff you in
-the fridge for later ;)
-
-The latest stable versions can be found at
- http://www.vim.org/scripts/script.php?script_id=1658
-
-The latest dev versions are on github
- http://github.com/scrooloose/nerdtree
-
-
-==============================================================================
-6. Changelog *NERDTreeChangelog*
-
-4.1.0
- features:
- - NERDTreeFind to reveal the node for the current buffer in the tree,
- see |NERDTreeFind|. This effectively merges the FindInNERDTree plugin (by
- Doug McInnes) into the script.
- - make NERDTreeQuitOnOpen apply to the t/T keymaps too. Thanks to Stefan
- Ritter and Rémi Prévost.
- - truncate the root node if wider than the tree window. Thanks to Victor
- Gonzalez.
-
- bugfixes:
- - really fix window state restoring
- - fix some win32 path escaping issues. Thanks to Stephan Baumeister, Ricky,
- jfilip1024, and Chris Chambers
-
-4.0.0
- - add a new programmable menu system (see :help NERDTreeMenu).
- - add new APIs to add menus/menu-items to the menu system as well as
- custom key mappings to the NERD tree buffer (see :help NERDTreeAPI).
- - removed the old API functions
- - added a mapping to maximize/restore the size of nerd tree window, thanks
- to Guillaume Duranceau for the patch. See :help NERDTree-A for details.
-
- - fix a bug where secondary nerd trees (netrw hijacked trees) and
- NERDTreeQuitOnOpen didnt play nicely, thanks to Curtis Harvey.
- - fix a bug where the script ignored directories whose name ended in a dot,
- thanks to Aggelos Orfanakos for the patch.
- - fix a bug when using the x mapping on the tree root, thanks to Bryan
- Venteicher for the patch.
- - fix a bug where the cursor position/window size of the nerd tree buffer
- wasnt being stored on closing the window, thanks to Richard Hart.
- - fix a bug where NERDTreeMirror would mirror the wrong tree
-
-3.1.1
- - fix a bug where a non-listed no-name buffer was getting created every
- time the tree windows was created, thanks to Derek Wyatt and owen1
- - make <CR> behave the same as the 'o' mapping
- - some helptag fixes in the doc, thanks strull
- - fix a bug when using :set nohidden and opening a file where the previous
- buf was modified. Thanks iElectric
- - other minor fixes
-
-3.1.0
- New features:
- - add mappings to open files in a vsplit, see :help NERDTree-s and :help
- NERDTree-gs
- - make the statusline for the nerd tree window default to something
- hopefully more useful. See :help 'NERDTreeStatusline'
- Bugfixes:
- - make the hijack netrw functionality work when vim is started with "vim
- <some dir>" (thanks to Alf Mikula for the patch).
- - fix a bug where the CWD wasnt being changed for some operations even when
- NERDTreeChDirMode==2 (thanks to Lucas S. Buchala)
- - add -bar to all the nerd tree :commands so they can chain with other
- :commands (thanks to tpope)
- - fix bugs when ignorecase was set (thanks to nach)
- - fix a bug with the relative path code (thanks to nach)
- - fix a bug where doing a :cd would cause :NERDTreeToggle to fail (thanks nach)
-
-
-3.0.1
- Bugfixes:
- - fix bugs with :NERDTreeToggle and :NERDTreeMirror when 'hidden
- was not set
- - fix a bug where :NERDTree <path> would fail if <path> was relative and
- didnt start with a ./ or ../ Thanks to James Kanze.
- - make the q mapping work with secondary (:e <dir> style) trees,
- thanks to jamessan
- - fix a bunch of small bugs with secondary trees
-
- More insane refactoring.
-
-3.0.0
- - hijack netrw so that doing an :edit <directory> will put a NERD tree in
- the window rather than a netrw browser. See :help 'NERDTreeHijackNetrw'
- - allow sharing of trees across tabs, see :help :NERDTreeMirror
- - remove "top" and "bottom" as valid settings for NERDTreeWinPos
- - change the '<tab>' mapping to 'i'
- - change the 'H' mapping to 'I'
- - lots of refactoring
-
-==============================================================================
-7. Credits *NERDTreeCredits*
-
-Thanks to the following people for testing, bug reports, ideas etc. Without
-you I probably would have got bored of the hacking the NERD tree and
-just downloaded pr0n instead.
-
- Tim Carey-Smith (halorgium)
- Vigil
- Nick Brettell
- Thomas Scott Urban
- Terrance Cohen
- Yegappan Lakshmanan
- Jason Mills
- Michael Geddes (frogonwheels)
- Yu Jun
- Michael Madsen
- AOYAMA Shotaro
- Zhang Weiwu
- Niels Aan de Brugh
- Olivier Yiptong
- Zhang Shuhan
- Cory Echols
- Piotr Czachur
- Yuan Jiang
- Matan Nassau
- Maxim Kim
- Charlton Wang
- Matt Wozniski (godlygeek)
- knekk
- Sean Chou
- Ryan Penn
- Simon Peter Nicholls
- Michael Foobar
- Tomasz Chomiuk
- Denis Pokataev
- Tim Pope (tpope)
- James Kanze
- James Vega (jamessan)
- Frederic Chanal (nach)
- Alf Mikula
- Lucas S. Buchala
- Curtis Harvey
- Guillaume Duranceau
- Richard Hart (hates)
- Doug McInnes
- Stefan Ritter
- Rémi Prévost
- Victor Gonzalez
- Stephan Baumeister
- Ricky
- jfilip1024
- Chris Chambers
-
-==============================================================================
-8. License *NERDTreeLicense*
-
-The NERD tree is released under the wtfpl.
-See http://sam.zoy.org/wtfpl/COPYING.
diff --git a/vim/doc/bufexplorer.txt b/vim/doc/bufexplorer.txt
deleted file mode 100755
index 06e9223..0000000
--- a/vim/doc/bufexplorer.txt
+++ /dev/null
@@ -1,513 +0,0 @@
-*bufexplorer.txt* Buffer Explorer Last Change: 22 Oct 2010
-
-Buffer Explorer *buffer-explorer* *bufexplorer*
- Version 7.2.8
-
-Plugin for easily exploring (or browsing) Vim |:buffers|.
-
-|bufexplorer-installation| Installation
-|bufexplorer-usage| Usage
-|bufexplorer-windowlayout| Window Layout
-|bufexplorer-customization| Customization
-|bufexplorer-changelog| Change Log
-|bufexplorer-todo| Todo
-|bufexplorer-credits| Credits
-
-For Vim version 7.0 and above.
-This plugin is only available if 'compatible' is not set.
-
-{Vi does not have any of this}
-
-==============================================================================
-INSTALLATION *bufexplorer-installation*
-
-To install:
- - Download the bufexplorer.zip.
- - Extract the zip archive into your runtime directory.
- The archive contains plugin/bufexplorer.vim, and doc/bufexplorer.txt.
- - Start Vim or goto an existing instance of Vim.
- - Execute the following command:
->
- :helptag <your runtime directory>/doc
-<
- This will generate all the help tags for any file located in the doc
- directory.
-
-==============================================================================
-USAGE *bufexplorer-usage*
-
-To start exploring in the current window, use: >
- \be or :BufExplorer
-To start exploring in a newly split horizontal window, use: >
- \bs or :BufExplorerHorizontalSplit
-To start exploring in a newly split vertical window, use: >
- \bv or :BufExplorerVerticalSplit
-
-If you would like to use something other than '\', you may simply change the
-leader (see |mapleader|).
-
-Note: If the current buffer is modified when bufexplorer started, the current
- window is always split and the new bufexplorer is displayed in that new
- window.
-
-Commands to use once exploring:
-
- <F1> Toggle help information.
- <enter> Opens the buffer that is under the cursor into the current
- window.
- <leftmouse> Opens the buffer that is under the cursor into the current
- window.
- <shift-enter> Opens the buffer that is under the cursor in another tab.
- d |:delete|the buffer under the cursor from the list. The
- buffer's 'buflisted' is cleared. This allows for the buffer to
- be displayed again using the 'show unlisted' command.
- R Toggles relative path/absolute path.
- T Toggles to show only buffers for this tab or not.
- D |:wipeout|the buffer under the cursor from the list. When a
- buffers is wiped, it will not be shown when unlisted buffer are
- displayed.
- f Toggles whether you are taken to the active window when
- selecting a buffer or not.
- o Opens the buffer that is under the cursor into the current
- window.
- p Toggles the showing of a split filename/pathname.
- q Quit exploring.
- r Reverses the order the buffers are listed in.
- s Selects the order the buffers are listed in. Either by buffer
- number, file name, file extension, most recently used (MRU), or
- full path.
- t Opens the buffer that is under the cursor in another tab.
- u Toggles the showing of "unlisted" buffers.
-
-Once invoked, Buffer Explorer displays a sorted list (MRU is the default
-sort method) of all the buffers that are currently opened. You are then
-able to move the cursor to the line containing the buffer's name you are
-wanting to act upon. Once you have selected the buffer you would like,
-you can then either open it, close it(delete), resort the list, reverse
-the sort, quit exploring and so on...
-
-===============================================================================
-WINDOW LAYOUT *bufexplorer-windowlayout*
-
--------------------------------------------------------------------------------
-" Press <F1> for Help
-" Sorted by mru | Locate buffer | Absolute Split path
-"=
- 01 %a bufexplorer.txt C:\Vim\vimfiles\doc line 87
- 02 # bufexplorer.vim c:\Vim\vimfiles\plugin line 1
--------------------------------------------------------------------------------
- | | | | |
- | | | | +-- Current Line #.
- | | | +-- Relative/Full Path
- | | +-- Buffer Name.
- | +-- Buffer Attributes. See|:buffers|for more information.
- +-- Buffer Number. See|:buffers|for more information.
-
-===============================================================================
-CUSTOMIZATION *bufexplorer-customization*
-
- *g:bufExplorerChgWin*
-If set, bufexplorer will bring up the selected buffer in the window specified
-by g:bufExplorerChgWin.
-
- *g:bufExplorerDefaultHelp*
-To control whether the default help is displayed or not, use: >
- let g:bufExplorerDefaultHelp=0 " Do not show default help.
- let g:bufExplorerDefaultHelp=1 " Show default help.
-The default is to show the default help.
-
- *g:bufExplorerDetailedHelp*
-To control whether detailed help is display by, use: >
- let g:bufExplorerDetailedHelp=0 " Do not show detailed help.
- let g:bufExplorerDetailedHelp=1 " Show detailed help.
-The default is NOT to show detailed help.
-
- *g:bufExplorerFindActive*
-To control whether you are taken to the active window when selecting a buffer,
-use: >
- let g:bufExplorerFindActive=0 " Do not go to active window.
- let g:bufExplorerFindActive=1 " Go to active window.
-The default is to be taken to the active window.
-
- *g:bufExplorerFuncRef*
-When a buffer is selected, the functions specified either singly or as a list
-will be called.
-
- *g:bufExplorerReverseSort*
-To control whether to sort the buffer in reverse order or not, use: >
- let g:bufExplorerReverseSort=0 " Do not sort in reverse order.
- let g:bufExplorerReverseSort=1 " Sort in reverse order.
-The default is NOT to sort in reverse order.
-
- *g:bufExplorerShowDirectories*
-Directories usually show up in the list from using a command like ":e .".
-To control whether to show directories in the buffer list or not, use: >
- let g:bufExplorerShowDirectories=1 " Show directories.
- let g:bufExplorerShowDirectories=0 " Don't show directories.
-The default is to show directories.
-
- *g:bufExplorerShowRelativePath*
-To control whether to show absolute paths or relative to the current
-directory, use: >
- let g:bufExplorerShowRelativePath=0 " Show absolute paths.
- let g:bufExplorerShowRelativePath=1 " Show relative paths.
-The default is to show absolute paths.
-
- *g:bufExplorerShowTabBuffer*
-To control weither or not to show buffers on for the specific tab or not, use: >
- let g:bufExplorerShowTabBuffer=0 " No.
- let g:bufExplorerShowTabBuffer=1 " Yes.
-The default is not to show.
-
- *g:bufExplorerShowUnlisted*
-To control whether to show unlisted buffer or not, use: >
- let g:bufExplorerShowUnlisted=0 " Do not show unlisted buffers.
- let g:bufExplorerShowUnlisted=1 " Show unlisted buffers.
-The default is to NOT show unlisted buffers.
-
- *g:bufExplorerSortBy*
-To control what field the buffers are sorted by, use: >
- let g:bufExplorerSortBy='extension' " Sort by file extension.
- let g:bufExplorerSortBy='fullpath' " Sort by full file path name.
- let g:bufExplorerSortBy='mru' " Sort by most recently used.
- let g:bufExplorerSortBy='name' " Sort by the buffer's name.
- let g:bufExplorerSortBy='number' " Sort by the buffer's number.
-The default is to sort by mru.
-
- *g:bufExplorerSplitBelow*
-To control where the new split window will be placed above or below the
-current window, use: >
- let g:bufExplorerSplitBelow=1 " Split new window below current.
- let g:bufExplorerSplitBelow=0 " Split new window above current.
-The default is to use what ever is set by the global &splitbelow
-variable.
-
- *g:bufExplorerSplitOutPathName*
-To control whether to split out the path and file name or not, use: >
- let g:bufExplorerSplitOutPathName=1 " Split the path and file name.
- let g:bufExplorerSplitOutPathName=0 " Don't split the path and file
- " name.
-The default is to split the path and file name.
-
- *g:bufExplorerSplitRight*
-To control where the new vsplit window will be placed to the left or right of
-current window, use: >
- let g:bufExplorerSplitRight=0 " Split left.
- let g:bufExplorerSplitRight=1 " Split right.
-The default is to use the global &splitright.
-
-===============================================================================
-CHANGE LOG *bufexplorer-changelog*
-
-7.2.8 - Enhancements:
- * Thanks to Charles Campbell for integrating bufexplorer with GDBMGR.
- http://mysite.verizon.net/astronaut/vim/index.html#GDBMGR
-7.2.7 - Fix:
- * My 1st attempt to fix the "cache" issue where buffers information
- has changed but the cache/display does not reflect those changes.
- More work still needs to be done.
-7.2.6 - Fix:
- * Thanks to Michael Henry for pointing out that I totally forgot to
- update the inline help to reflect the previous change to the 'd'
- and 'D' keys. Opps!
-7.2.5 - Fix:
- * Philip Morant suggested switching the command (bwipe) associated
- with the 'd' key with the command (bdelete) associated with the 'D'
- key. This made sense since the 'd' key is more likely to be used
- compared to the 'D' key.
-7.2.4 - Fix:
- * I did not implement the patch provided by Godefroid Chapelle
- correctly. I missed one line which happened to be the most
- important one :)
-7.2.3 - Enhancements:
- * Thanks to David Fishburn for helping me out with a much needed
- code overhaul as well as some awesome performance enhancements.
- He also reworked the handling of tabs.
- * Thanks to Vladimir Dobriakov for making the suggestions on
- enhancing the documentation to include a better explaination of
- what is contained in the main bufexplorer window.
- * Thanks to Yuriy Ershov for added code that when the bufexplorer
- window is opened, the cursor is now positioned at the line with the
- active buffer (useful in non-MRU sort modes).
- * Yuriy also added the abiltiy to cycle through the sort fields in
- reverse order.
- Fixes:
- * Thanks to Michael Henry for supplying a patch that allows
- bufexplorer to be opened even when there is one buffer or less.
- * Thanks to Godefroid Chapelle for supplying a patch that fixed
- MRU sort order after loading a session.
-7.2.2 - Fixes:
- * Thanks to David L. Dight for spotting and fixing an issue when
- using ctrl^. bufexplorer would incorrectly handle the previous
- buffer so that when ctrl^ was pressed the incorrect file was opened.
-7.2.1 - Fixes:
- * Thanks to Dimitar for spotting and fixing a feature that was
- inadvertently left out of the previous version. The feature was
- when bufexplorer was used together with WinManager, you could use
- the tab key to open a buffer in a split window.
-7.2.0 - Enhancements:
- * For all those missing the \bs and \bv commands, these have now
- returned. Thanks to Phil O'Connell for asking for the return of
- these missing features and helping test out this version.
- Fixes:
- * Fixed problem with the bufExplorerFindActive code not working
- correctly.
- * Fixed an incompatibility between bufexplorer and netrw that caused
- buffers to be incorrectly removed from the MRU list.
-7.1.7 - Fixes:
- * TaCahiroy fixed several issues related to opening a buffer in a
- tab.
-7.1.6 - Fixes:
- * Removed ff=unix from modeline in bufexplorer.txt. Found by Bill
- McCarthy.
-7.1.5 - Fixes:
- * Could not open unnamed buffers. Fixed by TaCahiroy.
-7.1.4 - Fixes:
- * Sometimes when a file's path has 'white space' in it, extra buffers
- would be created containing each piece of the path. i.e:
- opening c:\document and settings\test.txt would create a buffer
- named "and" and a buffer named "Documents". This was reported and
- fixed by TaCa Yoss.
-7.1.3 - Fixes:
- * Added code to allow only one instance of the plugin to run at a
- time. Thanks Dennis Hostetler.
-7.1.2 - Fixes:
- * Fixed a jumplist issue spotted by JiangJun. I overlooked the
- 'jumplist' and with a couple calls to 'keepjumps', everything is
- fine again.
- * Went back to just having a plugin file, no autoload file. By having
- the autoload, WinManager was no longer working and without really
- digging into the cause, it was easier to go back to using just a
- plugin file.
-7.1.1 - Fixes:
- * A problem spotted by Thomas Arendsen Hein.
- When running Vim (7.1.94), error E493 was being thrown.
- Enhancements:
- * Added 'D' for 'delete' buffer as the 'd' command was a 'wipe'
- buffer.
-7.1.0 - Another 'major' update, some by Dave Larson, some by me.
- * Making use of 'autoload' now to make the plugin load quicker.
- * Removed '\bs' and '\bv'. These are now controlled by the user. The
- user can issue a ':sp' or ':vs' to create a horizontal or vertical
- split window and then issue a '\be'
- * Added handling of tabs.
-7.0.17 - Fixed issue with 'drop' command.
- Various enhancements and improvements.
-7.0.16 - Fixed issue reported by Liu Jiaping on non Windows systems, which was
- ...
- Open file1, open file2, modify file1, open bufexplorer, you get the
- following error:
-
- --------8<--------
- Error detected while processing function
- <SNR>14_StartBufExplorer..<SNR>14_SplitOpen:
- line 4:
- E37: No write since last change (add ! to override)
-
- But the worse thing is, when I want to save the current buffer and
- type ':w', I get another error message:
- E382: Cannot write, 'buftype' option is set
- --------8<--------
-
-7.0.15 - Thanks to Mark Smithfield for suggesting bufexplorer needed to handle
- the ':args' command.
-7.0.14 - Thanks to Randall Hansen for removing the requirement of terminal
- versions to be recompiled with 'gui' support so the 'drop' command
- would work. The 'drop' command is really not needed in terminal
- versions.
-7.0.13 - Fixed integration with WinManager.
- Thanks to Dave Eggum for another update.
- - Fix: The detailed help didn't display the mapping for toggling
- the split type, even though the split type is displayed.
- - Fixed incorrect description in the detailed help for toggling
- relative or full paths.
- - Deprecated s:ExtractBufferNbr(). Vim's str2nr() does the same
- thing.
- - Created a s:Set() function that sets a variable only if it hasn't
- already been defined. It's useful for initializing all those
- default settings.
- - Removed checks for repetitive command definitions. They were
- unnecessary.
- - Made the help highlighting a little more fancy.
- - Minor reverse compatibility issue: Changed ambiguous setting
- names to be more descriptive of what they do (also makes the code
- easier to follow):
- Changed bufExplorerSortDirection to bufExplorerReverseSort
- Changed bufExplorerSplitType to bufExplorerSplitVertical
- Changed bufExplorerOpenMode to bufExplorerUseCurrentWindow
- - When the BufExplorer window closes, all the file-local marks are
- now deleted. This may have the benefit of cleaning up some of the
- jumplist.
- - Changed the name of the parameter for StartBufExplorer from
- "split" to "open". The parameter is a string which specifies how
- the buffer will be open, not if it is split or not.
- - Deprecated DoAnyMoreBuffersExist() - it is a one line function
- only used in one spot.
- - Created four functions (SplitOpen(), RebuildBufferList(),
- UpdateHelpStatus() and ReSortListing()) all with one purpose - to
- reduce repeated code.
- - Changed the name of AddHeader() to CreateHelp() to be more
- descriptive of what it does. It now returns an array instead of
- updating the window directly. This has the benefit of making the
- code more efficient since the text the function returns is used a
- little differently in the two places the function is called.
- - Other minor simplifications.
-7.0.12 - MAJOR Update.
- This version will ONLY run with Vim version 7.0 or greater.
- Dave Eggum has made some 'significant' updates to this latest
- version:
- - Added BufExplorerGetAltBuf() global function to be used in the
- user’s rulerformat.
- - Added g:bufExplorerSplitRight option.
- - Added g:bufExplorerShowRelativePath option with mapping.
- - Added current line highlighting.
- - The split type can now be changed whether bufexplorer is opened
- in split mode or not.
- - Various major and minor bug fixes and speed improvements.
- - Sort by extension.
- Other improvements/changes:
- - Changed the help key from '?' to <F1> to be more 'standard'.
- - Fixed splitting of vertical bufexplorer window.
- Hopefully I have not forgot something :)
-7.0.11 - Fixed a couple of highlighting bugs, reported by David Eggum. He also
- changed passive voice to active on a couple of warning messages.
-7.0.10 - Fixed bug report by Xiangjiang Ma. If the 'ssl' option is set,
- the slash character used when displaying the path was incorrect.
-7.0.9 - Martin Grenfell found and eliminated an annoying bug in the
- bufexplorer/winmanager integration. The bug was were an
- annoying message would be displayed when a window was split or
- a new file was opened in a new window. Thanks Martin!
-7.0.8 - Thanks to Mike Li for catching a bug in the WinManager integration.
- The bug was related to the incorrect displaying of the buffer
- explorer's window title.
-7.0.7 - Thanks to Jeremy Cowgar for adding a new enhancement. This
- enhancement allows the user to press 'S', that is capital S, which
- will open the buffer under the cursor in a newly created split
- window.
-7.0.6 - Thanks to Larry Zhang for finding a bug in the "split" buffer code.
- If you force set g:bufExplorerSplitType='v' in your vimrc, and if you
- tried to do a \bs to split the bufexplorer window, it would always
- split horizontal, not vertical. He also found that I had a typeo in
- that the variable g:bufExplorerSplitVertSize was all lower case in
- the documentation which was incorrect.
-7.0.5 - Thanks to Mun Johl for pointing out a bug that if a buffer was
- modified, the '+' was not showing up correctly.
-7.0.4 - Fixed a problem discovered first by Xiangjiang Ma. Well since I've
- been using vim 7.0 and not 6.3, I started using a function (getftype)
- that is not in 6.3. So for backward compatibility, I conditionaly use
- this function now. Thus, the g:bufExplorerShowDirectories feature is
- only available when using vim 7.0 and above.
-7.0.3 - Thanks to Erwin Waterlander for finding a problem when the last
- buffer was deleted. This issue got me to rewrite the buffer display
- logic (which I've wanted to do for sometime now).
- Also great thanks to Dave Eggum for coming up with idea for
- g:bufExplorerShowDirectories. Read the above information about this
- feature.
-7.0.2 - Thanks to Thomas Arendsen Hein for finding a problem when a user
- has the default help turned off and then brought up the explorer. An
- E493 would be displayed.
-7.0.1 - Thanks to Erwin Waterlander for finding a couple problems.
- The first problem allowed a modified buffer to be deleted. Opps! The
- second problem occurred when several files were opened, BufExplorer
- was started, the current buffer was deleted using the 'd' option, and
- then BufExplorer was exited. The deleted buffer was still visible
- while it is not in the buffers list. Opps again!
-7.0.0 - Thanks to Shankar R. for suggesting to add the ability to set
- the fixed width (g:bufExplorerSplitVertSize) of a new window
- when opening bufexplorer vertically and fixed height
- (g:bufExplorerSplitHorzSize) of a new window when opening
- bufexplorer horizontally. By default, the windows are normally
- split to use half the existing width or height.
-6.3.0 - Added keepjumps so that the jumps list would not get cluttered with
- bufexplorer related stuff.
-6.2.3 - Thanks to Jay Logan for finding a bug in the vertical split position
- of the code. When selecting that the window was to be split
- vertically by doing a '\bv', from then on, all splits, i.e. '\bs',
- were split vertically, even though g:bufExplorerSplitType was not set
- to 'v'.
-6.2.2 - Thanks to Patrik Modesto for adding a small improvement. For some
- reason his bufexplorer window was always showing up folded. He added
- 'setlocal nofoldenable' and it was fixed.
-6.2.1 - Thanks goes out to Takashi Matsuo for added the 'fullPath' sorting
- logic and option.
-6.2.0 - Thanks goes out to Simon Johann-Ganter for spotting and fixing a
- problem in that the last search pattern is overridden by the search
- pattern for blank lines.
-6.1.6 - Thanks to Artem Chuprina for finding a pesky bug that has been around
- for sometime now. The <esc> key mapping was causing the buffer
- explored to close prematurely when vim was run in an xterm. The <esc>
- key mapping is now removed.
-6.1.5 - Thanks to Khorev Sergey. Added option to show default help or not.
-6.1.4 - Thanks goes out to Valery Kondakoff for suggesting the addition of
- setlocal nonumber and foldcolumn=0. This allows for line numbering
- and folding to be turned off temporarily while in the explorer.
-6.1.3 - Added folding. Did some code cleanup. Added the ability to force the
- newly split window to be temporarily vertical, which was suggested by
- Thomas Glanzmann.
-6.1.2 - Now pressing the <esc> key will quit, just like 'q'.
- Added folds to hide winmanager configuration.
- If anyone had the 'C' option in their cpoptions they would receive
- a E10 error on startup of BufExplorer. cpo is now saved, updated and
- restored. Thanks to Charles E Campbell, Jr.
- Attempted to make sure there can only be one BufExplorer window open
- at a time.
-6.1.1 - Thanks to Brian D. Goodwin for adding toupper to FileNameCmp. This
- way buffers sorted by name will be in the correct order regardless of
- case.
-6.0.16 - Thanks to Andre Pang for the original patch/idea to get bufexplorer
- to work in insertmode/modeless mode (evim). Added Initialize
- and Cleanup autocommands to handle commands that need to be
- performed when starting or leaving bufexplorer.
-6.0.15 - Srinath Avadhanulax added a patch for winmanager.vim.
-6.0.14 - Fix a few more bug that I thought I already had fixed. Thanks
- to Eric Bloodworth for adding 'Open Mode/Edit in Place'. Added
- vertical splitting.
-6.0.13 - Thanks to Charles E Campbell, Jr. for pointing out some embarrassing
- typos that I had in the documentation. I guess I need to run
- the spell checker more :o)
-6.0.12 - Thanks to Madoka Machitani, for the tip on adding the augroup command
- around the MRUList autocommands.
-6.0.11 - Fixed bug report by Xiangjiang Ma. '"=' was being added to the
- search history which messed up hlsearch.
-6.0.10 - Added the necessary hooks so that the Srinath Avadhanula's
- winmanager.vim script could more easily integrate with this script.
- Tried to improve performance.
-6.0.9 - Added MRU (Most Recently Used) sort ordering.
-6.0.8 - Was not resetting the showcmd command correctly.
- Added nifty help file.
-6.0.7 - Thanks to Brett Carlane for some great enhancements. Some are added,
- some are not, yet. Added highlighting of current and alternate
- filenames. Added splitting of path/filename toggle. Reworked
- ShowBuffers().
- Changed my email address.
-6.0.6 - Copyright notice added. Needed this so that it could be distributed
- with Debian Linux. Fixed problem with the SortListing() function
- failing when there was only one buffer to display.
-6.0.5 - Fixed problems reported by David Pascoe, in that you where unable to
- hit 'd' on a buffer that belonged to a files that no longer existed
- and that the 'yank' buffer was being overridden by the help text when
- the bufexplorer was opened.
-6.0.4 - Thanks to Charles Campbell, Jr. for making this plugin more plugin
- *compliant*, adding default keymappings of <Leader>be and <Leader>bs
- as well as fixing the 'w:sortDirLabel not being defined' bug.
-6.0.3 - Added sorting capabilities. Sort taken from explorer.vim.
-6.0.2 - Can't remember. (2001-07-25)
-6.0.1 - Initial release.
-
-===============================================================================
-TODO *bufexplorer-todo*
-
-- Nothing as of now, buf if you have any suggestions, drop me an email.
-
-===============================================================================
-CREDITS *bufexplorer-credits*
-
-Author: Jeff Lanzarotta <delux256-vim at yahoo dot com>
-
-Credit must go out to Bram Moolenaar and all the Vim developers for
-making the world's best editor (IMHO). I also want to thank everyone who
-helped and gave me suggestions. I wouldn't want to leave anyone out so I
-won't list names.
-
-===============================================================================
-vim:tw=78:noet:wrap:ts=8:ft=help:norl:
diff --git a/vim/doc/solarized.txt b/vim/doc/solarized.txt
deleted file mode 100644
index 93ebd68..0000000
--- a/vim/doc/solarized.txt
+++ /dev/null
@@ -1,254 +0,0 @@
-*solarized.vim* for Vim version 7.3 or newer. Modified: 2011 May 05
-
-
- Solarized Vim Colorscheme by Ethan Schoonover ~
-
-Solarized Colorscheme *solarized*
- *solarized-help*
- *solarized-colors*
- *solarized-colorscheme*
- *vim-colors-solarized*
-
-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 at http://ethanschoonover.com/solarized for screenshots and
-details.
-
-0. Install |solarized-install|
-1. Solarized Menu |solarized-menu|
-2. Options |solarized-options|
-3. Toggle Background |solarized-togglebg|
-4. Terminal Issues |solarized-term|
-
-==============================================================================
-0. Install *solarized-install*
-
-Note: I recommend using Tim Pope's pathogen plugin to install this
-colorscheme. See https://github.com/tpope/vim-pathogen . If you've installed
-pathogen properly you can install Solarized with the following commands,
-followed by the .vimrc configuration below.
-
- $ cd ~/.vim/bundle
- $ git clone https://github.com/altercation/vim-colors-solarized.git
-
-If you aren't using pathogen, you can use the following three steps to install
-Solarized:
-
-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).
-
-
-After installation, place the following 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
-
-==============================================================================
-1. Solarized Menu *solarized-menu*
-
-Solarized makes available a menu when used in Vim GUI mode (gvim, macvim).
-This menu includes many of the options detailed below so that you can test out
-different values quickly without modifying your .vimrc file. If you wish to
-turn off this menu permanently, simply place the following line in your .vimrc
-above the "colorscheme solarized" line.
-
- let g:solarized_menu=0
-
-==============================================================================
-2. Toggle Background *solarized-togglebg*
- *toggle-bg* *togglebg*
- *toggle-background*
-
-Solarized comes with Toggle Background, a simple plugin to switch between
-light and dark background modes and reset the colorscheme. This is most useful
-for colorschemes that support both light and dark modes and in terminals or
-gui vim windows where the background will be properly set.
-
-Toggle Background can be accessed by:
-
- * the Solarized menu (in Vim gui mode)
- * the Window menu (in Vim gui mode, even if the Solarized menu is off)
- * the "yin/yang" toolbar button (in Vim gui mode)
- * the default mapping of <F5>
- * custom key mapping you set in your .vimrc (see below)
- * command line via ":ToggleBG" (no quotes)
-
-Toggle Background starts with a default mapping to function key <F5>. If you
-are already using this in a mapping, Toggle Background will not map itself to
-a default and you will have to map it manually in your .vimrc file, or
-remove/change your existing <F5> mapping to another value. To customize the
-keyboard mapping in your .vimrc file, use the following line, changing the
-"<F5>" value to the key or key combination you wish to use:
-
- call togglebg#map("<F5>")
-
-Note that you'll want to use a single function key or equivalent if you want
-the plugin to work in all modes (normal, insert, visual).
-
-When using the plugin during normal, visual, or insert mode, there should be
-no interruption in workflow. However, if you activate the plugin during
-REPLACE mode, you will switch to standard insert mode (you will leave the
-overwrite replace mode).
-
-==============================================================================
-3. Solarized Terminal Issues *solarized-term*
-
-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 the Solarized homepage listed at the top of
-this help document. If you use Solarized *without* these colors, Solarized
-will need to be told to degrade its colorscheme to a set compatible with the
-limited 256 terminal palette (whereas by using the terminal's 16 ansi color
-values, you can set the correct, specific values for the Solarized palette).
-
-If you do use the custom terminal colors, solarized.vim should work out of
-the box for you. If you are using a terminal emulator that supports 256
-colors and don't want to use the custom Solarized terminal colors, you will
-need to use the degraded 256 colorscheme. To do so, simply add the following
-line *before* the `colorschem solarized` line:
-
- let g:solarized_termcolors=256
-
-Again, I recommend just changing your terminal colors to Solarized values
-either manually or via one of the many terminal schemes available for import.
-
-==============================================================================
-4. Solarized Options *solarized-options*
-
-
-AUTOGENERATE OPTIONS
-
-You can easily modify and experiment with Solarized display options using the
-Solarized menu when using Vim in gui mode. Once you have things set to your
-liking, you can autogenerate the current option list in a format ready for
-insertion into your .vimrc file using the Solarized menu "Autogenerate
-Options" command or at the command line with:
-
- :SolarizedOptions
-
-
-OPTION LIST
-
-Set these in your vimrc file prior to calling the colorscheme.
-
-option name default optional
-------------------------------------------------
-g:solarized_termcolors= 16 | 256
-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_contrast = "normal"| "high" or "low"
-g:solarized_visibility= "normal"| "high" or "low"
-g:solarized_hitrail = 0 | 1
-g:solarized_menu = 1 | 0
-------------------------------------------------
-
-
-OPTION DETAILS
-
-------------------------------------------------
-g:solarized_termcolors= 256 | 16 *'solarized_termcolors'*
-------------------------------------------------
-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 *'solarized_termtrans'*
-------------------------------------------------
-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; iTerm2 did not.
-
-Note that on Mac OS X Terminal.app, solarized_termtrans is set to 1 by
-default as this is almost always the best option. The only exception to this
-is if the working terminfo file supports 256 colors (xterm-256color).
-
-------------------------------------------------
-g:solarized_degrade = 0 | 1 *'solarized_degrade'*
-------------------------------------------------
-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 *'solarized_bold'*
-------------------------------------------------
-------------------------------------------------
-g:solarized_underline = 1 | 0 *'solarized_underline'*
-------------------------------------------------
-------------------------------------------------
-g:solarized_italic = 1 | 0 *'solarized_italic'*
-------------------------------------------------
-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_contrast = "normal"| "high" or "low" *'solarized_contrast'*
-------------------------------------------------
-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.
-
-------------------------------------------------
-g:solarized_visibility = "normal"| "high" or "low" *'solarized_visibility'*
-------------------------------------------------
-Special characters such as trailing whitespace, tabs, newlines, when
-displayed using ":set list" can be set to one of three levels depending on
-your needs.
-
-------------------------------------------------
-g:solarized_hitrail = 0 | 1 *'solarized_hitrail'*
-------------------------------------------------
-Visibility can make listchar entities more visible, but if one has set
-cursorline on, these same listchar values standout somewhat less due to the
-background color of the cursorline. g:solarized_hitrail enables highlighting
-of trailing spaces (only one of the listchar types, but a particularly
-important one) while in the cursoline in a different manner in order to make
-them more visible. This may not work consistently as Solarized is using
-a pattern match than can be overridden by a more encompassing syntax-native
-match such as a comment line.
-
-
-------------------------------------------------
-g:solarized_menu = 1 | 0 *'solarized_menu'*
-------------------------------------------------
-Solarized includes a menu providing access to several of the above
-display related options, including contrast and visibility. This allows
-for an easy method of testing different values quickly before settling
-on a final assignment for your .vimrc. If you wish to turn off this menu,
-assign g:solarized_menu a value of 0.
-
-
- vim:tw=78:noet:ts=8:ft=help:norl:
diff --git a/vim/ftdetect/coffee.vim b/vim/ftdetect/coffee.vim
deleted file mode 100755
index 25daf12..0000000
--- a/vim/ftdetect/coffee.vim
+++ /dev/null
@@ -1,8 +0,0 @@
-" Language: CoffeeScript
-" Maintainer: Mick Koch <kchmck@gmail.com>
-" URL: http://github.com/kchmck/vim-coffee-script
-" License: WTFPL
-
-autocmd BufNewFile,BufRead *.coffee set filetype=coffee
-autocmd BufNewFile,BufRead *Cakefile set filetype=coffee
-autocmd BufNewFile,BufRead *.coffeekup set filetype=coffee
diff --git a/vim/ftdetect/eco.vim b/vim/ftdetect/eco.vim
deleted file mode 100755
index b420649..0000000
--- a/vim/ftdetect/eco.vim
+++ /dev/null
@@ -1 +0,0 @@
-autocmd BufNewFile,BufRead *.eco set filetype=eco
diff --git a/vim/ftdetect/scala.vim b/vim/ftdetect/scala.vim
deleted file mode 100644
index 660f1a2..0000000
--- a/vim/ftdetect/scala.vim
+++ /dev/null
@@ -1,2 +0,0 @@
-
-au BufRead,BufNewFile *.scala set filetype=scala
diff --git a/vim/ftplugin/coffee.vim b/vim/ftplugin/coffee.vim
deleted file mode 100755
index 12ae3f0..0000000
--- a/vim/ftplugin/coffee.vim
+++ /dev/null
@@ -1,221 +0,0 @@
-" Language: CoffeeScript
-" Maintainer: Mick Koch <kchmck@gmail.com>
-" URL: http://github.com/kchmck/vim-coffee-script
-" License: WTFPL
-
-if exists("b:did_ftplugin")
- finish
-endif
-
-let b:did_ftplugin = 1
-
-setlocal formatoptions-=t formatoptions+=croql
-setlocal comments=:#
-setlocal commentstring=#\ %s
-setlocal omnifunc=javascriptcomplete#CompleteJS
-
-" Enable CoffeeMake if it won't overwrite any settings.
-if !len(&l:makeprg)
- compiler coffee
-endif
-
-" Reset the global variables used by CoffeeCompile.
-function! s:CoffeeCompileResetVars()
- " Position in the source buffer
- let s:coffee_compile_src_buf = -1
- let s:coffee_compile_src_pos = []
-
- " Position in the CoffeeCompile buffer
- let s:coffee_compile_buf = -1
- let s:coffee_compile_win = -1
- let s:coffee_compile_pos = []
-
- " If CoffeeCompile is watching a buffer
- let s:coffee_compile_watch = 0
-endfunction
-
-" Save the cursor position when moving to and from the CoffeeCompile buffer.
-function! s:CoffeeCompileSavePos()
- let buf = bufnr('%')
- let pos = getpos('.')
-
- if buf == s:coffee_compile_buf
- let s:coffee_compile_pos = pos
- else
- let s:coffee_compile_src_buf = buf
- let s:coffee_compile_src_pos = pos
- endif
-endfunction
-
-" Restore the cursor to the source buffer.
-function! s:CoffeeCompileRestorePos()
- let win = bufwinnr(s:coffee_compile_src_buf)
-
- if win != -1
- exec win 'wincmd w'
- call setpos('.', s:coffee_compile_src_pos)
- endif
-endfunction
-
-" Close the CoffeeCompile buffer and clean things up.
-function! s:CoffeeCompileClose()
- silent! autocmd! CoffeeCompileAuPos
- silent! autocmd! CoffeeCompileAuWatch
-
- call s:CoffeeCompileRestorePos()
- call s:CoffeeCompileResetVars()
-endfunction
-
-" Update the CoffeeCompile buffer given some input lines.
-function! s:CoffeeCompileUpdate(startline, endline)
- let input = join(getline(a:startline, a:endline), "\n")
-
- " Coffee doesn't like empty input.
- if !len(input)
- return
- endif
-
- " Compile input.
- let output = system('coffee -scb 2>&1', input)
-
- " Move to the CoffeeCompile buffer.
- exec s:coffee_compile_win 'wincmd w'
-
- " Replace buffer contents with new output and delete the last empty line.
- setlocal modifiable
- exec '% delete _'
- put! =output
- exec '$ delete _'
- setlocal nomodifiable
-
- " Highlight as JavaScript if there is no compile error.
- if v:shell_error
- setlocal filetype=
- else
- setlocal filetype=javascript
- endif
-
- " Restore the cursor in the compiled output.
- call setpos('.', s:coffee_compile_pos)
-endfunction
-
-" Update the CoffeeCompile buffer with the whole source buffer and restore the
-" cursor.
-function! s:CoffeeCompileWatchUpdate()
- call s:CoffeeCompileSavePos()
- call s:CoffeeCompileUpdate(1, '$')
- call s:CoffeeCompileRestorePos()
-endfunction
-
-" Peek at compiled CoffeeScript in a scratch buffer. We handle ranges like this
-" to prevent the cursor from being moved (and its position saved) before the
-" function is called.
-function! s:CoffeeCompile(startline, endline, args)
- " Don't compile the CoffeeCompile buffer.
- if bufnr('%') == s:coffee_compile_buf
- return
- endif
-
- " Parse arguments.
- let watch = a:args =~ '\<watch\>'
- let unwatch = a:args =~ '\<unwatch\>'
- let size = str2nr(matchstr(a:args, '\<\d\+\>'))
-
- " Determine default split direction.
- if exists("g:coffee_compile_vert")
- let vert = 1
- else
- let vert = a:args =~ '\<vert\%[ical]\>'
- endif
-
- " Remove any watch listeners.
- silent! autocmd! CoffeeCompileAuWatch
-
- " If just unwatching, don't compile.
- if unwatch
- let s:coffee_compile_watch = 0
- return
- endif
-
- if watch
- let s:coffee_compile_watch = 1
- endif
-
- call s:CoffeeCompileSavePos()
-
- " Build the CoffeeCompile buffer if it doesn't exist.
- if s:coffee_compile_buf == -1
- let src_win = bufwinnr(s:coffee_compile_src_buf)
-
- " Create the new window and resize it.
- if vert
- let width = size ? size : winwidth(src_win) / 2
-
- vertical new
- exec 'vertical resize' width
- else
- " Try to guess the compiled output's height.
- let height = size ? size : min([winheight(src_win) / 2,
- \ a:endline - a:startline + 2])
-
- botright new
- exec 'resize' height
- endif
-
- " Set up scratch buffer.
- setlocal bufhidden=wipe buftype=nofile
- setlocal nobuflisted nomodifiable noswapfile nowrap
-
- autocmd BufWipeout <buffer> call s:CoffeeCompileClose()
- nnoremap <buffer> <silent> q :hide<CR>
-
- " Save the cursor position on each buffer switch.
- augroup CoffeeCompileAuPos
- autocmd BufEnter,BufLeave * call s:CoffeeCompileSavePos()
- augroup END
-
- let s:coffee_compile_buf = bufnr('%')
- let s:coffee_compile_win = bufwinnr(s:coffee_compile_buf)
- endif
-
- " Go back to the source buffer and do the initial compile.
- call s:CoffeeCompileRestorePos()
-
- if s:coffee_compile_watch
- call s:CoffeeCompileWatchUpdate()
-
- augroup CoffeeCompileAuWatch
- autocmd InsertLeave <buffer> call s:CoffeeCompileWatchUpdate()
- augroup END
- else
- call s:CoffeeCompileUpdate(a:startline, a:endline)
- endif
-endfunction
-
-" Complete arguments for the CoffeeCompile command.
-function! s:CoffeeCompileComplete(arg, cmdline, cursor)
- let args = ['unwatch', 'vertical', 'watch']
-
- if !len(a:arg)
- return args
- endif
-
- let match = '^' . a:arg
-
- for arg in args
- if arg =~ match
- return [arg]
- endif
- endfor
-endfunction
-
-" Don't let new windows overwrite the CoffeeCompile variables.
-if !exists("s:coffee_compile_buf")
- call s:CoffeeCompileResetVars()
-endif
-
-" Peek at compiled CoffeeScript.
-command! -range=% -bar -nargs=* -complete=customlist,s:CoffeeCompileComplete
-\ CoffeeCompile call s:CoffeeCompile(<line1>, <line2>, <q-args>)
-" Run some CoffeeScript.
-command! -range=% -bar CoffeeRun <line1>,<line2>:w !coffee -s
diff --git a/vim/indent/coffee.vim b/vim/indent/coffee.vim
deleted file mode 100755
index a798cfc..0000000
--- a/vim/indent/coffee.vim
+++ /dev/null
@@ -1,328 +0,0 @@
-" Language: CoffeeScript
-" Maintainer: Mick Koch <kchmck@gmail.com>
-" URL: http://github.com/kchmck/vim-coffee-script
-" License: WTFPL
-
-if exists("b:did_indent")
- finish
-endif
-
-let b:did_indent = 1
-
-setlocal autoindent
-setlocal indentexpr=GetCoffeeIndent(v:lnum)
-" Make sure GetCoffeeIndent is run when these are typed so they can be
-" indented or outdented.
-setlocal indentkeys+=0],0),0.,=else,=when,=catch,=finally
-
-" Only define the function once.
-if exists("*GetCoffeeIndent")
- finish
-endif
-
-" Keywords to indent after
-let s:INDENT_AFTER_KEYWORD = '^\%(if\|unless\|else\|for\|while\|until\|'
-\ . 'loop\|switch\|when\|try\|catch\|finally\|'
-\ . 'class\)\>'
-
-" Operators to indent after
-let s:INDENT_AFTER_OPERATOR = '\%([([{:=]\|[-=]>\)$'
-
-" Keywords and operators that continue a line
-let s:CONTINUATION = '\<\%(is\|isnt\|and\|or\)\>$'
-\ . '\|'
-\ . '\%(-\@<!-\|+\@<!+\|<\|[-=]\@<!>\|\*\|/\@<!/\|%\||\|'
-\ . '&\|,\|\.\@<!\.\)$'
-
-" Operators that block continuation indenting
-let s:CONTINUATION_BLOCK = '[([{:=]$'
-
-" A continuation dot access
-let s:DOT_ACCESS = '^\.'
-
-" Keywords to outdent after
-let s:OUTDENT_AFTER = '^\%(return\|break\|continue\|throw\)\>'
-
-" A compound assignment like `... = if ...`
-let s:COMPOUND_ASSIGNMENT = '[:=]\s*\%(if\|unless\|for\|while\|until\|'
-\ . 'switch\|try\|class\)\>'
-
-" A postfix condition like `return ... if ...`.
-let s:POSTFIX_CONDITION = '\S\s\+\zs\<\%(if\|unless\)\>'
-
-" A single-line else statement like `else ...` but not `else if ...
-let s:SINGLE_LINE_ELSE = '^else\s\+\%(\<\%(if\|unless\)\>\)\@!'
-
-" Max lines to look back for a match
-let s:MAX_LOOKBACK = 50
-
-" Syntax names for strings
-let s:SYNTAX_STRING = 'coffee\%(String\|AssignString\|Embed\|Regex\|Heregex\|'
-\ . 'Heredoc\)'
-
-" Syntax names for comments
-let s:SYNTAX_COMMENT = 'coffee\%(Comment\|BlockComment\|HeregexComment\)'
-
-" Syntax names for strings and comments
-let s:SYNTAX_STRING_COMMENT = s:SYNTAX_STRING . '\|' . s:SYNTAX_COMMENT
-
-" Get the linked syntax name of a character.
-function! s:SyntaxName(linenum, col)
- return synIDattr(synID(a:linenum, a:col, 1), 'name')
-endfunction
-
-" Check if a character is in a comment.
-function! s:IsComment(linenum, col)
- return s:SyntaxName(a:linenum, a:col) =~ s:SYNTAX_COMMENT
-endfunction
-
-" Check if a character is in a string.
-function! s:IsString(linenum, col)
- return s:SyntaxName(a:linenum, a:col) =~ s:SYNTAX_STRING
-endfunction
-
-" Check if a character is in a comment or string.
-function! s:IsCommentOrString(linenum, col)
- return s:SyntaxName(a:linenum, a:col) =~ s:SYNTAX_STRING_COMMENT
-endfunction
-
-" Check if a whole line is a comment.
-function! s:IsCommentLine(linenum)
- " Check the first non-whitespace character.
- return s:IsComment(a:linenum, indent(a:linenum) + 1)
-endfunction
-
-" Repeatedly search a line for a regex until one is found outside a string or
-" comment.
-function! s:SmartSearch(linenum, regex)
- " Start at the first column.
- let col = 0
-
- " Search until there are no more matches, unless a good match is found.
- while 1
- call cursor(a:linenum, col + 1)
- let [_, col] = searchpos(a:regex, 'cn', a:linenum)
-
- " No more matches.
- if !col
- break
- endif
-
- if !s:IsCommentOrString(a:linenum, col)
- return 1
- endif
- endwhile
-
- " No good match found.
- return 0
-endfunction
-
-" Skip a match if it's in a comment or string, is a single-line statement that
-" isn't adjacent, or is a postfix condition.
-function! s:ShouldSkip(startlinenum, linenum, col)
- if s:IsCommentOrString(a:linenum, a:col)
- return 1
- endif
-
- " Check for a single-line statement that isn't adjacent.
- if s:SmartSearch(a:linenum, '\<then\>') && a:startlinenum - a:linenum > 1
- return 1
- endif
-
- if s:SmartSearch(a:linenum, s:POSTFIX_CONDITION) &&
- \ !s:SmartSearch(a:linenum, s:COMPOUND_ASSIGNMENT)
- return 1
- endif
-
- return 0
-endfunction
-
-" Find the farthest line to look back to, capped to line 1 (zero and negative
-" numbers cause bad things).
-function! s:MaxLookback(startlinenum)
- return max([1, a:startlinenum - s:MAX_LOOKBACK])
-endfunction
-
-" Get the skip expression for searchpair().
-function! s:SkipExpr(startlinenum)
- return "s:ShouldSkip(" . a:startlinenum . ", line('.'), col('.'))"
-endfunction
-
-" Search for pairs of text.
-function! s:SearchPair(start, end)
- " The cursor must be in the first column for regexes to match.
- call cursor(0, 1)
-
- let startlinenum = line('.')
-
- " Don't need the W flag since MaxLookback caps the search to line 1.
- return searchpair(a:start, '', a:end, 'bcn',
- \ s:SkipExpr(startlinenum),
- \ s:MaxLookback(startlinenum))
-endfunction
-
-" Try to find a previous matching line.
-function! s:GetMatch(curline)
- let firstchar = a:curline[0]
-
- if firstchar == '}'
- return s:SearchPair('{', '}')
- elseif firstchar == ')'
- return s:SearchPair('(', ')')
- elseif firstchar == ']'
- return s:SearchPair('\[', '\]')
- elseif a:curline =~ '^else\>'
- return s:SearchPair('\<\%(if\|unless\|when\)\>', '\<else\>')
- elseif a:curline =~ '^catch\>'
- return s:SearchPair('\<try\>', '\<catch\>')
- elseif a:curline =~ '^finally\>'
- return s:SearchPair('\<try\>', '\<finally\>')
- endif
-
- return 0
-endfunction
-
-" Get the nearest previous line that isn't a comment.
-function! s:GetPrevNormalLine(startlinenum)
- let curlinenum = a:startlinenum
-
- while curlinenum > 0
- let curlinenum = prevnonblank(curlinenum - 1)
-
- if !s:IsCommentLine(curlinenum)
- return curlinenum
- endif
- endwhile
-
- return 0
-endfunction
-
-" Try to find a comment in a line.
-function! s:FindComment(linenum)
- let col = 0
-
- while 1
- call cursor(a:linenum, col + 1)
- let [_, col] = searchpos('#', 'cn', a:linenum)
-
- if !col
- break
- endif
-
- if s:IsComment(a:linenum, col)
- return col
- endif
- endwhile
-
- return 0
-endfunction
-
-" Get a line without comments or surrounding whitespace.
-function! s:GetTrimmedLine(linenum)
- let comment = s:FindComment(a:linenum)
- let line = getline(a:linenum)
-
- if comment
- " Subtract 1 to get to the column before the comment and another 1 for
- " zero-based indexing.
- let line = line[:comment - 2]
- endif
-
- return substitute(substitute(line, '^\s\+', '', ''),
- \ '\s\+$', '', '')
-endfunction
-
-function! s:GetCoffeeIndent(curlinenum)
- let prevlinenum = s:GetPrevNormalLine(a:curlinenum)
-
- " Don't do anything if there's no previous line.
- if !prevlinenum
- return -1
- endif
-
- let curline = s:GetTrimmedLine(a:curlinenum)
-
- " Try to find a previous matching statement. This handles outdenting.
- let matchlinenum = s:GetMatch(curline)
-
- if matchlinenum
- return indent(matchlinenum)
- endif
-
- " Try to find a matching `when`.
- if curline =~ '^when\>' && !s:SmartSearch(prevlinenum, '\<switch\>')
- let linenum = a:curlinenum
-
- while linenum > 0
- let linenum = s:GetPrevNormalLine(linenum)
-
- if getline(linenum) =~ '^\s*when\>'
- return indent(linenum)
- endif
- endwhile
-
- return -1
- endif
-
- let prevline = s:GetTrimmedLine(prevlinenum)
- let previndent = indent(prevlinenum)
-
- " Always indent after these operators.
- if prevline =~ s:INDENT_AFTER_OPERATOR
- return previndent + &shiftwidth
- endif
-
- " Indent after a continuation if it's the first.
- if prevline =~ s:CONTINUATION
- let prevprevlinenum = s:GetPrevNormalLine(prevlinenum)
-
- " If the continuation is the first in the file, don't run the other checks.
- if !prevprevlinenum
- return previndent + &shiftwidth
- endif
-
- let prevprevline = s:GetTrimmedLine(prevprevlinenum)
-
- if prevprevline !~ s:CONTINUATION && prevprevline !~ s:CONTINUATION_BLOCK
- return previndent + &shiftwidth
- endif
-
- return -1
- endif
-
- " Indent after these keywords and compound assignments if they aren't a
- " single-line statement.
- if prevline =~ s:INDENT_AFTER_KEYWORD || prevline =~ s:COMPOUND_ASSIGNMENT
- if !s:SmartSearch(prevlinenum, '\<then\>') && prevline !~ s:SINGLE_LINE_ELSE
- return previndent + &shiftwidth
- endif
-
- return -1
- endif
-
- " Indent a dot access if it's the first.
- if curline =~ s:DOT_ACCESS && prevline !~ s:DOT_ACCESS
- return previndent + &shiftwidth
- endif
-
- " Outdent after these keywords if they don't have a postfix condition or are
- " a single-line statement.
- if prevline =~ s:OUTDENT_AFTER
- if !s:SmartSearch(prevlinenum, s:POSTFIX_CONDITION) ||
- \ s:SmartSearch(prevlinenum, '\<then\>')
- return previndent - &shiftwidth
- endif
- endif
-
- " No indenting or outdenting is needed.
- return -1
-endfunction
-
-" Wrap s:GetCoffeeIndent to keep the cursor position.
-function! GetCoffeeIndent(curlinenum)
- let oldcursor = getpos('.')
- let indent = s:GetCoffeeIndent(a:curlinenum)
- call setpos('.', oldcursor)
-
- return indent
-endfunction
diff --git a/vim/indent/scala.vim b/vim/indent/scala.vim
deleted file mode 100644
index 45266a0..0000000
--- a/vim/indent/scala.vim
+++ /dev/null
@@ -1,83 +0,0 @@
-" Vim indent file
-" Language : Scala (http://scala-lang.org/)
-" Maintainer : Stefan Matthias Aust
-" Last Change: 2006 Apr 13
-
-if exists("b:did_indent")
- finish
-endif
-let b:did_indent = 1
-
-setlocal indentexpr=GetScalaIndent()
-
-setlocal indentkeys=0{,0},0),!^F,<>>,<CR>
-
-setlocal autoindent sw=2 et
-
-if exists("*GetScalaIndent")
- finish
-endif
-
-function! CountParens(line)
- let line = substitute(a:line, '"\(.\|\\"\)*"', '', 'g')
- let open = substitute(line, '[^(]', '', 'g')
- let close = substitute(line, '[^)]', '', 'g')
- return strlen(open) - strlen(close)
-endfunction
-
-function! GetScalaIndent()
- " Find a non-blank line above the current line.
- let lnum = prevnonblank(v:lnum - 1)
-
- " Hit the start of the file, use zero indent.
- if lnum == 0
- return 0
- endif
-
- let ind = indent(lnum)
- let prevline = getline(lnum)
-
- "Indent html literals
- if prevline !~ '/>\s*$' && prevline =~ '^\s*<[a-zA-Z][^>]*>\s*$'
- return ind + &shiftwidth
- endif
-
- " Add a 'shiftwidth' after lines that start a block
- " If if, for or while end with ), this is a one-line block
- " If val, var, def end with =, this is a one-line block
- if prevline =~ '^\s*\<\(\(else\s\+\)\?if\|for\|while\|va[lr]\|def\)\>.*[)=]\s*$'
- \ || prevline =~ '^\s*\<else\>\s*$'
- \ || prevline =~ '{\s*$'
- let ind = ind + &shiftwidth
- endif
-
- " If parenthesis are unbalanced, indent or dedent
- let c = CountParens(prevline)
- echo c
- if c > 0
- let ind = ind + &shiftwidth
- elseif c < 0
- let ind = ind - &shiftwidth
- endif
-
- " Dedent after if, for, while and val, var, def without block
- let pprevline = getline(prevnonblank(lnum - 1))
- if pprevline =~ '^\s*\<\(\(else\s\+\)\?if\|for\|while\|va[lr]\|def\)\>.*[)=]\s*$'
- \ || pprevline =~ '^\s*\<else\>\s*$'
- let ind = ind - &shiftwidth
- endif
-
- " Align 'for' clauses nicely
- if prevline =~ '^\s*\<for\> (.*;\s*$'
- let ind = ind - &shiftwidth + 5
- endif
-
- " Subtract a 'shiftwidth' on '}' or html
- let thisline = getline(v:lnum)
- if thisline =~ '^\s*[})]'
- \ || thisline =~ '^\s*</[a-zA-Z][^>]*>'
- let ind = ind - &shiftwidth
- endif
-
- return ind
-endfunction
diff --git a/vim/nerdtree_plugin/exec_menuitem.vim b/vim/nerdtree_plugin/exec_menuitem.vim
deleted file mode 100644
index e7a7c53..0000000
--- a/vim/nerdtree_plugin/exec_menuitem.vim
+++ /dev/null
@@ -1,41 +0,0 @@
-" ============================================================================
-" File: exec_menuitem.vim
-" Description: plugin for NERD Tree that provides an execute file menu item
-" Maintainer: Martin Grenfell <martin.grenfell at gmail dot com>
-" Last Change: 22 July, 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.
-"
-" ============================================================================
-if exists("g:loaded_nerdtree_exec_menuitem")
- finish
-endif
-let g:loaded_nerdtree_exec_menuitem = 1
-
-call NERDTreeAddMenuItem({
- \ 'text': '(!)Execute file',
- \ 'shortcut': '!',
- \ 'callback': 'NERDTreeExecFile',
- \ 'isActiveCallback': 'NERDTreeExecFileActive' })
-
-function! NERDTreeExecFileActive()
- let node = g:NERDTreeFileNode.GetSelected()
- return !node.path.isDirectory && node.path.isExecutable
-endfunction
-
-function! NERDTreeExecFile()
- let treenode = g:NERDTreeFileNode.GetSelected()
- echo "==========================================================\n"
- echo "Complete the command to execute (add arguments etc):\n"
- let cmd = treenode.path.str({'escape': 1})
- let cmd = input(':!', cmd . ' ')
-
- if cmd != ''
- exec ':!' . cmd
- else
- echo "Aborted"
- endif
-endfunction
diff --git a/vim/nerdtree_plugin/fs_menu.vim b/vim/nerdtree_plugin/fs_menu.vim
deleted file mode 100644
index e25b38c..0000000
--- a/vim/nerdtree_plugin/fs_menu.vim
+++ /dev/null
@@ -1,194 +0,0 @@
-" ============================================================================
-" File: fs_menu.vim
-" Description: plugin for the NERD Tree that provides a file system menu
-" Maintainer: Martin Grenfell <martin.grenfell at gmail dot com>
-" Last Change: 17 July, 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.
-"
-" ============================================================================
-if exists("g:loaded_nerdtree_fs_menu")
- finish
-endif
-let g:loaded_nerdtree_fs_menu = 1
-
-call NERDTreeAddMenuItem({'text': '(a)dd a childnode', 'shortcut': 'a', 'callback': 'NERDTreeAddNode'})
-call NERDTreeAddMenuItem({'text': '(m)ove the curent node', 'shortcut': 'm', 'callback': 'NERDTreeMoveNode'})
-call NERDTreeAddMenuItem({'text': '(d)elete the curent node', 'shortcut': 'd', 'callback': 'NERDTreeDeleteNode'})
-if g:NERDTreePath.CopyingSupported()
- call NERDTreeAddMenuItem({'text': '(c)copy the current node', 'shortcut': 'c', 'callback': 'NERDTreeCopyNode'})
-endif
-
-"FUNCTION: s:echo(msg){{{1
-function! s:echo(msg)
- redraw
- echomsg "NERDTree: " . a:msg
-endfunction
-
-"FUNCTION: s:echoWarning(msg){{{1
-function! s:echoWarning(msg)
- echohl warningmsg
- call s:echo(a:msg)
- echohl normal
-endfunction
-
-"FUNCTION: s:promptToDelBuffer(bufnum, msg){{{1
-"prints out the given msg and, if the user responds by pushing 'y' then the
-"buffer with the given bufnum is deleted
-"
-"Args:
-"bufnum: the buffer that may be deleted
-"msg: a message that will be echoed to the user asking them if they wish to
-" del the buffer
-function! s:promptToDelBuffer(bufnum, msg)
- echo a:msg
- if nr2char(getchar()) ==# 'y'
- exec "silent bdelete! " . a:bufnum
- endif
-endfunction
-
-"FUNCTION: NERDTreeAddNode(){{{1
-function! NERDTreeAddNode()
- let curDirNode = g:NERDTreeDirNode.GetSelected()
-
- let newNodeName = input("Add a childnode\n".
- \ "==========================================================\n".
- \ "Enter the dir/file name to be created. Dirs end with a '/'\n" .
- \ "", curDirNode.path.str({'format': 'Glob'}) . g:NERDTreePath.Slash())
-
- if newNodeName ==# ''
- call s:echo("Node Creation Aborted.")
- return
- endif
-
- try
- let newPath = g:NERDTreePath.Create(newNodeName)
- let parentNode = b:NERDTreeRoot.findNode(newPath.getParent())
-
- let newTreeNode = g:NERDTreeFileNode.New(newPath)
- if parentNode.isOpen || !empty(parentNode.children)
- call parentNode.addChild(newTreeNode, 1)
- call NERDTreeRender()
- call newTreeNode.putCursorHere(1, 0)
- endif
- catch /^NERDTree/
- call s:echoWarning("Node Not Created.")
- endtry
-endfunction
-
-"FUNCTION: NERDTreeMoveNode(){{{1
-function! NERDTreeMoveNode()
- let curNode = g:NERDTreeFileNode.GetSelected()
- let newNodePath = input("Rename the current node\n" .
- \ "==========================================================\n" .
- \ "Enter the new path for the node: \n" .
- \ "", curNode.path.str())
-
- if newNodePath ==# ''
- call s:echo("Node Renaming Aborted.")
- return
- endif
-
- try
- let bufnum = bufnr(curNode.path.str())
-
- call curNode.rename(newNodePath)
- call NERDTreeRender()
-
- "if the node is open in a buffer, ask the user if they want to
- "close that buffer
- if bufnum != -1
- let prompt = "\nNode renamed.\n\nThe old file is open in buffer ". bufnum . (bufwinnr(bufnum) ==# -1 ? " (hidden)" : "") .". Delete this buffer? (yN)"
- call s:promptToDelBuffer(bufnum, prompt)
- endif
-
- call curNode.putCursorHere(1, 0)
-
- redraw
- catch /^NERDTree/
- call s:echoWarning("Node Not Renamed.")
- endtry
-endfunction
-
-" FUNCTION: NERDTreeDeleteNode() {{{1
-function! NERDTreeDeleteNode()
- let currentNode = g:NERDTreeFileNode.GetSelected()
- let confirmed = 0
-
- if currentNode.path.isDirectory
- let choice =input("Delete the current node\n" .
- \ "==========================================================\n" .
- \ "STOP! To delete this entire directory, type 'yes'\n" .
- \ "" . currentNode.path.str() . ": ")
- let confirmed = choice ==# 'yes'
- else
- echo "Delete the current node\n" .
- \ "==========================================================\n".
- \ "Are you sure you wish to delete the node:\n" .
- \ "" . currentNode.path.str() . " (yN):"
- let choice = nr2char(getchar())
- let confirmed = choice ==# 'y'
- endif
-
-
- if confirmed
- try
- call currentNode.delete()
- call NERDTreeRender()
-
- "if the node is open in a buffer, ask the user if they want to
- "close that buffer
- let bufnum = bufnr(currentNode.path.str())
- if buflisted(bufnum)
- let prompt = "\nNode deleted.\n\nThe file is open in buffer ". bufnum . (bufwinnr(bufnum) ==# -1 ? " (hidden)" : "") .". Delete this buffer? (yN)"
- call s:promptToDelBuffer(bufnum, prompt)
- endif
-
- redraw
- catch /^NERDTree/
- call s:echoWarning("Could not remove node")
- endtry
- else
- call s:echo("delete aborted")
- endif
-
-endfunction
-
-" FUNCTION: NERDTreeCopyNode() {{{1
-function! NERDTreeCopyNode()
- let currentNode = g:NERDTreeFileNode.GetSelected()
- let newNodePath = input("Copy the current node\n" .
- \ "==========================================================\n" .
- \ "Enter the new path to copy the node to: \n" .
- \ "", currentNode.path.str())
-
- if newNodePath != ""
- "strip trailing slash
- let newNodePath = substitute(newNodePath, '\/$', '', '')
-
- let confirmed = 1
- if currentNode.path.copyingWillOverwrite(newNodePath)
- call s:echo("Warning: copying may overwrite files! Continue? (yN)")
- let choice = nr2char(getchar())
- let confirmed = choice ==# 'y'
- endif
-
- if confirmed
- try
- let newNode = currentNode.copy(newNodePath)
- call NERDTreeRender()
- call newNode.putCursorHere(0, 0)
- catch /^NERDTree/
- call s:echoWarning("Could not copy node")
- endtry
- endif
- else
- call s:echo("Copy aborted.")
- endif
- redraw
-endfunction
-
-" vim: set sw=4 sts=4 et fdm=marker:
diff --git a/vim/plugin/NERD_tree.vim b/vim/plugin/NERD_tree.vim
deleted file mode 100644
index 6411b1d..0000000
--- a/vim/plugin/NERD_tree.vim
+++ /dev/null
@@ -1,4059 +0,0 @@
-" ============================================================================
-" 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)
- throw "NERDTree.CannotCacheParentError: already at root"
- endif
- let self.parent = s:TreeFileNode.New(parentPath)
- endif
-endfunction
-"FUNCTION: TreeFileNode.compareNodes {{{3
-"This is supposed to be a class level method but i cant figure out how to
-"get func refs to work from a dict..
-"
-"A class level method that compares two nodes
-"
-"Args:
-"n1, n2: the 2 nodes to compare
-function! s:compareNodes(n1, n2)
- return a:n1.path.compareTo(a:n2.path)
-endfunction
-
-"FUNCTION: TreeFileNode.clearBoomarks() {{{3
-function! s:TreeFileNode.clearBoomarks()
- for i in s:Bookmark.Bookmarks()
- if i.path.equals(self.path)
- call i.delete()
- end
- endfor
- call self.path.cacheDisplayString()
-endfunction
-"FUNCTION: TreeFileNode.copy(dest) {{{3
-function! s:TreeFileNode.copy(dest)
- call self.path.copy(a:dest)
- let newPath = s:Path.New(a:dest)
- let parent = b:NERDTreeRoot.findNode(newPath.getParent())
- if !empty(parent)
- call parent.refresh()
- endif
- return parent.findNode(newPath)
-endfunction
-
-"FUNCTION: TreeFileNode.delete {{{3
-"Removes this node from the tree and calls the Delete method for its path obj
-function! s:TreeFileNode.delete()
- call self.path.delete()
- call self.parent.removeChild(self)
-endfunction
-
-"FUNCTION: TreeFileNode.displayString() {{{3
-"
-"Returns a string that specifies how the node should be represented as a
-"string
-"
-"Return:
-"a string that can be used in the view to represent this node
-function! s:TreeFileNode.displayString()
- return self.path.displayString()
-endfunction
-
-"FUNCTION: TreeFileNode.equals(treenode) {{{3
-"
-"Compares this treenode to the input treenode and returns 1 if they are the
-"same node.
-"
-"Use this method instead of == because sometimes when the treenodes contain
-"many children, vim seg faults when doing ==
-"
-"Args:
-"treenode: the other treenode to compare to
-function! s:TreeFileNode.equals(treenode)
- return self.path.str() ==# a:treenode.path.str()
-endfunction
-
-"FUNCTION: TreeFileNode.findNode(path) {{{3
-"Returns self if this node.path.Equals the given path.
-"Returns {} if not equal.
-"
-"Args:
-"path: the path object to compare against
-function! s:TreeFileNode.findNode(path)
- if a:path.equals(self.path)
- return self
- endif
- return {}
-endfunction
-"FUNCTION: TreeFileNode.findOpenDirSiblingWithVisibleChildren(direction) {{{3
-"
-"Finds the next sibling for this node in the indicated direction. This sibling
-"must be a directory and may/may not have children as specified.
-"
-"Args:
-"direction: 0 if you want to find the previous sibling, 1 for the next sibling
-"
-"Return:
-"a treenode object or {} if no appropriate sibling could be found
-function! s:TreeFileNode.findOpenDirSiblingWithVisibleChildren(direction)
- "if we have no parent then we can have no siblings
- if self.parent != {}
- let nextSibling = self.findSibling(a:direction)
-
- while nextSibling != {}
- if nextSibling.path.isDirectory && nextSibling.hasVisibleChildren() && nextSibling.isOpen
- return nextSibling
- endif
- let nextSibling = nextSibling.findSibling(a:direction)
- endwhile
- endif
-
- return {}
-endfunction
-"FUNCTION: TreeFileNode.findSibling(direction) {{{3
-"
-"Finds the next sibling for this node in the indicated direction
-"
-"Args:
-"direction: 0 if you want to find the previous sibling, 1 for the next sibling
-"
-"Return:
-"a treenode object or {} if no sibling could be found
-function! s:TreeFileNode.findSibling(direction)
- "if we have no parent then we can have no siblings
- if self.parent != {}
-
- "get the index of this node in its parents children
- let siblingIndx = self.parent.getChildIndex(self.path)
-
- if siblingIndx != -1
- "move a long to the next potential sibling node
- let siblingIndx = a:direction ==# 1 ? siblingIndx+1 : siblingIndx-1
-
- "keep moving along to the next sibling till we find one that is valid
- let numSiblings = self.parent.getChildCount()
- while siblingIndx >= 0 && siblingIndx < numSiblings
-
- "if the next node is not an ignored node (i.e. wont show up in the
- "view) then return it
- if self.parent.children[siblingIndx].path.ignore() ==# 0
- return self.parent.children[siblingIndx]
- endif
-
- "go to next node
- let siblingIndx = a:direction ==# 1 ? siblingIndx+1 : siblingIndx-1
- endwhile
- endif
- endif
-
- return {}
-endfunction
-
-"FUNCTION: TreeFileNode.getLineNum(){{{3
-"returns the line number this node is rendered on, or -1 if it isnt rendered
-function! s:TreeFileNode.getLineNum()
- "if the node is the root then return the root line no.
- if self.isRoot()
- return s:TreeFileNode.GetRootLineNum()
- endif
-
- let totalLines = line("$")
-
- "the path components we have matched so far
- let pathcomponents = [substitute(b:NERDTreeRoot.path.str({'format': 'UI'}), '/ *$', '', '')]
- "the index of the component we are searching for
- let curPathComponent = 1
-
- let fullpath = self.path.str({'format': 'UI'})
-
-
- let lnum = s:TreeFileNode.GetRootLineNum()
- while lnum > 0
- let lnum = lnum + 1
- "have we reached the bottom of the tree?
- if lnum ==# totalLines+1
- return -1
- endif
-
- let curLine = getline(lnum)
-
- let indent = s:indentLevelFor(curLine)
- if indent ==# curPathComponent
- let curLine = s:stripMarkupFromLine(curLine, 1)
-
- let curPath = join(pathcomponents, '/') . '/' . curLine
- if stridx(fullpath, curPath, 0) ==# 0
- if fullpath ==# curPath || strpart(fullpath, len(curPath)-1,1) ==# '/'
- let curLine = substitute(curLine, '/ *$', '', '')
- call add(pathcomponents, curLine)
- let curPathComponent = curPathComponent + 1
-
- if fullpath ==# curPath
- return lnum
- endif
- endif
- endif
- endif
- endwhile
- return -1
-endfunction
-
-"FUNCTION: TreeFileNode.GetRootForTab(){{{3
-"get the root node for this tab
-function! s:TreeFileNode.GetRootForTab()
- if s:treeExistsForTab()
- return getbufvar(t:NERDTreeBufName, 'NERDTreeRoot')
- end
- return {}
-endfunction
-"FUNCTION: TreeFileNode.GetRootLineNum(){{{3
-"gets the line number of the root node
-function! s:TreeFileNode.GetRootLineNum()
- let rootLine = 1
- while getline(rootLine) !~ '^\(/\|<\)'
- let rootLine = rootLine + 1
- endwhile
- return rootLine
-endfunction
-
-"FUNCTION: TreeFileNode.GetSelected() {{{3
-"gets the treenode that the cursor is currently over
-function! s:TreeFileNode.GetSelected()
- try
- let path = s:getPath(line("."))
- if path ==# {}
- return {}
- endif
- return b:NERDTreeRoot.findNode(path)
- catch /NERDTree/
- return {}
- endtry
-endfunction
-"FUNCTION: TreeFileNode.isVisible() {{{3
-"returns 1 if this node should be visible according to the tree filters and
-"hidden file filters (and their on/off status)
-function! s:TreeFileNode.isVisible()
- return !self.path.ignore()
-endfunction
-"FUNCTION: TreeFileNode.isRoot() {{{3
-"returns 1 if this node is b:NERDTreeRoot
-function! s:TreeFileNode.isRoot()
- if !s:treeExistsForBuf()
- throw "NERDTree.NoTreeError: No tree exists for the current buffer"
- endif
-
- return self.equals(b:NERDTreeRoot)
-endfunction
-
-"FUNCTION: TreeFileNode.makeRoot() {{{3
-"Make this node the root of the tree
-function! s:TreeFileNode.makeRoot()
- if self.path.isDirectory
- let b:NERDTreeRoot = self
- else
- call self.cacheParent()
- let b:NERDTreeRoot = self.parent
- endif
-
- call b:NERDTreeRoot.open()
-
- "change dir to the dir of the new root if instructed to
- if g:NERDTreeChDirMode ==# 2
- exec "cd " . b:NERDTreeRoot.path.str({'format': 'Edit'})
- endif
-endfunction
-"FUNCTION: TreeFileNode.New(path) {{{3
-"Returns a new TreeNode object with the given path and parent
-"
-"Args:
-"path: a path object representing the full filesystem path to the file/dir that the node represents
-function! s:TreeFileNode.New(path)
- if a:path.isDirectory
- return s:TreeDirNode.New(a:path)
- else
- let newTreeNode = copy(self)
- let newTreeNode.path = a:path
- let newTreeNode.parent = {}
- return newTreeNode
- endif
-endfunction
-
-"FUNCTION: TreeFileNode.open() {{{3
-"Open the file represented by the given node in the current window, splitting
-"the window if needed
-"
-"ARGS:
-"treenode: file node to open
-function! s:TreeFileNode.open()
- if b:NERDTreeType ==# "secondary"
- exec 'edit ' . self.path.str({'format': 'Edit'})
- return
- endif
-
- "if the file is already open in this tab then just stick the cursor in it
- let winnr = bufwinnr('^' . self.path.str() . '$')
- if winnr != -1
- call s:exec(winnr . "wincmd w")
-
- else
- if !s:isWindowUsable(winnr("#")) && s:firstUsableWindow() ==# -1
- call self.openSplit()
- else
- try
- if !s:isWindowUsable(winnr("#"))
- call s:exec(s:firstUsableWindow() . "wincmd w")
- else
- call s:exec('wincmd p')
- endif
- exec ("edit " . self.path.str({'format': 'Edit'}))
- catch /^Vim\%((\a\+)\)\=:E37/
- call s:putCursorInTreeWin()
- throw "NERDTree.FileAlreadyOpenAndModifiedError: ". self.path.str() ." is already open and modified."
- catch /^Vim\%((\a\+)\)\=:/
- echo v:exception
- endtry
- endif
- endif
-endfunction
-"FUNCTION: TreeFileNode.openSplit() {{{3
-"Open this node in a new window
-function! s:TreeFileNode.openSplit()
-
- if b:NERDTreeType ==# "secondary"
- exec "split " . self.path.str({'format': 'Edit'})
- return
- endif
-
- " Save the user's settings for splitbelow and splitright
- let savesplitbelow=&splitbelow
- let savesplitright=&splitright
-
- " 'there' will be set to a command to move from the split window
- " back to the explorer window
- "
- " 'back' will be set to a command to move from the explorer window
- " back to the newly split window
- "
- " 'right' and 'below' will be set to the settings needed for
- " splitbelow and splitright IF the explorer is the only window.
- "
- let there= g:NERDTreeWinPos ==# "left" ? "wincmd h" : "wincmd l"
- let back = g:NERDTreeWinPos ==# "left" ? "wincmd l" : "wincmd h"
- let right= g:NERDTreeWinPos ==# "left"
- let below=0
-
- " Attempt to go to adjacent window
- call s:exec(back)
-
- let onlyOneWin = (winnr("$") ==# 1)
-
- " If no adjacent window, set splitright and splitbelow appropriately
- if onlyOneWin
- let &splitright=right
- let &splitbelow=below
- else
- " found adjacent window - invert split direction
- let &splitright=!right
- let &splitbelow=!below
- endif
-
- let splitMode = onlyOneWin ? "vertical" : ""
-
- " Open the new window
- try
- exec(splitMode." sp " . self.path.str({'format': 'Edit'}))
- catch /^Vim\%((\a\+)\)\=:E37/
- call s:putCursorInTreeWin()
- throw "NERDTree.FileAlreadyOpenAndModifiedError: ". self.path.str() ." is already open and modified."
- catch /^Vim\%((\a\+)\)\=:/
- "do nothing
- endtry
-
- "resize the tree window if no other window was open before
- if onlyOneWin
- let size = exists("b:NERDTreeOldWindowSize") ? b:NERDTreeOldWindowSize : g:NERDTreeWinSize
- call s:exec(there)
- exec("silent ". splitMode ." resize ". size)
- call s:exec('wincmd p')
- endif
-
- " Restore splitmode settings
- let &splitbelow=savesplitbelow
- let &splitright=savesplitright
-endfunction
-"FUNCTION: TreeFileNode.openVSplit() {{{3
-"Open this node in a new vertical window
-function! s:TreeFileNode.openVSplit()
- if b:NERDTreeType ==# "secondary"
- exec "vnew " . self.path.str({'format': 'Edit'})
- return
- endif
-
- let winwidth = winwidth(".")
- if winnr("$")==#1
- let winwidth = g:NERDTreeWinSize
- endif
-
- call s:exec("wincmd p")
- exec "vnew " . self.path.str({'format': 'Edit'})
-
- "resize the nerd tree back to the original size
- call s:putCursorInTreeWin()
- exec("silent vertical resize ". winwidth)
- call s:exec('wincmd p')
-endfunction
-"FUNCTION: TreeFileNode.openInNewTab(options) {{{3
-function! s:TreeFileNode.openInNewTab(options)
- let currentTab = tabpagenr()
-
- if !has_key(a:options, 'keepTreeOpen')
- call s:closeTreeIfQuitOnOpen()
- endif
-
- exec "tabedit " . self.path.str({'format': 'Edit'})
-
- if has_key(a:options, 'stayInCurrentTab') && a:options['stayInCurrentTab']
- exec "tabnext " . currentTab
- endif
-
-endfunction
-"FUNCTION: TreeFileNode.putCursorHere(isJump, recurseUpward){{{3
-"Places the cursor on the line number this node is rendered on
-"
-"Args:
-"isJump: 1 if this cursor movement should be counted as a jump by vim
-"recurseUpward: try to put the cursor on the parent if the this node isnt
-"visible
-function! s:TreeFileNode.putCursorHere(isJump, recurseUpward)
- let ln = self.getLineNum()
- if ln != -1
- if a:isJump
- mark '
- endif
- call cursor(ln, col("."))
- else
- if a:recurseUpward
- let node = self
- while node != {} && node.getLineNum() ==# -1
- let node = node.parent
- call node.open()
- endwhile
- call s:renderView()
- call node.putCursorHere(a:isJump, 0)
- endif
- endif
-endfunction
-
-"FUNCTION: TreeFileNode.refresh() {{{3
-function! s:TreeFileNode.refresh()
- call self.path.refresh()
-endfunction
-"FUNCTION: TreeFileNode.rename() {{{3
-"Calls the rename method for this nodes path obj
-function! s:TreeFileNode.rename(newName)
- let newName = substitute(a:newName, '\(\\\|\/\)$', '', '')
- call self.path.rename(newName)
- call self.parent.removeChild(self)
-
- let parentPath = self.path.getParent()
- let newParent = b:NERDTreeRoot.findNode(parentPath)
-
- if newParent != {}
- call newParent.createChild(self.path, 1)
- call newParent.refresh()
- endif
-endfunction
-"FUNCTION: TreeFileNode.renderToString {{{3
-"returns a string representation for this tree to be rendered in the view
-function! s:TreeFileNode.renderToString()
- return self._renderToString(0, 0, [], self.getChildCount() ==# 1)
-endfunction
-
-
-"Args:
-"depth: the current depth in the tree for this call
-"drawText: 1 if we should actually draw the line for this node (if 0 then the
-"child nodes are rendered only)
-"vertMap: a binary array that indicates whether a vertical bar should be draw
-"for each depth in the tree
-"isLastChild:true if this curNode is the last child of its parent
-function! s:TreeFileNode._renderToString(depth, drawText, vertMap, isLastChild)
- let output = ""
- if a:drawText ==# 1
-
- let treeParts = ''
-
- "get all the leading spaces and vertical tree parts for this line
- if a:depth > 1
- for j in a:vertMap[0:-2]
- if j ==# 1
- let treeParts = treeParts . '| '
- else
- let treeParts = treeParts . ' '
- endif
- endfor
- endif
-
- "get the last vertical tree part for this line which will be different
- "if this node is the last child of its parent
- if a:isLastChild
- let treeParts = treeParts . '`'
- else
- let treeParts = treeParts . '|'
- endif
-
-
- "smack the appropriate dir/file symbol on the line before the file/dir
- "name itself
- if self.path.isDirectory
- if self.isOpen
- let treeParts = treeParts . '~'
- else
- let treeParts = treeParts . '+'
- endif
- else
- let treeParts = treeParts . '-'
- endif
- let line = treeParts . self.displayString()
-
- let output = output . line . "\n"
- endif
-
- "if the node is an open dir, draw its children
- if self.path.isDirectory ==# 1 && self.isOpen ==# 1
-
- let childNodesToDraw = self.getVisibleChildren()
- if len(childNodesToDraw) > 0
-
- "draw all the nodes children except the last
- let lastIndx = len(childNodesToDraw)-1
- if lastIndx > 0
- for i in childNodesToDraw[0:lastIndx-1]
- let output = output . i._renderToString(a:depth + 1, 1, add(copy(a:vertMap), 1), 0)
- endfor
- endif
-
- "draw the last child, indicating that it IS the last
- let output = output . childNodesToDraw[lastIndx]._renderToString(a:depth + 1, 1, add(copy(a:vertMap), 0), 1)
- endif
- endif
-
- return output
-endfunction
-"CLASS: TreeDirNode {{{2
-"This class is a child of the TreeFileNode class and constitutes the
-"'Composite' part of the composite design pattern between the treenode
-"classes.
-"============================================================
-let s:TreeDirNode = copy(s:TreeFileNode)
-"FUNCTION: TreeDirNode.AbsoluteTreeRoot(){{{3
-"class method that returns the highest cached ancestor of the current root
-function! s:TreeDirNode.AbsoluteTreeRoot()
- let currentNode = b:NERDTreeRoot
- while currentNode.parent != {}
- let currentNode = currentNode.parent
- endwhile
- return currentNode
-endfunction
-"FUNCTION: TreeDirNode.activate(forceKeepWinOpen) {{{3
-unlet s:TreeDirNode.activate
-function! s:TreeDirNode.activate(forceKeepWinOpen)
- call self.toggleOpen()
- call s:renderView()
- call self.putCursorHere(0, 0)
-endfunction
-"FUNCTION: TreeDirNode.addChild(treenode, inOrder) {{{3
-"Adds the given treenode to the list of children for this node
-"
-"Args:
-"-treenode: the node to add
-"-inOrder: 1 if the new node should be inserted in sorted order
-function! s:TreeDirNode.addChild(treenode, inOrder)
- call add(self.children, a:treenode)
- let a:treenode.parent = self
-
- if a:inOrder
- call self.sortChildren()
- endif
-endfunction
-
-"FUNCTION: TreeDirNode.close() {{{3
-"Closes this directory
-function! s:TreeDirNode.close()
- let self.isOpen = 0
-endfunction
-
-"FUNCTION: TreeDirNode.closeChildren() {{{3
-"Closes all the child dir nodes of this node
-function! s:TreeDirNode.closeChildren()
- for i in self.children
- if i.path.isDirectory
- call i.close()
- call i.closeChildren()
- endif
- endfor
-endfunction
-
-"FUNCTION: TreeDirNode.createChild(path, inOrder) {{{3
-"Instantiates a new child node for this node with the given path. The new
-"nodes parent is set to this node.
-"
-"Args:
-"path: a Path object that this node will represent/contain
-"inOrder: 1 if the new node should be inserted in sorted order
-"
-"Returns:
-"the newly created node
-function! s:TreeDirNode.createChild(path, inOrder)
- let newTreeNode = s:TreeFileNode.New(a:path)
- call self.addChild(newTreeNode, a:inOrder)
- return newTreeNode
-endfunction
-
-"FUNCTION: TreeDirNode.findNode(path) {{{3
-"Will find one of the children (recursively) that has the given path
-"
-"Args:
-"path: a path object
-unlet s:TreeDirNode.findNode
-function! s:TreeDirNode.findNode(path)
- if a:path.equals(self.path)
- return self
- endif
- if stridx(a:path.str(), self.path.str(), 0) ==# -1
- return {}
- endif
-
- if self.path.isDirectory
- for i in self.children
- let retVal = i.findNode(a:path)
- if retVal != {}
- return retVal
- endif
- endfor
- endif
- return {}
-endfunction
-"FUNCTION: TreeDirNode.getChildCount() {{{3
-"Returns the number of children this node has
-function! s:TreeDirNode.getChildCount()
- return len(self.children)
-endfunction
-
-"FUNCTION: TreeDirNode.getChild(path) {{{3
-"Returns child node of this node that has the given path or {} if no such node
-"exists.
-"
-"This function doesnt not recurse into child dir nodes
-"
-"Args:
-"path: a path object
-function! s:TreeDirNode.getChild(path)
- if stridx(a:path.str(), self.path.str(), 0) ==# -1
- return {}
- endif
-
- let index = self.getChildIndex(a:path)
- if index ==# -1
- return {}
- else
- return self.children[index]
- endif
-
-endfunction
-
-"FUNCTION: TreeDirNode.getChildByIndex(indx, visible) {{{3
-"returns the child at the given index
-"Args:
-"indx: the index to get the child from
-"visible: 1 if only the visible children array should be used, 0 if all the
-"children should be searched.
-function! s:TreeDirNode.getChildByIndex(indx, visible)
- let array_to_search = a:visible? self.getVisibleChildren() : self.children
- if a:indx > len(array_to_search)
- throw "NERDTree.InvalidArgumentsError: Index is out of bounds."
- endif
- return array_to_search[a:indx]
-endfunction
-
-"FUNCTION: TreeDirNode.getChildIndex(path) {{{3
-"Returns the index of the child node of this node that has the given path or
-"-1 if no such node exists.
-"
-"This function doesnt not recurse into child dir nodes
-"
-"Args:
-"path: a path object
-function! s:TreeDirNode.getChildIndex(path)
- if stridx(a:path.str(), self.path.str(), 0) ==# -1
- return -1
- endif
-
- "do a binary search for the child
- let a = 0
- let z = self.getChildCount()
- while a < z
- let mid = (a+z)/2
- let diff = a:path.compareTo(self.children[mid].path)
-
- if diff ==# -1
- let z = mid
- elseif diff ==# 1
- let a = mid+1
- else
- return mid
- endif
- endwhile
- return -1
-endfunction
-
-"FUNCTION: TreeDirNode.GetSelected() {{{3
-"Returns the current node if it is a dir node, or else returns the current
-"nodes parent
-unlet s:TreeDirNode.GetSelected
-function! s:TreeDirNode.GetSelected()
- let currentDir = s:TreeFileNode.GetSelected()
- if currentDir != {} && !currentDir.isRoot()
- if currentDir.path.isDirectory ==# 0
- let currentDir = currentDir.parent
- endif
- endif
- return currentDir
-endfunction
-"FUNCTION: TreeDirNode.getVisibleChildCount() {{{3
-"Returns the number of visible children this node has
-function! s:TreeDirNode.getVisibleChildCount()
- return len(self.getVisibleChildren())
-endfunction
-
-"FUNCTION: TreeDirNode.getVisibleChildren() {{{3
-"Returns a list of children to display for this node, in the correct order
-"
-"Return:
-"an array of treenodes
-function! s:TreeDirNode.getVisibleChildren()
- let toReturn = []
- for i in self.children
- if i.path.ignore() ==# 0
- call add(toReturn, i)
- endif
- endfor
- return toReturn
-endfunction
-
-"FUNCTION: TreeDirNode.hasVisibleChildren() {{{3
-"returns 1 if this node has any childre, 0 otherwise..
-function! s:TreeDirNode.hasVisibleChildren()
- return self.getVisibleChildCount() != 0
-endfunction
-
-"FUNCTION: TreeDirNode._initChildren() {{{3
-"Removes all childen from this node and re-reads them
-"
-"Args:
-"silent: 1 if the function should not echo any "please wait" messages for
-"large directories
-"
-"Return: the number of child nodes read
-function! s:TreeDirNode._initChildren(silent)
- "remove all the current child nodes
- let self.children = []
-
- "get an array of all the files in the nodes dir
- let dir = self.path
- let globDir = dir.str({'format': 'Glob'})
- let filesStr = globpath(globDir, '*') . "\n" . globpath(globDir, '.*')
- let files = split(filesStr, "\n")
-
- if !a:silent && len(files) > g:NERDTreeNotificationThreshold
- call s:echo("Please wait, caching a large dir ...")
- endif
-
- let invalidFilesFound = 0
- for i in files
-
- "filter out the .. and . directories
- "Note: we must match .. AND ../ cos sometimes the globpath returns
- "../ for path with strange chars (eg $)
- if i !~ '\/\.\.\/\?$' && i !~ '\/\.\/\?$'
-
- "put the next file in a new node and attach it
- try
- let path = s:Path.New(i)
- call self.createChild(path, 0)
- catch /^NERDTree.\(InvalidArguments\|InvalidFiletype\)Error/
- let invalidFilesFound += 1
- endtry
- endif
- endfor
-
- call self.sortChildren()
-
- if !a:silent && len(files) > g:NERDTreeNotificationThreshold
- call s:echo("Please wait, caching a large dir ... DONE (". self.getChildCount() ." nodes cached).")
- endif
-
- if invalidFilesFound
- call s:echoWarning(invalidFilesFound . " file(s) could not be loaded into the NERD tree")
- endif
- return self.getChildCount()
-endfunction
-"FUNCTION: TreeDirNode.New(path) {{{3
-"Returns a new TreeNode object with the given path and parent
-"
-"Args:
-"path: a path object representing the full filesystem path to the file/dir that the node represents
-unlet s:TreeDirNode.New
-function! s:TreeDirNode.New(path)
- if a:path.isDirectory != 1
- throw "NERDTree.InvalidArgumentsError: A TreeDirNode object must be instantiated with a directory Path object."
- endif
-
- let newTreeNode = copy(self)
- let newTreeNode.path = a:path
-
- let newTreeNode.isOpen = 0
- let newTreeNode.children = []
-
- let newTreeNode.parent = {}
-
- return newTreeNode
-endfunction
-"FUNCTION: TreeDirNode.open() {{{3
-"Reads in all this nodes children
-"
-"Return: the number of child nodes read
-unlet s:TreeDirNode.open
-function! s:TreeDirNode.open()
- let self.isOpen = 1
- if self.children ==# []
- return self._initChildren(0)
- else
- return 0
- endif
-endfunction
-
-" FUNCTION: TreeDirNode.openExplorer() {{{3
-" opens an explorer window for this node in the previous window (could be a
-" nerd tree or a netrw)
-function! s:TreeDirNode.openExplorer()
- let oldwin = winnr()
- call s:exec('wincmd p')
- if oldwin ==# winnr() || (&modified && s:bufInWindows(winbufnr(winnr())) < 2)
- call s:exec('wincmd p')
- call self.openSplit()
- else
- exec ("silent edit " . self.path.str({'format': 'Edit'}))
- endif
-endfunction
-"FUNCTION: TreeDirNode.openInNewTab(options) {{{3
-unlet s:TreeDirNode.openInNewTab
-function! s:TreeDirNode.openInNewTab(options)
- let currentTab = tabpagenr()
-
- if !has_key(a:options, 'keepTreeOpen') || !a:options['keepTreeOpen']
- call s:closeTreeIfQuitOnOpen()
- endif
-
- tabnew
- call s:initNerdTree(self.path.str())
-
- if has_key(a:options, 'stayInCurrentTab') && a:options['stayInCurrentTab']
- exec "tabnext " . currentTab
- endif
-endfunction
-"FUNCTION: TreeDirNode.openRecursively() {{{3
-"Opens this treenode and all of its children whose paths arent 'ignored'
-"because of the file filters.
-"
-"This method is actually a wrapper for the OpenRecursively2 method which does
-"the work.
-function! s:TreeDirNode.openRecursively()
- call self._openRecursively2(1)
-endfunction
-
-"FUNCTION: TreeDirNode._openRecursively2() {{{3
-"Opens this all children of this treenode recursively if either:
-" *they arent filtered by file filters
-" *a:forceOpen is 1
-"
-"Args:
-"forceOpen: 1 if this node should be opened regardless of file filters
-function! s:TreeDirNode._openRecursively2(forceOpen)
- if self.path.ignore() ==# 0 || a:forceOpen
- let self.isOpen = 1
- if self.children ==# []
- call self._initChildren(1)
- endif
-
- for i in self.children
- if i.path.isDirectory ==# 1
- call i._openRecursively2(0)
- endif
- endfor
- endif
-endfunction
-
-"FUNCTION: TreeDirNode.refresh() {{{3
-unlet s:TreeDirNode.refresh
-function! s:TreeDirNode.refresh()
- call self.path.refresh()
-
- "if this node was ever opened, refresh its children
- if self.isOpen || !empty(self.children)
- "go thru all the files/dirs under this node
- let newChildNodes = []
- let invalidFilesFound = 0
- let dir = self.path
- let globDir = dir.str({'format': 'Glob'})
- let filesStr = globpath(globDir, '*') . "\n" . globpath(globDir, '.*')
- let files = split(filesStr, "\n")
- for i in files
- "filter out the .. and . directories
- "Note: we must match .. AND ../ cos sometimes the globpath returns
- "../ for path with strange chars (eg $)
- if i !~ '\/\.\.\/\?$' && i !~ '\/\.\/\?$'
-
- try
- "create a new path and see if it exists in this nodes children
- let path = s:Path.New(i)
- let newNode = self.getChild(path)
- if newNode != {}
- call newNode.refresh()
- call add(newChildNodes, newNode)
-
- "the node doesnt exist so create it
- else
- let newNode = s:TreeFileNode.New(path)
- let newNode.parent = self
- call add(newChildNodes, newNode)
- endif
-
-
- catch /^NERDTree.InvalidArgumentsError/
- let invalidFilesFound = 1
- endtry
- endif
- endfor
-
- "swap this nodes children out for the children we just read/refreshed
- let self.children = newChildNodes
- call self.sortChildren()
-
- if invalidFilesFound
- call s:echoWarning("some files could not be loaded into the NERD tree")
- endif
- endif
-endfunction
-
-"FUNCTION: TreeDirNode.reveal(path) {{{3
-"reveal the given path, i.e. cache and open all treenodes needed to display it
-"in the UI
-function! s:TreeDirNode.reveal(path)
- if !a:path.isUnder(self.path)
- throw "NERDTree.InvalidArgumentsError: " . a:path.str() . " should be under " . self.path.str()
- endif
-
- call self.open()
-
- if self.path.equals(a:path.getParent())
- let n = self.findNode(a:path)
- call s:renderView()
- call n.putCursorHere(1,0)
- return
- endif
-
- let p = a:path
- while !p.getParent().equals(self.path)
- let p = p.getParent()
- endwhile
-
- let n = self.findNode(p)
- call n.reveal(a:path)
-endfunction
-"FUNCTION: TreeDirNode.removeChild(treenode) {{{3
-"
-"Removes the given treenode from this nodes set of children
-"
-"Args:
-"treenode: the node to remove
-"
-"Throws a NERDTree.ChildNotFoundError if the given treenode is not found
-function! s:TreeDirNode.removeChild(treenode)
- for i in range(0, self.getChildCount()-1)
- if self.children[i].equals(a:treenode)
- call remove(self.children, i)
- return
- endif
- endfor
-
- throw "NERDTree.ChildNotFoundError: child node was not found"
-endfunction
-
-"FUNCTION: TreeDirNode.sortChildren() {{{3
-"
-"Sorts the children of this node according to alphabetical order and the
-"directory priority.
-"
-function! s:TreeDirNode.sortChildren()
- let CompareFunc = function("s:compareNodes")
- call sort(self.children, CompareFunc)
-endfunction
-
-"FUNCTION: TreeDirNode.toggleOpen() {{{3
-"Opens this directory if it is closed and vice versa
-function! s:TreeDirNode.toggleOpen()
- if self.isOpen ==# 1
- call self.close()
- else
- call self.open()
- endif
-endfunction
-
-"FUNCTION: TreeDirNode.transplantChild(newNode) {{{3
-"Replaces the child of this with the given node (where the child node's full
-"path matches a:newNode's fullpath). The search for the matching node is
-"non-recursive
-"
-"Arg:
-"newNode: the node to graft into the tree
-function! s:TreeDirNode.transplantChild(newNode)
- for i in range(0, self.getChildCount()-1)
- if self.children[i].equals(a:newNode)
- let self.children[i] = a:newNode
- let a:newNode.parent = self
- break
- endif
- endfor
-endfunction
-"============================================================
-"CLASS: Path {{{2
-"============================================================
-let s:Path = {}
-"FUNCTION: Path.AbsolutePathFor(str) {{{3
-function! s:Path.AbsolutePathFor(str)
- let prependCWD = 0
- if s:running_windows
- let prependCWD = a:str !~ '^.:\(\\\|\/\)'
- else
- let prependCWD = a:str !~ '^/'
- endif
-
- let toReturn = a:str
- if prependCWD
- let toReturn = getcwd() . s:Path.Slash() . a:str
- endif
-
- return toReturn
-endfunction
-"FUNCTION: Path.bookmarkNames() {{{3
-function! s:Path.bookmarkNames()
- if !exists("self._bookmarkNames")
- call self.cacheDisplayString()
- endif
- return self._bookmarkNames
-endfunction
-"FUNCTION: Path.cacheDisplayString() {{{3
-function! s:Path.cacheDisplayString()
- let self.cachedDisplayString = self.getLastPathComponent(1)
-
- if self.isExecutable
- let self.cachedDisplayString = self.cachedDisplayString . '*'
- endif
-
- let self._bookmarkNames = []
- for i in s:Bookmark.Bookmarks()
- if i.path.equals(self)
- call add(self._bookmarkNames, i.name)
- endif
- endfor
- if !empty(self._bookmarkNames)
- let self.cachedDisplayString .= ' {' . join(self._bookmarkNames) . '}'
- endif
-
- if self.isSymLink
- let self.cachedDisplayString .= ' -> ' . self.symLinkDest
- endif
-
- if self.isReadOnly
- let self.cachedDisplayString .= ' [RO]'
- endif
-endfunction
-"FUNCTION: Path.changeToDir() {{{3
-function! s:Path.changeToDir()
- let dir = self.str({'format': 'Cd'})
- if self.isDirectory ==# 0
- let dir = self.getParent().str({'format': 'Cd'})
- endif
-
- try
- execute "cd " . dir
- call s:echo("CWD is now: " . getcwd())
- catch
- throw "NERDTree.PathChangeError: cannot change CWD to " . dir
- endtry
-endfunction
-
-"FUNCTION: Path.compareTo() {{{3
-"
-"Compares this Path to the given path and returns 0 if they are equal, -1 if
-"this Path is "less than" the given path, or 1 if it is "greater".
-"
-"Args:
-"path: the path object to compare this to
-"
-"Return:
-"1, -1 or 0
-function! s:Path.compareTo(path)
- let thisPath = self.getLastPathComponent(1)
- let thatPath = a:path.getLastPathComponent(1)
-
- "if the paths are the same then clearly we return 0
- if thisPath ==# thatPath
- return 0
- endif
-
- let thisSS = self.getSortOrderIndex()
- let thatSS = a:path.getSortOrderIndex()
-
- "compare the sort sequences, if they are different then the return
- "value is easy
- if thisSS < thatSS
- return -1
- elseif thisSS > thatSS
- return 1
- else
- "if the sort sequences are the same then compare the paths
- "alphabetically
- let pathCompare = g:NERDTreeCaseSensitiveSort ? thisPath <# thatPath : thisPath <? thatPath
- if pathCompare
- return -1
- else
- return 1
- endif
- endif
-endfunction
-
-"FUNCTION: Path.Create(fullpath) {{{3
-"
-"Factory method.
-"
-"Creates a path object with the given path. The path is also created on the
-"filesystem. If the path already exists, a NERDTree.Path.Exists exception is
-"thrown. If any other errors occur, a NERDTree.Path exception is thrown.
-"
-"Args:
-"fullpath: the full filesystem path to the file/dir to create
-function! s:Path.Create(fullpath)
- "bail if the a:fullpath already exists
- if isdirectory(a:fullpath) || filereadable(a:fullpath)
- throw "NERDTree.CreatePathError: Directory Exists: '" . a:fullpath . "'"
- endif
-
- try
-
- "if it ends with a slash, assume its a dir create it
- if a:fullpath =~ '\(\\\|\/\)$'
- "whack the trailing slash off the end if it exists
- let fullpath = substitute(a:fullpath, '\(\\\|\/\)$', '', '')
-
- call mkdir(fullpath, 'p')
-
- "assume its a file and create
- else
- call writefile([], a:fullpath)
- endif
- catch
- throw "NERDTree.CreatePathError: Could not create path: '" . a:fullpath . "'"
- endtry
-
- return s:Path.New(a:fullpath)
-endfunction
-
-"FUNCTION: Path.copy(dest) {{{3
-"
-"Copies the file/dir represented by this Path to the given location
-"
-"Args:
-"dest: the location to copy this dir/file to
-function! s:Path.copy(dest)
- if !s:Path.CopyingSupported()
- throw "NERDTree.CopyingNotSupportedError: Copying is not supported on this OS"
- endif
-
- let dest = s:Path.WinToUnixPath(a:dest)
-
- let cmd = g:NERDTreeCopyCmd . " " . self.str() . " " . dest
- let success = system(cmd)
- if success != 0
- throw "NERDTree.CopyError: Could not copy ''". self.str() ."'' to: '" . a:dest . "'"
- endif
-endfunction
-
-"FUNCTION: Path.CopyingSupported() {{{3
-"
-"returns 1 if copying is supported for this OS
-function! s:Path.CopyingSupported()
- return exists('g:NERDTreeCopyCmd')
-endfunction
-
-
-"FUNCTION: Path.copyingWillOverwrite(dest) {{{3
-"
-"returns 1 if copy this path to the given location will cause files to
-"overwritten
-"
-"Args:
-"dest: the location this path will be copied to
-function! s:Path.copyingWillOverwrite(dest)
- if filereadable(a:dest)
- return 1
- endif
-
- if isdirectory(a:dest)
- let path = s:Path.JoinPathStrings(a:dest, self.getLastPathComponent(0))
- if filereadable(path)
- return 1
- endif
- endif
-endfunction
-
-"FUNCTION: Path.delete() {{{3
-"
-"Deletes the file represented by this path.
-"Deletion of directories is not supported
-"
-"Throws NERDTree.Path.Deletion exceptions
-function! s:Path.delete()
- if self.isDirectory
-
- let cmd = g:NERDTreeRemoveDirCmd . self.str({'escape': 1})
- let success = system(cmd)
-
- if v:shell_error != 0
- throw "NERDTree.PathDeletionError: Could not delete directory: '" . self.str() . "'"
- endif
- else
- let success = delete(self.str())
- if success != 0
- throw "NERDTree.PathDeletionError: Could not delete file: '" . self.str() . "'"
- endif
- endif
-
- "delete all bookmarks for this path
- for i in self.bookmarkNames()
- let bookmark = s:Bookmark.BookmarkFor(i)
- call bookmark.delete()
- endfor
-endfunction
-
-"FUNCTION: Path.displayString() {{{3
-"
-"Returns a string that specifies how the path should be represented as a
-"string
-function! s:Path.displayString()
- if self.cachedDisplayString ==# ""
- call self.cacheDisplayString()
- endif
-
- return self.cachedDisplayString
-endfunction
-"FUNCTION: Path.extractDriveLetter(fullpath) {{{3
-"
-"If running windows, cache the drive letter for this path
-function! s:Path.extractDriveLetter(fullpath)
- if s:running_windows
- let self.drive = substitute(a:fullpath, '\(^[a-zA-Z]:\).*', '\1', '')
- else
- let self.drive = ''
- endif
-
-endfunction
-"FUNCTION: Path.exists() {{{3
-"return 1 if this path points to a location that is readable or is a directory
-function! s:Path.exists()
- let p = self.str()
- return filereadable(p) || isdirectory(p)
-endfunction
-"FUNCTION: Path.getDir() {{{3
-"
-"Returns this path if it is a directory, else this paths parent.
-"
-"Return:
-"a Path object
-function! s:Path.getDir()
- if self.isDirectory
- return self
- else
- return self.getParent()
- endif
-endfunction
-"FUNCTION: Path.getParent() {{{3
-"
-"Returns a new path object for this paths parent
-"
-"Return:
-"a new Path object
-function! s:Path.getParent()
- if s:running_windows
- let path = self.drive . '\' . join(self.pathSegments[0:-2], '\')
- else
- let path = '/'. join(self.pathSegments[0:-2], '/')
- endif
-
- return s:Path.New(path)
-endfunction
-"FUNCTION: Path.getLastPathComponent(dirSlash) {{{3
-"
-"Gets the last part of this path.
-"
-"Args:
-"dirSlash: if 1 then a trailing slash will be added to the returned value for
-"directory nodes.
-function! s:Path.getLastPathComponent(dirSlash)
- if empty(self.pathSegments)
- return ''
- endif
- let toReturn = self.pathSegments[-1]
- if a:dirSlash && self.isDirectory
- let toReturn = toReturn . '/'
- endif
- return toReturn
-endfunction
-
-"FUNCTION: Path.getSortOrderIndex() {{{3
-"returns the index of the pattern in g:NERDTreeSortOrder that this path matches
-function! s:Path.getSortOrderIndex()
- let i = 0
- while i < len(g:NERDTreeSortOrder)
- if self.getLastPathComponent(1) =~ g:NERDTreeSortOrder[i]
- return i
- endif
- let i = i + 1
- endwhile
- return s:NERDTreeSortStarIndex
-endfunction
-
-"FUNCTION: Path.ignore() {{{3
-"returns true if this path should be ignored
-function! s:Path.ignore()
- let lastPathComponent = self.getLastPathComponent(0)
-
- "filter out the user specified paths to ignore
- if b:NERDTreeIgnoreEnabled
- for i in g:NERDTreeIgnore
- if lastPathComponent =~ i
- return 1
- endif
- endfor
- endif
-
- "dont show hidden files unless instructed to
- if b:NERDTreeShowHidden ==# 0 && lastPathComponent =~ '^\.'
- return 1
- endif
-
- if b:NERDTreeShowFiles ==# 0 && self.isDirectory ==# 0
- return 1
- endif
-
- return 0
-endfunction
-
-"FUNCTION: Path.isUnder(path) {{{3
-"return 1 if this path is somewhere under the given path in the filesystem.
-"
-"a:path should be a dir
-function! s:Path.isUnder(path)
- if a:path.isDirectory == 0
- return 0
- endif
-
- let this = self.str()
- let that = a:path.str()
- return stridx(this, that . s:Path.Slash()) == 0
-endfunction
-
-"FUNCTION: Path.JoinPathStrings(...) {{{3
-function! s:Path.JoinPathStrings(...)
- let components = []
- for i in a:000
- let components = extend(components, split(i, '/'))
- endfor
- return '/' . join(components, '/')
-endfunction
-
-"FUNCTION: Path.equals() {{{3
-"
-"Determines whether 2 path objects are "equal".
-"They are equal if the paths they represent are the same
-"
-"Args:
-"path: the other path obj to compare this with
-function! s:Path.equals(path)
- return self.str() ==# a:path.str()
-endfunction
-
-"FUNCTION: Path.New() {{{3
-"The Constructor for the Path object
-function! s:Path.New(path)
- let newPath = copy(self)
-
- call newPath.readInfoFromDisk(s:Path.AbsolutePathFor(a:path))
-
- let newPath.cachedDisplayString = ""
-
- return newPath
-endfunction
-
-"FUNCTION: Path.Slash() {{{3
-"return the slash to use for the current OS
-function! s:Path.Slash()
- return s:running_windows ? '\' : '/'
-endfunction
-
-"FUNCTION: Path.readInfoFromDisk(fullpath) {{{3
-"
-"
-"Throws NERDTree.Path.InvalidArguments exception.
-function! s:Path.readInfoFromDisk(fullpath)
- call self.extractDriveLetter(a:fullpath)
-
- let fullpath = s:Path.WinToUnixPath(a:fullpath)
-
- if getftype(fullpath) ==# "fifo"
- throw "NERDTree.InvalidFiletypeError: Cant handle FIFO files: " . a:fullpath
- endif
-
- let self.pathSegments = split(fullpath, '/')
-
- let self.isReadOnly = 0
- if isdirectory(a:fullpath)
- let self.isDirectory = 1
- elseif filereadable(a:fullpath)
- let self.isDirectory = 0
- let self.isReadOnly = filewritable(a:fullpath) ==# 0
- else
- throw "NERDTree.InvalidArgumentsError: Invalid path = " . a:fullpath
- endif
-
- let self.isExecutable = 0
- if !self.isDirectory
- let self.isExecutable = getfperm(a:fullpath) =~ 'x'
- endif
-
- "grab the last part of the path (minus the trailing slash)
- let lastPathComponent = self.getLastPathComponent(0)
-
- "get the path to the new node with the parent dir fully resolved
- let hardPath = resolve(self.strTrunk()) . '/' . lastPathComponent
-
- "if the last part of the path is a symlink then flag it as such
- let self.isSymLink = (resolve(hardPath) != hardPath)
- if self.isSymLink
- let self.symLinkDest = resolve(fullpath)
-
- "if the link is a dir then slap a / on the end of its dest
- if isdirectory(self.symLinkDest)
-
- "we always wanna treat MS windows shortcuts as files for
- "simplicity
- if hardPath !~ '\.lnk$'
-
- let self.symLinkDest = self.symLinkDest . '/'
- endif
- endif
- endif
-endfunction
-
-"FUNCTION: Path.refresh() {{{3
-function! s:Path.refresh()
- call self.readInfoFromDisk(self.str())
- call self.cacheDisplayString()
-endfunction
-
-"FUNCTION: Path.rename() {{{3
-"
-"Renames this node on the filesystem
-function! s:Path.rename(newPath)
- if a:newPath ==# ''
- throw "NERDTree.InvalidArgumentsError: Invalid newPath for renaming = ". a:newPath
- endif
-
- let success = rename(self.str(), a:newPath)
- if success != 0
- throw "NERDTree.PathRenameError: Could not rename: '" . self.str() . "'" . 'to:' . a:newPath
- endif
- call self.readInfoFromDisk(a:newPath)
-
- for i in self.bookmarkNames()
- let b = s:Bookmark.BookmarkFor(i)
- call b.setPath(copy(self))
- endfor
- call s:Bookmark.Write()
-endfunction
-
-"FUNCTION: Path.str() {{{3
-"
-"Returns a string representation of this Path
-"
-"Takes an optional dictionary param to specify how the output should be
-"formatted.
-"
-"The dict may have the following keys:
-" 'format'
-" 'escape'
-" 'truncateTo'
-"
-"The 'format' key may have a value of:
-" 'Cd' - a string to be used with the :cd command
-" 'Edit' - a string to be used with :e :sp :new :tabedit etc
-" 'UI' - a string used in the NERD tree UI
-"
-"The 'escape' key, if specified will cause the output to be escaped with
-"shellescape()
-"
-"The 'truncateTo' key causes the resulting string to be truncated to the value
-"'truncateTo' maps to. A '<' char will be prepended.
-function! s:Path.str(...)
- let options = a:0 ? a:1 : {}
- let toReturn = ""
-
- if has_key(options, 'format')
- let format = options['format']
- if has_key(self, '_strFor' . format)
- exec 'let toReturn = self._strFor' . format . '()'
- else
- raise 'NERDTree.UnknownFormatError: unknown format "'. format .'"'
- endif
- else
- let toReturn = self._str()
- endif
-
- if has_key(options, 'escape') && options['escape']
- let toReturn = shellescape(toReturn)
- endif
-
- if has_key(options, 'truncateTo')
- let limit = options['truncateTo']
- if len(toReturn) > limit
- let toReturn = "<" . strpart(toReturn, len(toReturn) - limit + 1)
- endif
- endif
-
- return toReturn
-endfunction
-
-"FUNCTION: Path._strForUI() {{{3
-function! s:Path._strForUI()
- let toReturn = '/' . join(self.pathSegments, '/')
- if self.isDirectory && toReturn != '/'
- let toReturn = toReturn . '/'
- endif
- return toReturn
-endfunction
-
-"FUNCTION: Path._strForCd() {{{3
-"
-" returns a string that can be used with :cd
-function! s:Path._strForCd()
- return escape(self.str(), s:escape_chars)
-endfunction
-"FUNCTION: Path._strForEdit() {{{3
-"
-"Return: the string for this path that is suitable to be used with the :edit
-"command
-function! s:Path._strForEdit()
- let p = self.str({'format': 'UI'})
- let cwd = getcwd()
-
- if s:running_windows
- let p = tolower(self.str())
- let cwd = tolower(getcwd())
- endif
-
- let p = escape(p, s:escape_chars)
-
- let cwd = cwd . s:Path.Slash()
-
- "return a relative path if we can
- if stridx(p, cwd) ==# 0
- let p = strpart(p, strlen(cwd))
- endif
-
- if p ==# ''
- let p = '.'
- endif
-
- return p
-
-endfunction
-"FUNCTION: Path._strForGlob() {{{3
-function! s:Path._strForGlob()
- let lead = s:Path.Slash()
-
- "if we are running windows then slap a drive letter on the front
- if s:running_windows
- let lead = self.drive . '\'
- endif
-
- let toReturn = lead . join(self.pathSegments, s:Path.Slash())
-
- if !s:running_windows
- let toReturn = escape(toReturn, s:escape_chars)
- endif
- return toReturn
-endfunction
-"FUNCTION: Path._str() {{{3
-"
-"Gets the string path for this path object that is appropriate for the OS.
-"EG, in windows c:\foo\bar
-" in *nix /foo/bar
-function! s:Path._str()
- let lead = s:Path.Slash()
-
- "if we are running windows then slap a drive letter on the front
- if s:running_windows
- let lead = self.drive . '\'
- endif
-
- return lead . join(self.pathSegments, s:Path.Slash())
-endfunction
-
-"FUNCTION: Path.strTrunk() {{{3
-"Gets the path without the last segment on the end.
-function! s:Path.strTrunk()
- return self.drive . '/' . join(self.pathSegments[0:-2], '/')
-endfunction
-
-"FUNCTION: Path.WinToUnixPath(pathstr){{{3
-"Takes in a windows path and returns the unix equiv
-"
-"A class level method
-"
-"Args:
-"pathstr: the windows path to convert
-function! s:Path.WinToUnixPath(pathstr)
- if !s:running_windows
- return a:pathstr
- endif
-
- let toReturn = a:pathstr
-
- "remove the x:\ of the front
- let toReturn = substitute(toReturn, '^.*:\(\\\|/\)\?', '/', "")
-
- "convert all \ chars to /
- let toReturn = substitute(toReturn, '\', '/', "g")
-
- return toReturn
-endfunction
-
-" SECTION: General Functions {{{1
-"============================================================
-"FUNCTION: s:bufInWindows(bnum){{{2
-"[[STOLEN FROM VTREEEXPLORER.VIM]]
-"Determine the number of windows open to this buffer number.
-"Care of Yegappan Lakshman. Thanks!
-"
-"Args:
-"bnum: the subject buffers buffer number
-function! s:bufInWindows(bnum)
- let cnt = 0
- let winnum = 1
- while 1
- let bufnum = winbufnr(winnum)
- if bufnum < 0
- break
- endif
- if bufnum ==# a:bnum
- let cnt = cnt + 1
- endif
- let winnum = winnum + 1
- endwhile
-
- return cnt
-endfunction " >>>
-"FUNCTION: s:checkForBrowse(dir) {{{2
-"inits a secondary nerd tree in the current buffer if appropriate
-function! s:checkForBrowse(dir)
- if a:dir != '' && isdirectory(a:dir)
- call s:initNerdTreeInPlace(a:dir)
- endif
-endfunction
-"FUNCTION: s:compareBookmarks(first, second) {{{2
-"Compares two bookmarks
-function! s:compareBookmarks(first, second)
- return a:first.compareTo(a:second)
-endfunction
-
-" FUNCTION: s:completeBookmarks(A,L,P) {{{2
-" completion function for the bookmark commands
-function! s:completeBookmarks(A,L,P)
- return filter(s:Bookmark.BookmarkNames(), 'v:val =~ "^' . a:A . '"')
-endfunction
-" FUNCTION: s:exec(cmd) {{{2
-" same as :exec cmd but eventignore=all is set for the duration
-function! s:exec(cmd)
- let old_ei = &ei
- set ei=all
- exec a:cmd
- let &ei = old_ei
-endfunction
-" FUNCTION: s:findAndRevealPath() {{{2
-function! s:findAndRevealPath()
- try
- let p = s:Path.New(expand("%"))
- catch /^NERDTree.InvalidArgumentsError/
- call s:echo("no file for the current buffer")
- return
- endtry
-
- if !s:treeExistsForTab()
- call s:initNerdTree(p.getParent().str())
- else
- if !p.isUnder(s:TreeFileNode.GetRootForTab().path)
- call s:initNerdTree(p.getParent().str())
- else
- if !s:isTreeOpen()
- call s:toggle("")
- endif
- endif
- endif
- call s:putCursorInTreeWin()
- call b:NERDTreeRoot.reveal(p)
-endfunction
-"FUNCTION: s:initNerdTree(name) {{{2
-"Initialise the nerd tree for this tab. The tree will start in either the
-"given directory, or the directory associated with the given bookmark
-"
-"Args:
-"name: the name of a bookmark or a directory
-function! s:initNerdTree(name)
- let path = {}
- if s:Bookmark.BookmarkExistsFor(a:name)
- let path = s:Bookmark.BookmarkFor(a:name).path
- else
- let dir = a:name ==# '' ? getcwd() : a:name
-
- "hack to get an absolute path if a relative path is given
- if dir =~ '^\.'
- let dir = getcwd() . s:Path.Slash() . dir
- endif
- let dir = resolve(dir)
-
- try
- let path = s:Path.New(dir)
- catch /^NERDTree.InvalidArgumentsError/
- call s:echo("No bookmark or directory found for: " . a:name)
- return
- endtry
- endif
- if !path.isDirectory
- let path = path.getParent()
- endif
-
- "if instructed to, then change the vim CWD to the dir the NERDTree is
- "inited in
- if g:NERDTreeChDirMode != 0
- call path.changeToDir()
- endif
-
- if s:treeExistsForTab()
- if s:isTreeOpen()
- call s:closeTree()
- endif
- unlet t:NERDTreeBufName
- endif
-
- let newRoot = s:TreeDirNode.New(path)
- call newRoot.open()
-
- call s:createTreeWin()
- let b:treeShowHelp = 0
- let b:NERDTreeIgnoreEnabled = 1
- let b:NERDTreeShowFiles = g:NERDTreeShowFiles
- let b:NERDTreeShowHidden = g:NERDTreeShowHidden
- let b:NERDTreeShowBookmarks = g:NERDTreeShowBookmarks
- let b:NERDTreeRoot = newRoot
-
- let b:NERDTreeType = "primary"
-
- call s:renderView()
- call b:NERDTreeRoot.putCursorHere(0, 0)
-endfunction
-
-"FUNCTION: s:initNerdTreeInPlace(dir) {{{2
-function! s:initNerdTreeInPlace(dir)
- try
- let path = s:Path.New(a:dir)
- catch /^NERDTree.InvalidArgumentsError/
- call s:echo("Invalid directory name:" . a:name)
- return
- endtry
-
- "we want the directory buffer to disappear when we do the :edit below
- setlocal bufhidden=wipe
-
- let previousBuf = expand("#")
-
- "we need a unique name for each secondary tree buffer to ensure they are
- "all independent
- exec "silent edit " . s:nextBufferName()
-
- let b:NERDTreePreviousBuf = bufnr(previousBuf)
-
- let b:NERDTreeRoot = s:TreeDirNode.New(path)
- call b:NERDTreeRoot.open()
-
- "throwaway buffer options
- setlocal noswapfile
- setlocal buftype=nofile
- setlocal bufhidden=hide
- setlocal nowrap
- setlocal foldcolumn=0
- setlocal nobuflisted
- setlocal nospell
- if g:NERDTreeShowLineNumbers
- setlocal nu
- else
- setlocal nonu
- endif
-
- iabc <buffer>
-
- if g:NERDTreeHighlightCursorline
- setlocal cursorline
- endif
-
- call s:setupStatusline()
-
- let b:treeShowHelp = 0
- let b:NERDTreeIgnoreEnabled = 1
- let b:NERDTreeShowFiles = g:NERDTreeShowFiles
- let b:NERDTreeShowHidden = g:NERDTreeShowHidden
- let b:NERDTreeShowBookmarks = g:NERDTreeShowBookmarks
-
- let b:NERDTreeType = "secondary"
-
- call s:bindMappings()
- setfiletype nerdtree
- " syntax highlighting
- if has("syntax") && exists("g:syntax_on")
- call s:setupSyntaxHighlighting()
- endif
-
- call s:renderView()
-endfunction
-" FUNCTION: s:initNerdTreeMirror() {{{2
-function! s:initNerdTreeMirror()
-
- "get the names off all the nerd tree buffers
- let treeBufNames = []
- for i in range(1, tabpagenr("$"))
- let nextName = s:tabpagevar(i, 'NERDTreeBufName')
- if nextName != -1 && (!exists("t:NERDTreeBufName") || nextName != t:NERDTreeBufName)
- call add(treeBufNames, nextName)
- endif
- endfor
- let treeBufNames = s:unique(treeBufNames)
-
- "map the option names (that the user will be prompted with) to the nerd
- "tree buffer names
- let options = {}
- let i = 0
- while i < len(treeBufNames)
- let bufName = treeBufNames[i]
- let treeRoot = getbufvar(bufName, "NERDTreeRoot")
- let options[i+1 . '. ' . treeRoot.path.str() . ' (buf name: ' . bufName . ')'] = bufName
- let i = i + 1
- endwhile
-
- "work out which tree to mirror, if there is more than 1 then ask the user
- let bufferName = ''
- if len(keys(options)) > 1
- let choices = ["Choose a tree to mirror"]
- let choices = extend(choices, sort(keys(options)))
- let choice = inputlist(choices)
- if choice < 1 || choice > len(options) || choice ==# ''
- return
- endif
-
- let bufferName = options[sort(keys(options))[choice-1]]
- elseif len(keys(options)) ==# 1
- let bufferName = values(options)[0]
- else
- call s:echo("No trees to mirror")
- return
- endif
-
- if s:treeExistsForTab() && s:isTreeOpen()
- call s:closeTree()
- endif
-
- let t:NERDTreeBufName = bufferName
- call s:createTreeWin()
- exec 'buffer ' . bufferName
- if !&hidden
- call s:renderView()
- endif
-endfunction
-" FUNCTION: s:nextBufferName() {{{2
-" returns the buffer name for the next nerd tree
-function! s:nextBufferName()
- let name = s:NERDTreeBufName . s:next_buffer_number
- let s:next_buffer_number += 1
- return name
-endfunction
-" FUNCTION: s:tabpagevar(tabnr, var) {{{2
-function! s:tabpagevar(tabnr, var)
- let currentTab = tabpagenr()
- let old_ei = &ei
- set ei=all
-
- exec "tabnext " . a:tabnr
- let v = -1
- if exists('t:' . a:var)
- exec 'let v = t:' . a:var
- endif
- exec "tabnext " . currentTab
-
- let &ei = old_ei
-
- return v
-endfunction
-" Function: s:treeExistsForBuffer() {{{2
-" Returns 1 if a nerd tree root exists in the current buffer
-function! s:treeExistsForBuf()
- return exists("b:NERDTreeRoot")
-endfunction
-" Function: s:treeExistsForTab() {{{2
-" Returns 1 if a nerd tree root exists in the current tab
-function! s:treeExistsForTab()
- return exists("t:NERDTreeBufName")
-endfunction
-" Function: s:unique(list) {{{2
-" returns a:list without duplicates
-function! s:unique(list)
- let uniqlist = []
- for elem in a:list
- if index(uniqlist, elem) ==# -1
- let uniqlist += [elem]
- endif
- endfor
- return uniqlist
-endfunction
-" SECTION: Public API {{{1
-"============================================================
-let g:NERDTreePath = s:Path
-let g:NERDTreeDirNode = s:TreeDirNode
-let g:NERDTreeFileNode = s:TreeFileNode
-let g:NERDTreeBookmark = s:Bookmark
-
-function! NERDTreeAddMenuItem(options)
- call s:MenuItem.Create(a:options)
-endfunction
-
-function! NERDTreeAddMenuSeparator(...)
- let opts = a:0 ? a:1 : {}
- call s:MenuItem.CreateSeparator(opts)
-endfunction
-
-function! NERDTreeAddSubmenu(options)
- return s:MenuItem.Create(a:options)
-endfunction
-
-function! NERDTreeAddKeyMap(options)
- call s:KeyMap.Create(a:options)
-endfunction
-
-function! NERDTreeRender()
- call s:renderView()
-endfunction
-
-" SECTION: View Functions {{{1
-"============================================================
-"FUNCTION: s:centerView() {{{2
-"centers the nerd tree window around the cursor (provided the nerd tree
-"options permit)
-function! s:centerView()
- if g:NERDTreeAutoCenter
- let current_line = winline()
- let lines_to_top = current_line
- let lines_to_bottom = winheight(s:getTreeWinNum()) - current_line
- if lines_to_top < g:NERDTreeAutoCenterThreshold || lines_to_bottom < g:NERDTreeAutoCenterThreshold
- normal! zz
- endif
- endif
-endfunction
-"FUNCTION: s:closeTree() {{{2
-"Closes the primary NERD tree window for this tab
-function! s:closeTree()
- if !s:isTreeOpen()
- throw "NERDTree.NoTreeFoundError: no NERDTree is open"
- endif
-
- if winnr("$") != 1
- call s:exec(s:getTreeWinNum() . " wincmd w")
- close
- call s:exec("wincmd p")
- else
- close
- endif
-endfunction
-
-"FUNCTION: s:closeTreeIfOpen() {{{2
-"Closes the NERD tree window if it is open
-function! s:closeTreeIfOpen()
- if s:isTreeOpen()
- call s:closeTree()
- endif
-endfunction
-"FUNCTION: s:closeTreeIfQuitOnOpen() {{{2
-"Closes the NERD tree window if the close on open option is set
-function! s:closeTreeIfQuitOnOpen()
- if g:NERDTreeQuitOnOpen && s:isTreeOpen()
- call s:closeTree()
- endif
-endfunction
-"FUNCTION: s:createTreeWin() {{{2
-"Inits the NERD tree window. ie. opens it, sizes it, sets all the local
-"options etc
-function! s:createTreeWin()
- "create the nerd tree window
- let splitLocation = g:NERDTreeWinPos ==# "left" ? "topleft " : "botright "
- let splitSize = g:NERDTreeWinSize
-
- if !exists('t:NERDTreeBufName')
- let t:NERDTreeBufName = s:nextBufferName()
- silent! exec splitLocation . 'vertical ' . splitSize . ' new'
- silent! exec "edit " . t:NERDTreeBufName
- else
- silent! exec splitLocation . 'vertical ' . splitSize . ' split'
- silent! exec "buffer " . t:NERDTreeBufName
- endif
-
- setlocal winfixwidth
-
- "throwaway buffer options
- setlocal noswapfile
- setlocal buftype=nofile
- setlocal nowrap
- setlocal foldcolumn=0
- setlocal nobuflisted
- setlocal nospell
- if g:NERDTreeShowLineNumbers
- setlocal nu
- else
- setlocal nonu
- endif
-
- iabc <buffer>
-
- if g:NERDTreeHighlightCursorline
- setlocal cursorline
- endif
-
- call s:setupStatusline()
-
- call s:bindMappings()
- setfiletype nerdtree
- " syntax highlighting
- if has("syntax") && exists("g:syntax_on")
- call s:setupSyntaxHighlighting()
- endif
-endfunction
-
-"FUNCTION: s:dumpHelp {{{2
-"prints out the quick help
-function! s:dumpHelp()
- let old_h = @h
- if b:treeShowHelp ==# 1
- let @h= "\" NERD tree (" . s:NERD_tree_version . ") quickhelp~\n"
- let @h=@h."\" ============================\n"
- let @h=@h."\" File node mappings~\n"
- let @h=@h."\" ". (g:NERDTreeMouseMode ==# 3 ? "single" : "double") ."-click,\n"
- let @h=@h."\" <CR>,\n"
- if b:NERDTreeType ==# "primary"
- let @h=@h."\" ". g:NERDTreeMapActivateNode .": open in prev window\n"
- else
- let @h=@h."\" ". g:NERDTreeMapActivateNode .": open in current window\n"
- endif
- if b:NERDTreeType ==# "primary"
- let @h=@h."\" ". g:NERDTreeMapPreview .": preview\n"
- endif
- let @h=@h."\" ". g:NERDTreeMapOpenInTab.": open in new tab\n"
- let @h=@h."\" ". g:NERDTreeMapOpenInTabSilent .": open in new tab silently\n"
- let @h=@h."\" middle-click,\n"
- let @h=@h."\" ". g:NERDTreeMapOpenSplit .": open split\n"
- let @h=@h."\" ". g:NERDTreeMapPreviewSplit .": preview split\n"
- let @h=@h."\" ". g:NERDTreeMapOpenVSplit .": open vsplit\n"
- let @h=@h."\" ". g:NERDTreeMapPreviewVSplit .": preview vsplit\n"
-
- let @h=@h."\"\n\" ----------------------------\n"
- let @h=@h."\" Directory node mappings~\n"
- let @h=@h."\" ". (g:NERDTreeMouseMode ==# 1 ? "double" : "single") ."-click,\n"
- let @h=@h."\" ". g:NERDTreeMapActivateNode .": open & close node\n"
- let @h=@h."\" ". g:NERDTreeMapOpenRecursively .": recursively open node\n"
- let @h=@h."\" ". g:NERDTreeMapCloseDir .": close parent of node\n"
- let @h=@h."\" ". g:NERDTreeMapCloseChildren .": close all child nodes of\n"
- let @h=@h."\" current node recursively\n"
- let @h=@h."\" middle-click,\n"
- let @h=@h."\" ". g:NERDTreeMapOpenExpl.": explore selected dir\n"
-
- let @h=@h."\"\n\" ----------------------------\n"
- let @h=@h."\" Bookmark table mappings~\n"
- let @h=@h."\" double-click,\n"
- let @h=@h."\" ". g:NERDTreeMapActivateNode .": open bookmark\n"
- let @h=@h."\" ". g:NERDTreeMapOpenInTab.": open in new tab\n"
- let @h=@h."\" ". g:NERDTreeMapOpenInTabSilent .": open in new tab silently\n"
- let @h=@h."\" ". g:NERDTreeMapDeleteBookmark .": delete bookmark\n"
-
- let @h=@h."\"\n\" ----------------------------\n"
- let @h=@h."\" Tree navigation mappings~\n"
- let @h=@h."\" ". g:NERDTreeMapJumpRoot .": go to root\n"
- let @h=@h."\" ". g:NERDTreeMapJumpParent .": go to parent\n"
- let @h=@h."\" ". g:NERDTreeMapJumpFirstChild .": go to first child\n"
- let @h=@h."\" ". g:NERDTreeMapJumpLastChild .": go to last child\n"
- let @h=@h."\" ". g:NERDTreeMapJumpNextSibling .": go to next sibling\n"
- let @h=@h."\" ". g:NERDTreeMapJumpPrevSibling .": go to prev sibling\n"
-
- let @h=@h."\"\n\" ----------------------------\n"
- let @h=@h."\" Filesystem mappings~\n"
- let @h=@h."\" ". g:NERDTreeMapChangeRoot .": change tree root to the\n"
- let @h=@h."\" selected dir\n"
- let @h=@h."\" ". g:NERDTreeMapUpdir .": move tree root up a dir\n"
- let @h=@h."\" ". g:NERDTreeMapUpdirKeepOpen .": move tree root up a dir\n"
- let @h=@h."\" but leave old root open\n"
- let @h=@h."\" ". g:NERDTreeMapRefresh .": refresh cursor dir\n"
- let @h=@h."\" ". g:NERDTreeMapRefreshRoot .": refresh current root\n"
- let @h=@h."\" ". g:NERDTreeMapMenu .": Show menu\n"
- let @h=@h."\" ". g:NERDTreeMapChdir .":change the CWD to the\n"
- let @h=@h."\" selected dir\n"
-
- let @h=@h."\"\n\" ----------------------------\n"
- let @h=@h."\" Tree filtering mappings~\n"
- let @h=@h."\" ". g:NERDTreeMapToggleHidden .": hidden files (" . (b:NERDTreeShowHidden ? "on" : "off") . ")\n"
- let @h=@h."\" ". g:NERDTreeMapToggleFilters .": file filters (" . (b:NERDTreeIgnoreEnabled ? "on" : "off") . ")\n"
- let @h=@h."\" ". g:NERDTreeMapToggleFiles .": files (" . (b:NERDTreeShowFiles ? "on" : "off") . ")\n"
- let @h=@h."\" ". g:NERDTreeMapToggleBookmarks .": bookmarks (" . (b:NERDTreeShowBookmarks ? "on" : "off") . ")\n"
-
- "add quickhelp entries for each custom key map
- if len(s:KeyMap.All())
- let @h=@h."\"\n\" ----------------------------\n"
- let @h=@h."\" Custom mappings~\n"
- for i in s:KeyMap.All()
- let @h=@h."\" ". i.key .": ". i.quickhelpText ."\n"
- endfor
- endif
-
- let @h=@h."\"\n\" ----------------------------\n"
- let @h=@h."\" Other mappings~\n"
- let @h=@h."\" ". g:NERDTreeMapQuit .": Close the NERDTree window\n"
- let @h=@h."\" ". g:NERDTreeMapToggleZoom .": Zoom (maximize-minimize)\n"
- let @h=@h."\" the NERDTree window\n"
- let @h=@h."\" ". g:NERDTreeMapHelp .": toggle help\n"
- let @h=@h."\"\n\" ----------------------------\n"
- let @h=@h."\" Bookmark commands~\n"
- let @h=@h."\" :Bookmark <name>\n"
- let @h=@h."\" :BookmarkToRoot <name>\n"
- let @h=@h."\" :RevealBookmark <name>\n"
- let @h=@h."\" :OpenBookmark <name>\n"
- let @h=@h."\" :ClearBookmarks [<names>]\n"
- let @h=@h."\" :ClearAllBookmarks\n"
- else
- let @h="\" Press ". g:NERDTreeMapHelp ." for help\n"
- endif
-
- silent! put h
-
- let @h = old_h
-endfunction
-"FUNCTION: s:echo {{{2
-"A wrapper for :echo. Appends 'NERDTree:' on the front of all messages
-"
-"Args:
-"msg: the message to echo
-function! s:echo(msg)
- redraw
- echomsg "NERDTree: " . a:msg
-endfunction
-"FUNCTION: s:echoWarning {{{2
-"Wrapper for s:echo, sets the message type to warningmsg for this message
-"Args:
-"msg: the message to echo
-function! s:echoWarning(msg)
- echohl warningmsg
- call s:echo(a:msg)
- echohl normal
-endfunction
-"FUNCTION: s:echoError {{{2
-"Wrapper for s:echo, sets the message type to errormsg for this message
-"Args:
-"msg: the message to echo
-function! s:echoError(msg)
- echohl errormsg
- call s:echo(a:msg)
- echohl normal
-endfunction
-"FUNCTION: s:firstUsableWindow(){{{2
-"find the window number of the first normal window
-function! s:firstUsableWindow()
- let i = 1
- while i <= winnr("$")
- let bnum = winbufnr(i)
- if bnum != -1 && getbufvar(bnum, '&buftype') ==# ''
- \ && !getwinvar(i, '&previewwindow')
- \ && (!getbufvar(bnum, '&modified') || &hidden)
- return i
- endif
-
- let i += 1
- endwhile
- return -1
-endfunction
-"FUNCTION: s:getPath(ln) {{{2
-"Gets the full path to the node that is rendered on the given line number
-"
-"Args:
-"ln: the line number to get the path for
-"
-"Return:
-"A path if a node was selected, {} if nothing is selected.
-"If the 'up a dir' line was selected then the path to the parent of the
-"current root is returned
-function! s:getPath(ln)
- let line = getline(a:ln)
-
- let rootLine = s:TreeFileNode.GetRootLineNum()
-
- "check to see if we have the root node
- if a:ln == rootLine
- return b:NERDTreeRoot.path
- endif
-
- " in case called from outside the tree
- if line !~ '^ *[|`]' || line =~ '^$'
- return {}
- endif
-
- if line ==# s:tree_up_dir_line
- return b:NERDTreeRoot.path.getParent()
- endif
-
- let indent = s:indentLevelFor(line)
-
- "remove the tree parts and the leading space
- let curFile = s:stripMarkupFromLine(line, 0)
-
- let wasdir = 0
- if curFile =~ '/$'
- let wasdir = 1
- let curFile = substitute(curFile, '/\?$', '/', "")
- endif
-
- let dir = ""
- let lnum = a:ln
- while lnum > 0
- let lnum = lnum - 1
- let curLine = getline(lnum)
- let curLineStripped = s:stripMarkupFromLine(curLine, 1)
-
- "have we reached the top of the tree?
- if lnum == rootLine
- let dir = b:NERDTreeRoot.path.str({'format': 'UI'}) . dir
- break
- endif
- if curLineStripped =~ '/$'
- let lpindent = s:indentLevelFor(curLine)
- if lpindent < indent
- let indent = indent - 1
-
- let dir = substitute (curLineStripped,'^\\', "", "") . dir
- continue
- endif
- endif
- endwhile
- let curFile = b:NERDTreeRoot.path.drive . dir . curFile
- let toReturn = s:Path.New(curFile)
- return toReturn
-endfunction
-
-"FUNCTION: s:getTreeWinNum() {{{2
-"gets the nerd tree window number for this tab
-function! s:getTreeWinNum()
- if exists("t:NERDTreeBufName")
- return bufwinnr(t:NERDTreeBufName)
- else
- return -1
- endif
-endfunction
-"FUNCTION: s:indentLevelFor(line) {{{2
-function! s:indentLevelFor(line)
- return match(a:line, '[^ \-+~`|]') / s:tree_wid
-endfunction
-"FUNCTION: s:isTreeOpen() {{{2
-function! s:isTreeOpen()
- return s:getTreeWinNum() != -1
-endfunction
-"FUNCTION: s:isWindowUsable(winnumber) {{{2
-"Returns 0 if opening a file from the tree in the given window requires it to
-"be split, 1 otherwise
-"
-"Args:
-"winnumber: the number of the window in question
-function! s:isWindowUsable(winnumber)
- "gotta split if theres only one window (i.e. the NERD tree)
- if winnr("$") ==# 1
- return 0
- endif
-
- let oldwinnr = winnr()
- call s:exec(a:winnumber . "wincmd p")
- let specialWindow = getbufvar("%", '&buftype') != '' || getwinvar('%', '&previewwindow')
- let modified = &modified
- call s:exec(oldwinnr . "wincmd p")
-
- "if its a special window e.g. quickfix or another explorer plugin then we
- "have to split
- if specialWindow
- return 0
- endif
-
- if &hidden
- return 1
- endif
-
- return !modified || s:bufInWindows(winbufnr(a:winnumber)) >= 2
-endfunction
-
-" FUNCTION: s:jumpToChild(direction) {{{2
-" Args:
-" direction: 0 if going to first child, 1 if going to last
-function! s:jumpToChild(direction)
- let currentNode = s:TreeFileNode.GetSelected()
- if currentNode ==# {} || currentNode.isRoot()
- call s:echo("cannot jump to " . (a:direction ? "last" : "first") . " child")
- return
- end
- let dirNode = currentNode.parent
- let childNodes = dirNode.getVisibleChildren()
-
- let targetNode = childNodes[0]
- if a:direction
- let targetNode = childNodes[len(childNodes) - 1]
- endif
-
- if targetNode.equals(currentNode)
- let siblingDir = currentNode.parent.findOpenDirSiblingWithVisibleChildren(a:direction)
- if siblingDir != {}
- let indx = a:direction ? siblingDir.getVisibleChildCount()-1 : 0
- let targetNode = siblingDir.getChildByIndex(indx, 1)
- endif
- endif
-
- call targetNode.putCursorHere(1, 0)
-
- call s:centerView()
-endfunction
-
-
-"FUNCTION: s:promptToDelBuffer(bufnum, msg){{{2
-"prints out the given msg and, if the user responds by pushing 'y' then the
-"buffer with the given bufnum is deleted
-"
-"Args:
-"bufnum: the buffer that may be deleted
-"msg: a message that will be echoed to the user asking them if they wish to
-" del the buffer
-function! s:promptToDelBuffer(bufnum, msg)
- echo a:msg
- if nr2char(getchar()) ==# 'y'
- exec "silent bdelete! " . a:bufnum
- endif
-endfunction
-
-"FUNCTION: s:putCursorOnBookmarkTable(){{{2
-"Places the cursor at the top of the bookmarks table
-function! s:putCursorOnBookmarkTable()
- if !b:NERDTreeShowBookmarks
- throw "NERDTree.IllegalOperationError: cant find bookmark table, bookmarks arent active"
- endif
-
- let rootNodeLine = s:TreeFileNode.GetRootLineNum()
-
- let line = 1
- while getline(line) !~ '^>-\+Bookmarks-\+$'
- let line = line + 1
- if line >= rootNodeLine
- throw "NERDTree.BookmarkTableNotFoundError: didnt find the bookmarks table"
- endif
- endwhile
- call cursor(line, 0)
-endfunction
-
-"FUNCTION: s:putCursorInTreeWin(){{{2
-"Places the cursor in the nerd tree window
-function! s:putCursorInTreeWin()
- if !s:isTreeOpen()
- throw "NERDTree.InvalidOperationError: cant put cursor in NERD tree window, no window exists"
- endif
-
- call s:exec(s:getTreeWinNum() . "wincmd w")
-endfunction
-
-"FUNCTION: s:renderBookmarks {{{2
-function! s:renderBookmarks()
-
- call setline(line(".")+1, ">----------Bookmarks----------")
- call cursor(line(".")+1, col("."))
-
- for i in s:Bookmark.Bookmarks()
- call setline(line(".")+1, i.str())
- call cursor(line(".")+1, col("."))
- endfor
-
- call setline(line(".")+1, '')
- call cursor(line(".")+1, col("."))
-endfunction
-"FUNCTION: s:renderView {{{2
-"The entry function for rendering the tree
-function! s:renderView()
- setlocal modifiable
-
- "remember the top line of the buffer and the current line so we can
- "restore the view exactly how it was
- let curLine = line(".")
- let curCol = col(".")
- let topLine = line("w0")
-
- "delete all lines in the buffer (being careful not to clobber a register)
- silent 1,$delete _
-
- call s:dumpHelp()
-
- "delete the blank line before the help and add one after it
- call setline(line(".")+1, "")
- call cursor(line(".")+1, col("."))
-
- if b:NERDTreeShowBookmarks
- call s:renderBookmarks()
- endif
-
- "add the 'up a dir' line
- call setline(line(".")+1, s:tree_up_dir_line)
- call cursor(line(".")+1, col("."))
-
- "draw the header line
- let header = b:NERDTreeRoot.path.str({'format': 'UI', 'truncateTo': winwidth(0)})
- call setline(line(".")+1, header)
- call cursor(line(".")+1, col("."))
-
- "draw the tree
- let old_o = @o
- let @o = b:NERDTreeRoot.renderToString()
- silent put o
- let @o = old_o
-
- "delete the blank line at the top of the buffer
- silent 1,1delete _
-
- "restore the view
- let old_scrolloff=&scrolloff
- let &scrolloff=0
- call cursor(topLine, 1)
- normal! zt
- call cursor(curLine, curCol)
- let &scrolloff = old_scrolloff
-
- setlocal nomodifiable
-endfunction
-
-"FUNCTION: s:renderViewSavingPosition {{{2
-"Renders the tree and ensures the cursor stays on the current node or the
-"current nodes parent if it is no longer available upon re-rendering
-function! s:renderViewSavingPosition()
- let currentNode = s:TreeFileNode.GetSelected()
-
- "go up the tree till we find a node that will be visible or till we run
- "out of nodes
- while currentNode != {} && !currentNode.isVisible() && !currentNode.isRoot()
- let currentNode = currentNode.parent
- endwhile
-
- call s:renderView()
-
- if currentNode != {}
- call currentNode.putCursorHere(0, 0)
- endif
-endfunction
-"FUNCTION: s:restoreScreenState() {{{2
-"
-"Sets the screen state back to what it was when s:saveScreenState was last
-"called.
-"
-"Assumes the cursor is in the NERDTree window
-function! s:restoreScreenState()
- if !exists("b:NERDTreeOldTopLine") || !exists("b:NERDTreeOldPos") || !exists("b:NERDTreeOldWindowSize")
- return
- endif
- exec("silent vertical resize ".b:NERDTreeOldWindowSize)
-
- let old_scrolloff=&scrolloff
- let &scrolloff=0
- call cursor(b:NERDTreeOldTopLine, 0)
- normal! zt
- call setpos(".", b:NERDTreeOldPos)
- let &scrolloff=old_scrolloff
-endfunction
-
-"FUNCTION: s:saveScreenState() {{{2
-"Saves the current cursor position in the current buffer and the window
-"scroll position
-function! s:saveScreenState()
- let win = winnr()
- try
- call s:putCursorInTreeWin()
- let b:NERDTreeOldPos = getpos(".")
- let b:NERDTreeOldTopLine = line("w0")
- let b:NERDTreeOldWindowSize = winwidth("")
- call s:exec(win . "wincmd w")
- catch /^NERDTree.InvalidOperationError/
- endtry
-endfunction
-
-"FUNCTION: s:setupStatusline() {{{2
-function! s:setupStatusline()
- if g:NERDTreeStatusline != -1
- let &l:statusline = g:NERDTreeStatusline
- endif
-endfunction
-"FUNCTION: s:setupSyntaxHighlighting() {{{2
-function! s:setupSyntaxHighlighting()
- "treeFlags are syntax items that should be invisible, but give clues as to
- "how things should be highlighted
- syn match treeFlag #\~#
- syn match treeFlag #\[RO\]#
-
- "highlighting for the .. (up dir) line at the top of the tree
- execute "syn match treeUp #". s:tree_up_dir_line ."#"
-
- "highlighting for the ~/+ symbols for the directory nodes
- syn match treeClosable #\~\<#
- syn match treeClosable #\~\.#
- syn match treeOpenable #+\<#
- syn match treeOpenable #+\.#he=e-1
-
- "highlighting for the tree structural parts
- syn match treePart #|#
- syn match treePart #`#
- syn match treePartFile #[|`]-#hs=s+1 contains=treePart
-
- "quickhelp syntax elements
- syn match treeHelpKey #" \{1,2\}[^ ]*:#hs=s+2,he=e-1
- syn match treeHelpKey #" \{1,2\}[^ ]*,#hs=s+2,he=e-1
- syn match treeHelpTitle #" .*\~#hs=s+2,he=e-1 contains=treeFlag
- syn match treeToggleOn #".*(on)#hs=e-2,he=e-1 contains=treeHelpKey
- syn match treeToggleOff #".*(off)#hs=e-3,he=e-1 contains=treeHelpKey
- syn match treeHelpCommand #" :.\{-}\>#hs=s+3
- syn match treeHelp #^".*# contains=treeHelpKey,treeHelpTitle,treeFlag,treeToggleOff,treeToggleOn,treeHelpCommand
-
- "highlighting for readonly files
- syn match treeRO #.*\[RO\]#hs=s+2 contains=treeFlag,treeBookmark,treePart,treePartFile
-
- "highlighting for sym links
- syn match treeLink #[^-| `].* -> # contains=treeBookmark,treeOpenable,treeClosable,treeDirSlash
-
- "highlighing for directory nodes and file nodes
- syn match treeDirSlash #/#
- syn match treeDir #[^-| `].*/# contains=treeLink,treeDirSlash,treeOpenable,treeClosable
- syn match treeExecFile #[|`]-.*\*\($\| \)# contains=treeLink,treePart,treeRO,treePartFile,treeBookmark
- syn match treeFile #|-.*# contains=treeLink,treePart,treeRO,treePartFile,treeBookmark,treeExecFile
- syn match treeFile #`-.*# contains=treeLink,treePart,treeRO,treePartFile,treeBookmark,treeExecFile
- syn match treeCWD #^/.*$#
-
- "highlighting for bookmarks
- syn match treeBookmark # {.*}#hs=s+1
-
- "highlighting for the bookmarks table
- syn match treeBookmarksLeader #^>#
- syn match treeBookmarksHeader #^>-\+Bookmarks-\+$# contains=treeBookmarksLeader
- syn match treeBookmarkName #^>.\{-} #he=e-1 contains=treeBookmarksLeader
- syn match treeBookmark #^>.*$# contains=treeBookmarksLeader,treeBookmarkName,treeBookmarksHeader
-
- if g:NERDChristmasTree
- hi def link treePart Special
- hi def link treePartFile Type
- hi def link treeFile Normal
- hi def link treeExecFile Title
- hi def link treeDirSlash Identifier
- hi def link treeClosable Type
- else
- hi def link treePart Normal
- hi def link treePartFile Normal
- hi def link treeFile Normal
- hi def link treeClosable Title
- endif
-
- hi def link treeBookmarksHeader statement
- hi def link treeBookmarksLeader ignore
- hi def link treeBookmarkName Identifier
- hi def link treeBookmark normal
-
- hi def link treeHelp String
- hi def link treeHelpKey Identifier
- hi def link treeHelpCommand Identifier
- hi def link treeHelpTitle Macro
- hi def link treeToggleOn Question
- hi def link treeToggleOff WarningMsg
-
- hi def link treeDir Directory
- hi def link treeUp Directory
- hi def link treeCWD Statement
- hi def link treeLink Macro
- hi def link treeOpenable Title
- hi def link treeFlag ignore
- hi def link treeRO WarningMsg
- hi def link treeBookmark Statement
-
- hi def link NERDTreeCurrentNode Search
-endfunction
-
-"FUNCTION: s:stripMarkupFromLine(line, removeLeadingSpaces){{{2
-"returns the given line with all the tree parts stripped off
-"
-"Args:
-"line: the subject line
-"removeLeadingSpaces: 1 if leading spaces are to be removed (leading spaces =
-"any spaces before the actual text of the node)
-function! s:stripMarkupFromLine(line, removeLeadingSpaces)
- let line = a:line
- "remove the tree parts and the leading space
- let line = substitute (line, s:tree_markup_reg,"","")
-
- "strip off any read only flag
- let line = substitute (line, ' \[RO\]', "","")
-
- "strip off any bookmark flags
- let line = substitute (line, ' {[^}]*}', "","")
-
- "strip off any executable flags
- let line = substitute (line, '*\ze\($\| \)', "","")
-
- let wasdir = 0
- if line =~ '/$'
- let wasdir = 1
- endif
- let line = substitute (line,' -> .*',"","") " remove link to
- if wasdir ==# 1
- let line = substitute (line, '/\?$', '/', "")
- endif
-
- if a:removeLeadingSpaces
- let line = substitute (line, '^ *', '', '')
- endif
-
- return line
-endfunction
-
-"FUNCTION: s:toggle(dir) {{{2
-"Toggles the NERD tree. I.e the NERD tree is open, it is closed, if it is
-"closed it is restored or initialized (if it doesnt exist)
-"
-"Args:
-"dir: the full path for the root node (is only used if the NERD tree is being
-"initialized.
-function! s:toggle(dir)
- if s:treeExistsForTab()
- if !s:isTreeOpen()
- call s:createTreeWin()
- if !&hidden
- call s:renderView()
- endif
- call s:restoreScreenState()
- else
- call s:closeTree()
- endif
- else
- call s:initNerdTree(a:dir)
- endif
-endfunction
-"SECTION: Interface bindings {{{1
-"============================================================
-"FUNCTION: s:activateNode(forceKeepWindowOpen) {{{2
-"If the current node is a file, open it in the previous window (or a new one
-"if the previous is modified). If it is a directory then it is opened.
-"
-"args:
-"forceKeepWindowOpen - dont close the window even if NERDTreeQuitOnOpen is set
-function! s:activateNode(forceKeepWindowOpen)
- if getline(".") ==# s:tree_up_dir_line
- return s:upDir(0)
- endif
-
- let treenode = s:TreeFileNode.GetSelected()
- if treenode != {}
- call treenode.activate(a:forceKeepWindowOpen)
- else
- let bookmark = s:Bookmark.GetSelected()
- if !empty(bookmark)
- call bookmark.activate()
- endif
- endif
-endfunction
-
-"FUNCTION: s:bindMappings() {{{2
-function! s:bindMappings()
- " set up mappings and commands for this buffer
- nnoremap <silent> <buffer> <middlerelease> :call <SID>handleMiddleMouse()<cr>
- nnoremap <silent> <buffer> <leftrelease> <leftrelease>:call <SID>checkForActivate()<cr>
- nnoremap <silent> <buffer> <2-leftmouse> :call <SID>activateNode(0)<cr>
-
- exec "nnoremap <silent> <buffer> ". g:NERDTreeMapActivateNode . " :call <SID>activateNode(0)<cr>"
- exec "nnoremap <silent> <buffer> ". g:NERDTreeMapOpenSplit ." :call <SID>openEntrySplit(0,0)<cr>"
- exec "nnoremap <silent> <buffer> <cr> :call <SID>activateNode(0)<cr>"
-
- exec "nnoremap <silent> <buffer> ". g:NERDTreeMapPreview ." :call <SID>previewNode(0)<cr>"
- exec "nnoremap <silent> <buffer> ". g:NERDTreeMapPreviewSplit ." :call <SID>previewNode(1)<cr>"
-
- exec "nnoremap <silent> <buffer> ". g:NERDTreeMapOpenVSplit ." :call <SID>openEntrySplit(1,0)<cr>"
- exec "nnoremap <silent> <buffer> ". g:NERDTreeMapPreviewVSplit ." :call <SID>previewNode(2)<cr>"
-
- exec "nnoremap <silent> <buffer> ". g:NERDTreeMapOpenRecursively ." :call <SID>openNodeRecursively()<cr>"
-
- exec "nnoremap <silent> <buffer> ". g:NERDTreeMapUpdirKeepOpen ." :call <SID>upDir(1)<cr>"
- exec "nnoremap <silent> <buffer> ". g:NERDTreeMapUpdir ." :call <SID>upDir(0)<cr>"
- exec "nnoremap <silent> <buffer> ". g:NERDTreeMapChangeRoot ." :call <SID>chRoot()<cr>"
-
- exec "nnoremap <silent> <buffer> ". g:NERDTreeMapChdir ." :call <SID>chCwd()<cr>"
-
- exec "nnoremap <silent> <buffer> ". g:NERDTreeMapQuit ." :call <SID>closeTreeWindow()<cr>"
-
- exec "nnoremap <silent> <buffer> ". g:NERDTreeMapRefreshRoot ." :call <SID>refreshRoot()<cr>"
- exec "nnoremap <silent> <buffer> ". g:NERDTreeMapRefresh ." :call <SID>refreshCurrent()<cr>"
-
- exec "nnoremap <silent> <buffer> ". g:NERDTreeMapHelp ." :call <SID>displayHelp()<cr>"
- exec "nnoremap <silent> <buffer> ". g:NERDTreeMapToggleZoom ." :call <SID>toggleZoom()<cr>"
- exec "nnoremap <silent> <buffer> ". g:NERDTreeMapToggleHidden ." :call <SID>toggleShowHidden()<cr>"
- exec "nnoremap <silent> <buffer> ". g:NERDTreeMapToggleFilters ." :call <SID>toggleIgnoreFilter()<cr>"
- exec "nnoremap <silent> <buffer> ". g:NERDTreeMapToggleFiles ." :call <SID>toggleShowFiles()<cr>"
- exec "nnoremap <silent> <buffer> ". g:NERDTreeMapToggleBookmarks ." :call <SID>toggleShowBookmarks()<cr>"
-
- exec "nnoremap <silent> <buffer> ". g:NERDTreeMapCloseDir ." :call <SID>closeCurrentDir()<cr>"
- exec "nnoremap <silent> <buffer> ". g:NERDTreeMapCloseChildren ." :call <SID>closeChildren()<cr>"
-
- exec "nnoremap <silent> <buffer> ". g:NERDTreeMapMenu ." :call <SID>showMenu()<cr>"
-
- exec "nnoremap <silent> <buffer> ". g:NERDTreeMapJumpParent ." :call <SID>jumpToParent()<cr>"
- exec "nnoremap <silent> <buffer> ". g:NERDTreeMapJumpNextSibling ." :call <SID>jumpToSibling(1)<cr>"
- exec "nnoremap <silent> <buffer> ". g:NERDTreeMapJumpPrevSibling ." :call <SID>jumpToSibling(0)<cr>"
- exec "nnoremap <silent> <buffer> ". g:NERDTreeMapJumpFirstChild ." :call <SID>jumpToFirstChild()<cr>"
- exec "nnoremap <silent> <buffer> ". g:NERDTreeMapJumpLastChild ." :call <SID>jumpToLastChild()<cr>"
- exec "nnoremap <silent> <buffer> ". g:NERDTreeMapJumpRoot ." :call <SID>jumpToRoot()<cr>"
-
- exec "nnoremap <silent> <buffer> ". g:NERDTreeMapOpenInTab ." :call <SID>openInNewTab(0)<cr>"
- exec "nnoremap <silent> <buffer> ". g:NERDTreeMapOpenInTabSilent ." :call <SID>openInNewTab(1)<cr>"
-
- exec "nnoremap <silent> <buffer> ". g:NERDTreeMapOpenExpl ." :call <SID>openExplorer()<cr>"
-
- exec "nnoremap <silent> <buffer> ". g:NERDTreeMapDeleteBookmark ." :call <SID>deleteBookmark()<cr>"
-
- "bind all the user custom maps
- call s:KeyMap.BindAll()
-
- command! -buffer -nargs=1 Bookmark :call <SID>bookmarkNode('<args>')
- command! -buffer -complete=customlist,s:completeBookmarks -nargs=1 RevealBookmark :call <SID>revealBookmark('<args>')
- command! -buffer -complete=customlist,s:completeBookmarks -nargs=1 OpenBookmark :call <SID>openBookmark('<args>')
- command! -buffer -complete=customlist,s:completeBookmarks -nargs=* ClearBookmarks call <SID>clearBookmarks('<args>')
- command! -buffer -complete=customlist,s:completeBookmarks -nargs=+ BookmarkToRoot call s:Bookmark.ToRoot('<args>')
- command! -buffer -nargs=0 ClearAllBookmarks call s:Bookmark.ClearAll() <bar> call <SID>renderView()
- command! -buffer -nargs=0 ReadBookmarks call s:Bookmark.CacheBookmarks(0) <bar> call <SID>renderView()
- command! -buffer -nargs=0 WriteBookmarks call s:Bookmark.Write()
-endfunction
-
-" FUNCTION: s:bookmarkNode(name) {{{2
-" Associate the current node with the given name
-function! s:bookmarkNode(name)
- let currentNode = s:TreeFileNode.GetSelected()
- if currentNode != {}
- try
- call currentNode.bookmark(a:name)
- call s:renderView()
- catch /^NERDTree.IllegalBookmarkNameError/
- call s:echo("bookmark names must not contain spaces")
- endtry
- else
- call s:echo("select a node first")
- endif
-endfunction
-"FUNCTION: s:checkForActivate() {{{2
-"Checks if the click should open the current node, if so then activate() is
-"called (directories are automatically opened if the symbol beside them is
-"clicked)
-function! s:checkForActivate()
- let currentNode = s:TreeFileNode.GetSelected()
- if currentNode != {}
- let startToCur = strpart(getline(line(".")), 0, col("."))
- let char = strpart(startToCur, strlen(startToCur)-1, 1)
-
- "if they clicked a dir, check if they clicked on the + or ~ sign
- "beside it
- if currentNode.path.isDirectory
- if startToCur =~ s:tree_markup_reg . '$' && char =~ '[+~]'
- call s:activateNode(0)
- return
- endif
- endif
-
- if (g:NERDTreeMouseMode ==# 2 && currentNode.path.isDirectory) || g:NERDTreeMouseMode ==# 3
- if char !~ s:tree_markup_reg && startToCur !~ '\/$'
- call s:activateNode(0)
- return
- endif
- endif
- endif
-endfunction
-
-" FUNCTION: s:chCwd() {{{2
-function! s:chCwd()
- let treenode = s:TreeFileNode.GetSelected()
- if treenode ==# {}
- call s:echo("Select a node first")
- return
- endif
-
- try
- call treenode.path.changeToDir()
- catch /^NERDTree.PathChangeError/
- call s:echoWarning("could not change cwd")
- endtry
-endfunction
-
-" FUNCTION: s:chRoot() {{{2
-" changes the current root to the selected one
-function! s:chRoot()
- let treenode = s:TreeFileNode.GetSelected()
- if treenode ==# {}
- call s:echo("Select a node first")
- return
- endif
-
- call treenode.makeRoot()
- call s:renderView()
- call b:NERDTreeRoot.putCursorHere(0, 0)
-endfunction
-
-" FUNCTION: s:clearBookmarks(bookmarks) {{{2
-function! s:clearBookmarks(bookmarks)
- if a:bookmarks ==# ''
- let currentNode = s:TreeFileNode.GetSelected()
- if currentNode != {}
- call currentNode.clearBoomarks()
- endif
- else
- for name in split(a:bookmarks, ' ')
- let bookmark = s:Bookmark.BookmarkFor(name)
- call bookmark.delete()
- endfor
- endif
- call s:renderView()
-endfunction
-" FUNCTION: s:closeChildren() {{{2
-" closes all childnodes of the current node
-function! s:closeChildren()
- let currentNode = s:TreeDirNode.GetSelected()
- if currentNode ==# {}
- call s:echo("Select a node first")
- return
- endif
-
- call currentNode.closeChildren()
- call s:renderView()
- call currentNode.putCursorHere(0, 0)
-endfunction
-" FUNCTION: s:closeCurrentDir() {{{2
-" closes the parent dir of the current node
-function! s:closeCurrentDir()
- let treenode = s:TreeFileNode.GetSelected()
- if treenode ==# {}
- call s:echo("Select a node first")
- return
- endif
-
- let parent = treenode.parent
- if parent ==# {} || parent.isRoot()
- call s:echo("cannot close tree root")
- else
- call treenode.parent.close()
- call s:renderView()
- call treenode.parent.putCursorHere(0, 0)
- endif
-endfunction
-" FUNCTION: s:closeTreeWindow() {{{2
-" close the tree window
-function! s:closeTreeWindow()
- if b:NERDTreeType ==# "secondary" && b:NERDTreePreviousBuf != -1
- exec "buffer " . b:NERDTreePreviousBuf
- else
- if winnr("$") > 1
- call s:closeTree()
- else
- call s:echo("Cannot close last window")
- endif
- endif
-endfunction
-" FUNCTION: s:deleteBookmark() {{{2
-" if the cursor is on a bookmark, prompt to delete
-function! s:deleteBookmark()
- let bookmark = s:Bookmark.GetSelected()
- if bookmark ==# {}
- call s:echo("Put the cursor on a bookmark")
- return
- endif
-
- echo "Are you sure you wish to delete the bookmark:\n\"" . bookmark.name . "\" (yN):"
-
- if nr2char(getchar()) ==# 'y'
- try
- call bookmark.delete()
- call s:renderView()
- redraw
- catch /^NERDTree/
- call s:echoWarning("Could not remove bookmark")
- endtry
- else
- call s:echo("delete aborted" )
- endif
-
-endfunction
-
-" FUNCTION: s:displayHelp() {{{2
-" toggles the help display
-function! s:displayHelp()
- let b:treeShowHelp = b:treeShowHelp ? 0 : 1
- call s:renderView()
- call s:centerView()
-endfunction
-
-" FUNCTION: s:handleMiddleMouse() {{{2
-function! s:handleMiddleMouse()
- let curNode = s:TreeFileNode.GetSelected()
- if curNode ==# {}
- call s:echo("Put the cursor on a node first" )
- return
- endif
-
- if curNode.path.isDirectory
- call s:openExplorer()
- else
- call s:openEntrySplit(0,0)
- endif
-endfunction
-
-
-" FUNCTION: s:jumpToFirstChild() {{{2
-" wrapper for the jump to child method
-function! s:jumpToFirstChild()
- call s:jumpToChild(0)
-endfunction
-
-" FUNCTION: s:jumpToLastChild() {{{2
-" wrapper for the jump to child method
-function! s:jumpToLastChild()
- call s:jumpToChild(1)
-endfunction
-
-" FUNCTION: s:jumpToParent() {{{2
-" moves the cursor to the parent of the current node
-function! s:jumpToParent()
- let currentNode = s:TreeFileNode.GetSelected()
- if !empty(currentNode)
- if !empty(currentNode.parent)
- call currentNode.parent.putCursorHere(1, 0)
- call s:centerView()
- else
- call s:echo("cannot jump to parent")
- endif
- else
- call s:echo("put the cursor on a node first")
- endif
-endfunction
-
-" FUNCTION: s:jumpToRoot() {{{2
-" moves the cursor to the root node
-function! s:jumpToRoot()
- call b:NERDTreeRoot.putCursorHere(1, 0)
- call s:centerView()
-endfunction
-
-" FUNCTION: s:jumpToSibling() {{{2
-" moves the cursor to the sibling of the current node in the given direction
-"
-" Args:
-" forward: 1 if the cursor should move to the next sibling, 0 if it should
-" move back to the previous sibling
-function! s:jumpToSibling(forward)
- let currentNode = s:TreeFileNode.GetSelected()
- if !empty(currentNode)
- let sibling = currentNode.findSibling(a:forward)
-
- if !empty(sibling)
- call sibling.putCursorHere(1, 0)
- call s:centerView()
- endif
- else
- call s:echo("put the cursor on a node first")
- endif
-endfunction
-
-" FUNCTION: s:openBookmark(name) {{{2
-" put the cursor on the given bookmark and, if its a file, open it
-function! s:openBookmark(name)
- try
- let targetNode = s:Bookmark.GetNodeForName(a:name, 0)
- call targetNode.putCursorHere(0, 1)
- redraw!
- catch /^NERDTree.BookmarkedNodeNotFoundError/
- call s:echo("note - target node is not cached")
- let bookmark = s:Bookmark.BookmarkFor(a:name)
- let targetNode = s:TreeFileNode.New(bookmark.path)
- endtry
- if targetNode.path.isDirectory
- call targetNode.openExplorer()
- else
- call targetNode.open()
- endif
-endfunction
-" FUNCTION: s:openEntrySplit(vertical, forceKeepWindowOpen) {{{2
-"Opens the currently selected file from the explorer in a
-"new window
-"
-"args:
-"forceKeepWindowOpen - dont close the window even if NERDTreeQuitOnOpen is set
-function! s:openEntrySplit(vertical, forceKeepWindowOpen)
- let treenode = s:TreeFileNode.GetSelected()
- if treenode != {}
- if a:vertical
- call treenode.openVSplit()
- else
- call treenode.openSplit()
- endif
- if !a:forceKeepWindowOpen
- call s:closeTreeIfQuitOnOpen()
- endif
- else
- call s:echo("select a node first")
- endif
-endfunction
-
-" FUNCTION: s:openExplorer() {{{2
-function! s:openExplorer()
- let treenode = s:TreeDirNode.GetSelected()
- if treenode != {}
- call treenode.openExplorer()
- else
- call s:echo("select a node first")
- endif
-endfunction
-
-" FUNCTION: s:openInNewTab(stayCurrentTab) {{{2
-" Opens the selected node or bookmark in a new tab
-" Args:
-" stayCurrentTab: if 1 then vim will stay in the current tab, if 0 then vim
-" will go to the tab where the new file is opened
-function! s:openInNewTab(stayCurrentTab)
- let target = s:TreeFileNode.GetSelected()
- if target == {}
- let target = s:Bookmark.GetSelected()
- endif
-
- if target != {}
- call target.openInNewTab({'stayInCurrentTab': a:stayCurrentTab})
- endif
-endfunction
-
-" FUNCTION: s:openNodeRecursively() {{{2
-function! s:openNodeRecursively()
- let treenode = s:TreeFileNode.GetSelected()
- if treenode ==# {} || treenode.path.isDirectory ==# 0
- call s:echo("Select a directory node first" )
- else
- call s:echo("Recursively opening node. Please wait...")
- call treenode.openRecursively()
- call s:renderView()
- redraw
- call s:echo("Recursively opening node. Please wait... DONE")
- endif
-
-endfunction
-
-"FUNCTION: s:previewNode() {{{2
-"Args:
-" openNewWin: if 0, use the previous window, if 1 open in new split, if 2
-" open in a vsplit
-function! s:previewNode(openNewWin)
- let currentBuf = bufnr("")
- if a:openNewWin > 0
- call s:openEntrySplit(a:openNewWin ==# 2,1)
- else
- call s:activateNode(1)
- end
- call s:exec(bufwinnr(currentBuf) . "wincmd w")
-endfunction
-
-" FUNCTION: s:revealBookmark(name) {{{2
-" put the cursor on the node associate with the given name
-function! s:revealBookmark(name)
- try
- let targetNode = s:Bookmark.GetNodeForName(a:name, 0)
- call targetNode.putCursorHere(0, 1)
- catch /^NERDTree.BookmarkNotFoundError/
- call s:echo("Bookmark isnt cached under the current root")
- endtry
-endfunction
-" FUNCTION: s:refreshRoot() {{{2
-" Reloads the current root. All nodes below this will be lost and the root dir
-" will be reloaded.
-function! s:refreshRoot()
- call s:echo("Refreshing the root node. This could take a while...")
- call b:NERDTreeRoot.refresh()
- call s:renderView()
- redraw
- call s:echo("Refreshing the root node. This could take a while... DONE")
-endfunction
-
-" FUNCTION: s:refreshCurrent() {{{2
-" refreshes the root for the current node
-function! s:refreshCurrent()
- let treenode = s:TreeDirNode.GetSelected()
- if treenode ==# {}
- call s:echo("Refresh failed. Select a node first")
- return
- endif
-
- call s:echo("Refreshing node. This could take a while...")
- call treenode.refresh()
- call s:renderView()
- redraw
- call s:echo("Refreshing node. This could take a while... DONE")
-endfunction
-" FUNCTION: s:showMenu() {{{2
-function! s:showMenu()
- let curNode = s:TreeFileNode.GetSelected()
- if curNode ==# {}
- call s:echo("Put the cursor on a node first" )
- return
- endif
-
- let mc = s:MenuController.New(s:MenuItem.AllEnabled())
- call mc.showMenu()
-endfunction
-
-" FUNCTION: s:toggleIgnoreFilter() {{{2
-" toggles the use of the NERDTreeIgnore option
-function! s:toggleIgnoreFilter()
- let b:NERDTreeIgnoreEnabled = !b:NERDTreeIgnoreEnabled
- call s:renderViewSavingPosition()
- call s:centerView()
-endfunction
-
-" FUNCTION: s:toggleShowBookmarks() {{{2
-" toggles the display of bookmarks
-function! s:toggleShowBookmarks()
- let b:NERDTreeShowBookmarks = !b:NERDTreeShowBookmarks
- if b:NERDTreeShowBookmarks
- call s:renderView()
- call s:putCursorOnBookmarkTable()
- else
- call s:renderViewSavingPosition()
- endif
- call s:centerView()
-endfunction
-" FUNCTION: s:toggleShowFiles() {{{2
-" toggles the display of hidden files
-function! s:toggleShowFiles()
- let b:NERDTreeShowFiles = !b:NERDTreeShowFiles
- call s:renderViewSavingPosition()
- call s:centerView()
-endfunction
-
-" FUNCTION: s:toggleShowHidden() {{{2
-" toggles the display of hidden files
-function! s:toggleShowHidden()
- let b:NERDTreeShowHidden = !b:NERDTreeShowHidden
- call s:renderViewSavingPosition()
- call s:centerView()
-endfunction
-
-" FUNCTION: s:toggleZoom() {{2
-" zoom (maximize/minimize) the NERDTree window
-function! s:toggleZoom()
- if exists("b:NERDTreeZoomed") && b:NERDTreeZoomed
- let size = exists("b:NERDTreeOldWindowSize") ? b:NERDTreeOldWindowSize : g:NERDTreeWinSize
- exec "silent vertical resize ". size
- let b:NERDTreeZoomed = 0
- else
- exec "vertical resize"
- let b:NERDTreeZoomed = 1
- endif
-endfunction
-
-"FUNCTION: s:upDir(keepState) {{{2
-"moves the tree up a level
-"
-"Args:
-"keepState: 1 if the current root should be left open when the tree is
-"re-rendered
-function! s:upDir(keepState)
- let cwd = b:NERDTreeRoot.path.str({'format': 'UI'})
- if cwd ==# "/" || cwd =~ '^[^/]..$'
- call s:echo("already at top dir")
- else
- if !a:keepState
- call b:NERDTreeRoot.close()
- endif
-
- let oldRoot = b:NERDTreeRoot
-
- if empty(b:NERDTreeRoot.parent)
- let path = b:NERDTreeRoot.path.getParent()
- let newRoot = s:TreeDirNode.New(path)
- call newRoot.open()
- call newRoot.transplantChild(b:NERDTreeRoot)
- let b:NERDTreeRoot = newRoot
- else
- let b:NERDTreeRoot = b:NERDTreeRoot.parent
- endif
-
- if g:NERDTreeChDirMode ==# 2
- call b:NERDTreeRoot.path.changeToDir()
- endif
-
- call s:renderView()
- call oldRoot.putCursorHere(0, 0)
- endif
-endfunction
-
-
-"reset &cpo back to users setting
-let &cpo = s:old_cpo
-
-" vim: set sw=4 sts=4 et fdm=marker:
diff --git a/vim/plugin/ScrollColor.vim b/vim/plugin/ScrollColor.vim
deleted file mode 100644
index 7c4960c..0000000
--- a/vim/plugin/ScrollColor.vim
+++ /dev/null
@@ -1,457 +0,0 @@
-" ScrollColors.vim - Colorsheme Scroller, Chooser, and Browser
-"
-" Author and maintainer: Yakov Lerner <iler_ml@fastmail.fm>
-" Last Change: 2006-07-18
-"
-" SYNOPSIS:
-" This is colorscheme Scroller/Chooser/Browser.
-" With this plugin, you walk through installed
-" colorschemes using arrow keys.
-"
-" SHORT USAGE DESCRIPTION:
-" Drop ScrollColors.vim into your plugin directory.
-" Type :SCROLL
-" Use arrow keys to walk through colorschemes, ? for help, Esc to exit.
-"
-" DETAILED DESCRIPTION:
-" 1. source ScrollColors.vim " or drop ScrollColors.vim into
-" " your ~/.vim/plugins directory
-" 2. Type :SCROLL
-" 3. Use arrows to scroll thgough colorschemes.
-" 4. When done, press Esc to exit. You will be prompted
-" wether to
-"
-" You can download 140 colorschemes pack from:
-" http://www.vim.org/scripts/script.php?script_id=625
-" Having 140 installed colorschemes is in no way prerequisite for
-" ScrollColors. But with ScrollColors you can preview 140 colorschemes
-" in couple of minutes.
-"
-" CUSTOM KEY MAPPINGS:
-" You can map two keys of your choice to NextColor and PrevColor actions.
-" Choose pair of shortcut keys (for example <F2> and <f3>, or \n and \p)
-" and map them as follows:
-" map <silent><F3> :NEXTCOLOR<cr>
-" map <silent><F2> :PREVCOLOR<cr>
-
-
-if exists("g:scroll_colors") | finish | endif
-let g:scroll_colors = 1
-
-command! COLORSCROLL :call s:ColorScroller()
-command! SCROLLCOLOR :call s:ColorScroller()
-command! NEXTCOLOR :call s:NextColorscheme()
-command! PREVCOLOR :call s:PrevColorscheme()
-
-" Example of convenience mappings:
-"map <silent><F3> :NEXTCOLOR<cr>
-"map <silent><F2> :PREVCOLOR<cr>
-"map <silent><F4> :SCROLLCOLOR<cr>
-
-function! s:ScrollerHelp()
- echo " "
- echohl Title
- echo "Color Scroller Help:"
- echo "--------------------"
- echohl NONE
- echo "Arrows - change colorscheme"
- echo "Esc,q,Enter - exit"
- echo "h,j,k,l - change colorscheme"
- echo "0,g - go to first colorscheme"
- echo "$,G - go to last colorscheme"
- echo "L - list colorschemes"
- echo "PgUp,PgDown - jump by 10 colorschemes"
- echo "# - go to colorscheme by index (1-N)"
- echo "R - refresh colorscheme list"
- echo "? - this help text"
- echohl MoreMsg
- echo "Press any key to continue"
- echohl NONE
- call getchar()
-endfu
-
-function! s:Align(s, width)
- if strlen(a:s) >= a:width
- return a:s." "
- else
- let pad=" "
- let res=a:s
- while strlen(res) < a:width
- let chunk = (a:width - strlen(res) > strlen(pad) ? strlen(pad) : a:width - strlen(res))
- let res = res . strpart(pad,0,chunk)
- endw
- return res
- endif
-endfu
-
-function! s:ListColors()
- echo " "
- let list=s:GetColorschemesList()
- let width=18
- let pos=0
- while list != ''
- let str=substitute(list,"\n.*","","")
- let list=substitute(list,"[^\n]*\n", "", "")
- let aligned = s:Align(str, width)
- if( pos+strlen(aligned)+1 >= &columns)
- echo " "
- let pos=0
- endif
- echon aligned
- let pos = pos + strlen(aligned)
- endw
- echo "Press any key to continue"
- call getchar()
-endfu
-
-function! s:CurrentColor()
- return exists("g:colors_name") ? g:colors_name : ""
-endfu
-
-function! s:SetColor(name)
- exe "color ".a:name
- " if we do not assign a:colors_name, then
- " bad things happen if file colors/name.vim conmtains wrong assignment inside.
- " Wrong assignment inside happens when file was copied but
- " assignment inside not fixed.
- " Such wrong assignment cause up erratic switches unless
- " we do our own assignment to g:colors_name
- let g:colors_name=a:name
-endfu
-
-function! s:JumpByIndex(list,total)
- let ans = input("Enter colorscheme number (1-".a:total.") : ")
- let index = (ans<=0? 1 : 1+(ans-1)%a:total )
- let name = s:EntryByIndex(a:list, index )
- call s:SetColor(name)
-endfu
-
-function! s:JumpByIndex2(list,total, index)
- let mod = (a:index <= 0? 1 : 1+(a:index-1)%a:total )
- let name = s:EntryByIndex(a:list, mod )
- call s:SetColor(name)
-endfu
-
-function! s:ExitDialog(old, action)
- let ans = 0
-
- if a:old == s:CurrentColor()
- let ans=1
- elseif a:action == ''
- let ans = confirm("Keep this colorscheme ?", "&Yes\n&No\n&Cancel")
- elseif action == 'keep'
- ans = 1
- elseif action == 'revert'
- ans = 2
- endif
-
- if ans == 1 || ans==0
- " exit, keep colorscheme
- let msg = (a:old == s:CurrentColor() ? '' : "(original: '".a:old."')")
- call s:FinalEcho( msg )
- elseif ans == 2
- " exit, revert colorscheme
- call s:SetColor(a:old)
- call s:FinalEcho('original color restored')
- elseif ans == 3
- " do not exit, continue browsing
- return -1
- endif
-endfu
-
-function! s:ColorScroller()
- let old = s:CurrentColor()
- let list = s:GetColorschemesList()
- let total = s:CountEntries(list)
- let loop=0
-
- if line("$") == 1 && getline(1) == "" && bufnr('$')==1
- " if buffer is empty, open something
- echo "We will open sample text with syntax highlighting."
- echo "Watch for the guiding prompt in the bottom line."
- echo "When the text will open, use Arrow keys to switch colorschemes, ? for help."
- echo " "
- echo "Press any key to continue"
- call getchar()
- :e $VIMRUNTIME/syntax/abc.vim
- :setlocal ro
- syntax on
- redraw
- endif
-
- if !exists("g:syntax_on")
- syntax on
- redraw
- endif
-
- while 1
- redraw
- let index = s:FindIndex(list, s:CurrentColor())
- echo "["
- echohl Search
- echon s:CurrentColor()
- echohl NONE
- if loop == 0
- echon "] ColorScroller: "
- echohl MoreMsg | echon "Arrows" | echohl NONE | echon "-next/prev; "
- echohl MoreMsg | echon "Esc" | echohl NONE | echon "-exit; "
- echohl MoreMsg | echon "?" | echohl NONE | echon "-help > "
- else
- echon "] "
- echon " " . index . "/" . total . " "
- echon s:Align("", 12-strlen(s:CurrentColor()))
- echon "> ColorScroll > "
- echon "Arrows,Esc,? > "
- endif
- let key = getchar()
- let c = nr2char(key)
-
- if key == "\<Left>" || key == "\<Up>" || c ==# 'h' || c ==# 'j'
- call s:PrevSilent()
- elseif key == "\<Down>" || key == "\<Right>" || c ==# 'l' || c==# 'k' || c==# ' '
- call s:NextSilent()
- elseif c==# 'g' || c=='0' || c=='1'
- call s:SetColor( s:GetFirstColors() )
- elseif c=='$' || c==# 'G'
- call s:SetColor( s:GetLastColors() )
- elseif c ==# 'L'
- " command 'L' list colors
- call s:ListColors()
- elseif c=='Z' || c=='z' || key == 13 || c=='q' || c=='Q' || c==':' || key == 27
- if s:ExitDialog(old, '') != -1
- break
- endif
- elseif key == 12 " c=="\<C-L>"
- redraw
- elseif c == '#'
- call s:JumpByIndex(list,total)
- elseif key == "\<PageDown>"
- call s:JumpByIndex2(list,total, (index-10>=1 ? index-10 : index-10+total))
- elseif key == "\<PageUp>"
- call s:JumpByIndex2(list,total, index+10)
- elseif c == '?'
- call s:ScrollerHelp()
- elseif c == 'R'
- call s:RefreshColorschemesList()
- echo "Colorscheme list refreshed. Press any key to continue."
- call getchar()
- else
- call s:ScrollerHelp()
- endif
- let loop = loop + 1
- endw
-endfu
-
-" Get 1-based index of 'entry' in \n-separated 'list'
-function! s:FindIndex(list,entry)
- " we assume entry has no special chars or we could escape() it
- let str = substitute("\n" . a:list . "\n", "\n" . a:entry . "\n.*$", "", "")
- return 1 + s:CountEntries(str)
-endfu
-
-" Get list element by 1-based index
-function! s:EntryByIndex(list,index)
- let k=1
- let tail=a:list
- while tail != '' && k < a:index
- let tail=substitute(tail, "^[^\n]*\n", "", "")
- let k = k + 1
- endw
- let tail = substitute(tail, "\n.*$", "", "")
- return tail
-endfu
-
-function! s:MakeWellFormedList(list)
-
- " make sure last \n is present
- let str=a:list."\n"
- " make sure leading \n are not present
- let str=substitute(str, "^\n*", "", "")
- " make sure entries are separated by exactly one \n
- let str=substitute(str, "\n\\+", "\n", "g")
-
- return str
-endfu
-
-function! s:CountEntries(list)
- let str = s:MakeWellFormedList(a:list)
-
- let str=substitute(str, "[^\n]\\+\n", ".", "g")
-
- return strlen(str)
-endfu
-
-function! s:RemoveDuplicates(list)
- let sep = "\n"
- let res = s:MakeWellFormedList(a:list . "\n")
- let beg = 0
- while beg < strlen(res)
- let end = matchend(res, sep, beg)
- let str1 = strpart( res, beg, end - beg)
- let res = strpart(res,0,end) . substitute("\n".strpart(res,end), "\n".str1,"\n","g")
- let res = substitute(res, "\n\\+", "\n", "g")
- let beg = end
- endw
- return res
-endfu
-
-if v:version >= 700
-
-" s:SortVar(): sort components of string @var separated
-" by delimiter @sep, and returns the sorted string.
-" For example, s:SortVar("c\nb\na", "\n") returns "a\nb\nc\n"
-function! s:SortVar(list, sep)
- let list = split( a:list, a:sep )
- let sorted = sort(list)
- let result = join( sorted, "\n" )
- return result . "\n"
-endfun
-
-endif
-
-if v:version < 700
-" s:SortVar(): sort components of string @var separated
-" by delimiter @sep, and returns the sorted string.
-" For example, s:SortVar("c\nb\na", "\n") returns "a\nb\nc\n"
-function! s:SortVar(list, sep)
-
- let res=s:MakeWellFormedList(a:list . "\n")
- while 1
- let disorder=0
- let index1=0
-
- let len=strlen(res)
- while 1
- let index2=matchend(res, a:sep, index1)
- if index2 == -1 || index2>=len
- break
- endif
- let index3=matchend(res, a:sep, index2)
- if index3 == -1
- let index3=len
- endif
- let str1=strpart(res, index1, index2-index1)
- let str2=strpart(res, index2, index3-index2)
- if str1 > str2
- let disorder=1
- " swap str1 and str2 in res
- let res=strpart(res,0,index1).str2.str1.strpart(res,index3)
- let index1=index1 + strlen(str2)
- else
- let index1=index1 + strlen(str1)
- endif
- endw
-
- if !disorder
- break
- endif
- endw
- return res
-endfu
-endif " v:version < 700
-
-let s:list = ""
-
-function! s:GetColorschemesList()
- if s:list == ""
- let s:list = s:RefreshColorschemesList()
- endif
- return s:list
-endfunction
-
-
-function! s:RefreshColorschemesList()
- let x=globpath(&rtp, "colors/*.vim")
- let y=substitute(x."\n","\\(^\\|\n\\)[^\n]*[/\\\\]", "\n", "g")
- let z=substitute(y,"\\.vim\n", "\n", "g")
- let sorted = s:SortVar(z, "\n")
- let s:list = s:RemoveDuplicates(sorted)
- return s:list
-endfun
-
-function! s:GetFirstColors()
- let list=s:GetColorschemesList()
- let trim=substitute(list, "^\n\\+", "", "")
- return substitute(trim, "\n.*", "", "")
-endfu
-
-function! s:GetLastColors()
- let list=s:GetColorschemesList()
- let trim=substitute(list, "\n\\+$", "", "")
- return substitute(trim, "^.*\n", "", "")
-endfu
-
-function! s:FinalEcho(suffix)
- let list = s:GetColorschemesList()
- let total = s:CountEntries(list)
- let index = s:FindIndex(list, s:CurrentColor())
-
- redraw
- echon "["
- echohl Search
- echon s:CurrentColor()
- echohl NONE
- echon "] colorscheme #".index ." of " . total.". "
- echon a:suffix
-endfu
-
-function! s:GetNextColor(color)
- let list=s:GetColorschemesList()
- if ("\n".list) =~ ("\n".s:CurrentColor()."\n")
- let next=substitute("\n".list."\n", ".*\n".a:color."\n", "", "")
- let next = substitute(next, "\n.*", "", "")
- return next=='' ? s:GetFirstColors() : next
- else
- return s:GetFirstColors()
- endif
-endfu
-
-function! s:GetPrevColor(color)
- let list=s:GetColorschemesList()
- if ("\n".list) =~ ("\n".a:color."\n")
- let prev=substitute("\n".list."\n", "\n".a:color."\n.*", "", "")
- let prev=substitute(prev, "^.*\n", "", "")
- return prev=='' ? s:GetLastColors() : prev
- else
- return s:GetLastColors()
- endif
-endfu
-
-function! s:NextSilent()
- let old = s:CurrentColor()
- let next = s:GetNextColor(s:CurrentColor())
- call s:SetColor( next )
-endfu
-
-function! s:PrevSilent()
- let old = s:CurrentColor()
- let prev = s:GetPrevColor(s:CurrentColor())
- call s:SetColor( prev )
-endfu
-
-function! s:NextColorscheme()
- let old = s:CurrentColor()
- let next = s:GetNextColor(s:CurrentColor())
- call s:SetColor( next )
- redraw
- call s:FinalEcho('previous: '.old)
-endfun
-
-function! s:PrevColorscheme()
- let old = s:CurrentColor()
- let prev = s:GetPrevColor(s:CurrentColor())
- call s:SetColor( prev )
- redraw
- call s:FinalEcho('previous: '.old)
-endfun
-
-command! CN :call s:NextColorscheme()
-command! CP :call s:PrevColorscheme()
-map \n :CN<cr>
-map \p :CP<cr>
-map \c :echo g:colors_name<cr>
-
-" 2006-07-18 fixed bug with Align() -> s:Align() (affected L command)
-" 2006-07-18 added colorlist cache (s:list)
-" 2006-07-18 added R key to refresh colorlist
-" 2006-07-19 for vim7, sort using builtin sort() (bubblesort is slow)
diff --git a/vim/plugin/bufexplorer.vim b/vim/plugin/bufexplorer.vim
deleted file mode 100755
index 8791363..0000000
--- a/vim/plugin/bufexplorer.vim
+++ /dev/null
@@ -1,1162 +0,0 @@
-"==============================================================================
-" Copyright: Copyright (C) 2001-2010 Jeff Lanzarotta
-" Permission is hereby granted to use and distribute this code,
-" with or without modifications, provided that this copyright
-" notice is copied with it. Like anything else that's free,
-" bufexplorer.vim is provided *as is* and comes with no
-" warranty of any kind, either expressed or implied. In no
-" event will the copyright holder be liable for any damages
-" resulting from the use of this software.
-" Name Of File: bufexplorer.vim
-" Description: Buffer Explorer Vim Plugin
-" Maintainer: Jeff Lanzarotta (delux256-vim at yahoo dot com)
-" Last Changed: Friday, 22 October 2010
-" Version: See g:bufexplorer_version for version number.
-" Usage: This file should reside in the plugin directory and be
-" automatically sourced.
-"
-" You may use the default keymappings of
-"
-" <Leader>be - Opens BE.
-" <Leader>bs - Opens horizontally window BE.
-" <Leader>bv - Opens vertically window BE.
-"
-" Or you can use
-"
-" ":BufExplorer" - Opens BE.
-" ":BufExplorerHorizontalSplit" - Opens horizontally window BE.
-" ":BufExplorerVerticalSplit" - Opens vertically window BE.
-"
-" For more help see supplied documentation.
-" History: See supplied documentation.
-"==============================================================================
-
-" Exit quickly if already running or when 'compatible' is set. {{{1
-if exists("g:bufexplorer_version") || &cp
- finish
-endif
-"1}}}
-
-" Version number
-let g:bufexplorer_version = "7.2.8"
-
-" Check for Vim version 700 or greater {{{1
-if v:version < 700
- echo "Sorry, bufexplorer ".g:bufexplorer_version."\nONLY runs with Vim 7.0 and greater."
- finish
-endif
-
-" Public Interface {{{1
-if maparg("<Leader>be") =~ 'BufExplorer'
- nunmap <Leader>be
-endif
-
-if maparg("<Leader>bs") =~ 'BufExplorerHorizontalSplit'
- nunmap <Leader>bs
-endif
-
-if maparg("<Leader>bv") =~ 'BufExplorerVerticalSplit'
- nunmap <Leader>bv
-endif
-
-nmap <script> <silent> <unique> <Leader>be :BufExplorer<CR>
-nmap <script> <silent> <unique> <Leader>bs :BufExplorerHorizontalSplit<CR>
-nmap <script> <silent> <unique> <Leader>bv :BufExplorerVerticalSplit<CR>
-
-" Create commands {{{1
-command! BufExplorer :call StartBufExplorer(has ("gui") ? "drop" : "hide edit")
-command! BufExplorerHorizontalSplit :call BufExplorerHorizontalSplit()
-command! BufExplorerVerticalSplit :call BufExplorerVerticalSplit()
-
-" BESet {{{1
-function! s:BESet(var, default)
- if !exists(a:var)
- if type(a:default)
- exec "let" a:var "=" string(a:default)
- else
- exec "let" a:var "=" a:default
- endif
-
- return 1
- endif
-
- return 0
-endfunction
-
-" BEReset {{{1
-function! s:BEReset()
- " Build initial MRUList. This makes sure all the files specified on the
- " command line are picked up correctly.
- let s:MRUList = range(1, bufnr('$'))
-
- " Initialize one tab space array, ignore zero-based tabpagenr
- " since all tabpagenr's start at 1.
- " -1 signifies this is the first time we are referencing this
- " tabpagenr.
- let s:tabSpace = [ [-1], [-1] ]
-endfunction
-
-" Setup the autocommands that handle the MRUList and other stuff. {{{1
-" This is only done once when Vim starts up.
-augroup BufExplorerVimEnter
- autocmd!
- autocmd VimEnter * call s:BESetup()
-augroup END
-
-" BESetup {{{1
-function! s:BESetup()
- call s:BEReset()
-
- " Now that the MRUList is created, add the other autocmds.
- augroup BufExplorer
- " Deleting autocommands in case the script is reloaded
- autocmd!
- autocmd TabEnter * call s:BETabEnter()
- autocmd BufNew * call s:BEAddBuffer()
- autocmd BufEnter * call s:BEActivateBuffer()
-
- autocmd BufWipeOut * call s:BEDeactivateBuffer(1)
- autocmd BufDelete * call s:BEDeactivateBuffer(0)
-
- autocmd BufWinEnter \[BufExplorer\] call s:BEInitialize()
- autocmd BufWinLeave \[BufExplorer\] call s:BECleanup()
- autocmd SessionLoadPost * call s:BEReset()
- augroup END
-
- " Remove the VimEnter event as it is no longer needed
- augroup SelectBufVimEnter
- autocmd!
- augroup END
-endfunction
-
-" BETabEnter {{{1
-function! s:BETabEnter()
- " Make s:tabSpace 1-based
- if empty(s:tabSpace) || len(s:tabSpace) < (tabpagenr() + 1)
- call add(s:tabSpace, [-1])
- endif
-endfunction
-
-" BEAddBuffer {{{1
-function! s:BEAddBuffer()
- if !exists('s:raw_buffer_listing') || empty(s:raw_buffer_listing)
- silent let s:raw_buffer_listing = s:BEGetBufferInfo(0)
- else
- " We cannot use :buffers! or :ls! to gather information
- " about this buffer since it was only just added.
- " Any changes to the buffer (setlocal buftype, ...)
- " happens after this event fires.
- "
- " So we will indicate the :buffers! command must be re-run.
- " This should help with the performance of the plugin.
-
- " There are some checks which can be performed
- " before deciding to refresh the buffer list.
- let bufnr = expand('<abuf>') + 0
-
- if s:BEIgnoreBuffer(bufnr) == 1
- return
- else
- let s:refreshBufferList = 1
- endif
- endif
-
- call s:BEActivateBuffer()
-endfunction
-
-" ActivateBuffer {{{1
-function! s:BEActivateBuffer()
- let b = bufnr("%")
- let l = get(s:tabSpace, tabpagenr(), [])
-
- if s:BEIgnoreBuffer(b) == 1
- return
- endif
-
- if !empty(l) && l[0] == '-1'
- " The first time we add a tab Vim uses the current
- " buffer as it's starting page, even though we are about
- " to edit a new page (BufEnter triggers after), so
- " remove the -1 entry indicating we have covered this case.
- let l = []
- let s:tabSpace[tabpagenr()] = l
- elseif empty(l) || index(l, b) == -1
- " Add new buffer to this tab buffer list
- let l = add(l, b)
- let s:tabSpace[tabpagenr()] = l
-
- if g:bufExplorerOnlyOneTab == 1
- " If a buffer can only be available in 1 tab page
- " ensure this buffer is not present in any other tabs
- let tabidx = 1
- while tabidx < len(s:tabSpace)
- if tabidx != tabpagenr()
- let bufidx = index(s:tabSpace[tabidx], b)
- if bufidx != -1
- call remove(s:tabSpace[tabidx], bufidx)
- endif
- endif
- let tabidx = tabidx + 1
- endwhile
- endif
- endif
-
- call s:BEMRUPush(b)
-
- if exists('s:raw_buffer_listing') && !empty(s:raw_buffer_listing)
- " Check if the buffer exists, but was deleted previously
- " Careful use of ' and " so we do not have to escape all the \'s
- " Regex: ^\s*bu\>
- " ^ - Starting at the beginning of the string
- " \s* - optional whitespace
- " b - Vim's buffer number
- " u\> - the buffer must be unlisted
- let shortlist = filter(copy(s:raw_buffer_listing), "v:val.attributes =~ '".'^\s*'.b.'u\>'."'")
-
- if !empty(shortlist)
- " If it is unlisted (ie deleted), but now we editing it again
- " rebuild the buffer list.
- let s:refreshBufferList = 1
- endif
- endif
-endfunction
-
-" BEDeactivateBuffer {{{1
-function! s:BEDeactivateBuffer(remove)
- let _bufnr = str2nr(expand("<abuf>"))
-
- call s:BEMRUPop(_bufnr)
-
- if a:remove
- call s:BEDeleteBufferListing(_bufnr)
- else
- let s:refreshBufferList = 1
- endif
-endfunction
-
-" BEMRUPop {{{1
-function! s:BEMRUPop(buf)
- call filter(s:MRUList, 'v:val != '.a:buf)
-endfunction
-
-" BEMRUPush {{{1
-function! s:BEMRUPush(buf)
- if s:BEIgnoreBuffer(a:buf) == 1
- return
- endif
-
- " Remove the buffer number from the list if it already exists.
- call s:BEMRUPop(a:buf)
-
- " Add the buffer number to the head of the list.
- call insert(s:MRUList,a:buf)
-endfunction
-
-" BEInitialize {{{1
-function! s:BEInitialize()
- let s:_insertmode = &insertmode
- set noinsertmode
-
- let s:_showcmd = &showcmd
- set noshowcmd
-
- let s:_cpo = &cpo
- set cpo&vim
-
- let s:_report = &report
- let &report = 10000
-
- let s:_list = &list
- set nolist
-
- setlocal nonumber
- setlocal foldcolumn=0
- setlocal nofoldenable
- setlocal cursorline
- setlocal nospell
- setlocal nobuflisted
-
- let s:running = 1
-endfunction
-
-" BEIgnoreBuffer
-function! s:BEIgnoreBuffer(buf)
- " Check to see if this buffer should be ignore by BufExplorer.
-
- " Skip temporary buffers with buftype set.
- if empty(getbufvar(a:buf, "&buftype") == 0)
- return 1
- endif
-
- " Skip unlisted buffers.
- if buflisted(a:buf) == 0
- return 1
- endif
-
- " Skip buffers with no name.
- if empty(bufname(a:buf)) == 1
- return 1
- endif
-
- " Do not add the BufExplorer window to the list.
- if fnamemodify(bufname(a:buf), ":t") == s:name
- call s:BEError("The buffer name was [".s:name."] so it was skipped.")
- return 1
- endif
-
- if index(s:MRU_Exclude_List, bufname(a:buf)) >= 0
- return 1
- end
-
- return 0
-endfunction
-
-" BECleanup {{{1
-function! s:BECleanup()
- if exists("s:_insertmode")|let &insertmode = s:_insertmode|endif
- if exists("s:_showcmd") |let &showcmd = s:_showcmd |endif
- if exists("s:_cpo") |let &cpo = s:_cpo |endif
- if exists("s:_report") |let &report = s:_report |endif
- if exists("s:_list") |let &list = s:_list |endif
- let s:running = 0
- let s:splitMode = ""
-
- delmarks!
-endfunction
-
-" BufExplorerHorizontalSplit {{{1
-function! BufExplorerHorizontalSplit()
- let s:splitMode = "sp"
- exec "BufExplorer"
-endfunction
-
-" BufExplorerVerticalSplit {{{1
-function! BufExplorerVerticalSplit()
- let s:splitMode = "vsp"
- exec "BufExplorer"
-endfunction
-
-" StartBufExplorer {{{1
-function! StartBufExplorer(open)
- let name = s:name
-
- if !has("win32")
- " On non-Windows boxes, escape the name so that is shows up correctly.
- let name = escape(name, "[]")
- call s:BEError("Escaped")
- endif
-
- " Make sure there is only one explorer open at a time.
- if s:running == 1
- call s:BEError("WHAT THE 1")
- " Go to the open buffer.
- if has("gui")
- call s:BEError("WHAT THE 2")
- call s:BEError(name)
- exec "drop" name
- endif
-
- return
- endif
-
- " Add zero to ensure the variable is treated as a Number.
- let s:originBuffer = bufnr("%") + 0
-
- " Create or rebuild the raw buffer list if necessary.
- if !exists('s:raw_buffer_listing') ||
- \ empty(s:raw_buffer_listing) ||
- \ s:refreshBufferList == 1
- silent let s:raw_buffer_listing = s:BEGetBufferInfo(0)
- endif
-
- let copy = copy(s:raw_buffer_listing)
-
- if (g:bufExplorerShowUnlisted == 0)
- call filter(copy, 'v:val.attributes !~ "u"')
- endif
-
- " We may have to split the current window.
- if (s:splitMode != "")
- " Save off the original settings.
- let [_splitbelow, _splitright] = [&splitbelow, &splitright]
-
- " Set the setting to ours.
- let [&splitbelow, &splitright] = [g:bufExplorerSplitBelow, g:bufExplorerSplitRight]
-
- " Do it.
- exe 'keepalt '.s:splitMode
-
- " Restore the original settings.
- let [&splitbelow, &splitright] = [_splitbelow, _splitright]
- endif
-
- if !exists("b:displayMode") || b:displayMode != "winmanager"
- " Do not use keepalt when opening bufexplorer to allow the buffer that we are
- " leaving to become the new alternate buffer
- exec "silent keepjumps ".a:open." ".name
- endif
-
- call s:BEDisplayBufferList()
-endfunction
-
-" BEDisplayBufferList {{{1
-function! s:BEDisplayBufferList()
- " Do not set bufhidden since it wipes out
- " the data if we switch away from the buffer
- " using CTRL-^
- setlocal buftype=nofile
- setlocal modifiable
- setlocal noswapfile
- setlocal nowrap
-
- " Delete all previous lines to the black hole register
- call cursor(1,1)
- exec 'silent! normal! "_dG'
-
- call s:BESetupSyntax()
- call s:BEMapKeys()
- call setline(1, s:BECreateHelp())
- call s:BEBuildBufferList()
- call cursor(s:firstBufferLine, 1)
-
- if !g:bufExplorerResize
- normal! zz
- endif
-
- setlocal nomodifiable
-endfunction
-
-" BEMapKeys {{{1
-function! s:BEMapKeys()
- if exists("b:displayMode") && b:displayMode == "winmanager"
- nnoremap <buffer> <silent> <tab> :call <SID>BESelectBuffer("tab")<cr>
- endif
-
- nnoremap <buffer> <silent> <F1> :call <SID>BEToggleHelp()<cr>
- nnoremap <buffer> <silent> <2-leftmouse> :call <SID>BESelectBuffer()<cr>
- nnoremap <buffer> <silent> <cr> :call <SID>BESelectBuffer()<cr>
- nnoremap <buffer> <silent> o :call <SID>BESelectBuffer()<cr>
- nnoremap <buffer> <silent> t :call <SID>BESelectBuffer("tab")<cr>
- nnoremap <buffer> <silent> <s-cr> :call <SID>BESelectBuffer("tab")<cr>
-
- nnoremap <buffer> <silent> d :call <SID>BERemoveBuffer("delete", "n")<cr>
- xnoremap <buffer> <silent> d :call <SID>BERemoveBuffer("delete", "v")<cr>
- nnoremap <buffer> <silent> D :call <SID>BERemoveBuffer("wipe", "n")<cr>
- xnoremap <buffer> <silent> D :call <SID>BERemoveBuffer("wipe", "v")<cr>
-
- nnoremap <buffer> <silent> m :call <SID>BEMRUListShow()<cr>
- nnoremap <buffer> <silent> p :call <SID>BEToggleSplitOutPathName()<cr>
- nnoremap <buffer> <silent> q :call <SID>BEClose("quit")<cr>
- nnoremap <buffer> <silent> r :call <SID>BESortReverse()<cr>
- nnoremap <buffer> <silent> R :call <SID>BEToggleShowRelativePath()<cr>
- nnoremap <buffer> <silent> s :call <SID>BESortSelect()<cr>
- nnoremap <buffer> <silent> S :call <SID>BEReverseSortSelect()<cr>
- nnoremap <buffer> <silent> u :call <SID>BEToggleShowUnlisted()<cr>
- nnoremap <buffer> <silent> f :call <SID>BEToggleFindActive()<cr>
- nnoremap <buffer> <silent> T :call <SID>BEToggleShowTabBuffer()<cr>
- nnoremap <buffer> <silent> B :call <SID>BEToggleOnlyOneTab()<cr>
-
- for k in ["G", "n", "N", "L", "M", "H"]
- exec "nnoremap <buffer> <silent>" k ":keepjumps normal!" k."<cr>"
- endfor
-endfunction
-
-" BESetupSyntax {{{1
-function! s:BESetupSyntax()
- if has("syntax")
- syn match bufExplorerHelp "^\".*" contains=bufExplorerSortBy,bufExplorerMapping,bufExplorerTitle,bufExplorerSortType,bufExplorerToggleSplit,bufExplorerToggleOpen
- syn match bufExplorerOpenIn "Open in \w\+ window" contained
- syn match bufExplorerSplit "\w\+ split" contained
- syn match bufExplorerSortBy "Sorted by .*" contained contains=bufExplorerOpenIn,bufExplorerSplit
- syn match bufExplorerMapping "\" \zs.\+\ze :" contained
- syn match bufExplorerTitle "Buffer Explorer.*" contained
- syn match bufExplorerSortType "'\w\{-}'" contained
- syn match bufExplorerBufNbr /^\s*\d\+/
- syn match bufExplorerToggleSplit "toggle split type" contained
- syn match bufExplorerToggleOpen "toggle open mode" contained
- syn match bufExplorerModBuf /^\s*\d\+.\{4}+.*/
- syn match bufExplorerLockedBuf /^\s*\d\+.\{3}[\-=].*/
- syn match bufExplorerHidBuf /^\s*\d\+.\{2}h.*/
- syn match bufExplorerActBuf /^\s*\d\+.\{2}a.*/
- syn match bufExplorerCurBuf /^\s*\d\+.%.*/
- syn match bufExplorerAltBuf /^\s*\d\+.#.*/
- syn match bufExplorerUnlBuf /^\s*\d\+u.*/
-
- hi def link bufExplorerBufNbr Number
- hi def link bufExplorerMapping NonText
- hi def link bufExplorerHelp Special
- hi def link bufExplorerOpenIn Identifier
- hi def link bufExplorerSortBy String
- hi def link bufExplorerSplit NonText
- hi def link bufExplorerTitle NonText
- hi def link bufExplorerSortType bufExplorerSortBy
- hi def link bufExplorerToggleSplit bufExplorerSplit
- hi def link bufExplorerToggleOpen bufExplorerOpenIn
-
- hi def link bufExplorerActBuf Identifier
- hi def link bufExplorerAltBuf String
- hi def link bufExplorerCurBuf Type
- hi def link bufExplorerHidBuf Constant
- hi def link bufExplorerLockedBuf Special
- hi def link bufExplorerModBuf Exception
- hi def link bufExplorerUnlBuf Comment
- endif
-endfunction
-
-" BEToggleHelp {{{1
-function! s:BEToggleHelp()
- let g:bufExplorerDetailedHelp = !g:bufExplorerDetailedHelp
-
- setlocal modifiable
-
- " Save position.
- normal! ma
-
- " Remove old header.
- if (s:firstBufferLine > 1)
- exec "keepjumps 1,".(s:firstBufferLine - 1) "d _"
- endif
-
- call append(0, s:BECreateHelp())
-
- silent! normal! g`a
- delmarks a
-
- setlocal nomodifiable
-
- if exists("b:displayMode") && b:displayMode == "winmanager"
- call WinManagerForceReSize("BufExplorer")
- endif
-endfunction
-
-" BEGetHelpStatus {{{1
-function! s:BEGetHelpStatus()
- let ret = '" Sorted by '.((g:bufExplorerReverseSort == 1) ? "reverse " : "").g:bufExplorerSortBy
- let ret .= ' | '.((g:bufExplorerFindActive == 0) ? "Don't " : "")."Locate buffer"
- let ret .= ((g:bufExplorerShowUnlisted == 0) ? "" : " | Show unlisted")
- let ret .= ((g:bufExplorerShowTabBuffer == 0) ? "" : " | Show buffers/tab")
- let ret .= ((g:bufExplorerOnlyOneTab == 1) ? "" : " | One tab / buffer")
- let ret .= ' | '.((g:bufExplorerShowRelativePath == 0) ? "Absolute" : "Relative")
- let ret .= ' '.((g:bufExplorerSplitOutPathName == 0) ? "Full" : "Split")." path"
-
- return ret
-endfunction
-
-" BECreateHelp {{{1
-function! s:BECreateHelp()
- if g:bufExplorerDefaultHelp == 0 && g:bufExplorerDetailedHelp == 0
- let s:firstBufferLine = 1
- return []
- endif
-
- let header = []
-
- if g:bufExplorerDetailedHelp == 1
- call add(header, '" Buffer Explorer ('.g:bufexplorer_version.')')
- call add(header, '" --------------------------')
- call add(header, '" <F1> : toggle this help')
- call add(header, '" <enter> or o or Mouse-Double-Click : open buffer under cursor')
- call add(header, '" <shift-enter> or t : open buffer in another tab')
- call add(header, '" d : delete buffer')
- call add(header, '" D : wipe buffer')
- call add(header, '" f : toggle find active buffer')
- call add(header, '" p : toggle spliting of file and path name')
- call add(header, '" q : quit')
- call add(header, '" r : reverse sort')
- call add(header, '" R : toggle showing relative or full paths')
- call add(header, '" s : cycle thru "sort by" fields '.string(s:sort_by).'')
- call add(header, '" S : reverse cycle thru "sort by" fields')
- call add(header, '" T : toggle if to show only buffers for this tab or not')
- call add(header, '" u : toggle showing unlisted buffers')
- else
- call add(header, '" Press <F1> for Help')
- endif
-
- if (!exists("b:displayMode") || b:displayMode != "winmanager") || (b:displayMode == "winmanager" && g:bufExplorerDetailedHelp == 1)
- call add(header, s:BEGetHelpStatus())
- call add(header, '"=')
- endif
-
- let s:firstBufferLine = len(header) + 1
-
- return header
-endfunction
-
-" BEGetBufferInfo {{{1
-function! s:BEGetBufferInfo(bufnr)
- redir => bufoutput
- buffers!
- redir END
-
- if (a:bufnr > 0)
- " Since we are only interested in this specified buffer
- " remove the other buffers listed
- let bufoutput = substitute(bufoutput."\n", '^.*\n\(\s*'.a:bufnr.'\>.\{-}\)\n.*', '\1', '')
- endif
-
- let [all, allwidths, listedwidths] = [[], {}, {}]
-
- for n in keys(s:types)
- let allwidths[n] = []
- let listedwidths[n] = []
- endfor
-
- for buf in split(bufoutput, '\n')
- let bits = split(buf, '"')
- let b = {"attributes": bits[0], "line": substitute(bits[2], '\s*', '', '')}
-
- for [key, val] in items(s:types)
- let b[key] = fnamemodify(bits[1], val)
- endfor
-
- if getftype(b.fullname) == "dir" && g:bufExplorerShowDirectories == 1
- let b.shortname = "<DIRECTORY>"
- endif
-
- call add(all, b)
-
- for n in keys(s:types)
- call add(allwidths[n], len(b[n]))
-
- if b.attributes !~ "u"
- call add(listedwidths[n], len(b[n]))
- endif
- endfor
- endfor
-
- let [s:allpads, s:listedpads] = [{}, {}]
-
- for n in keys(s:types)
- let s:allpads[n] = repeat(' ', max(allwidths[n]))
- let s:listedpads[n] = repeat(' ', max(listedwidths[n]))
- endfor
-
- let s:refreshBufferList = 1
-
- return all
-endfunction
-
-" BEBuildBufferList {{{1
-function! s:BEBuildBufferList()
- let lines = []
-
- " Loop through every buffer.
- for buf in s:raw_buffer_listing
- " Skip unlisted buffers if we are not to show them.
- if (!g:bufExplorerShowUnlisted && buf.attributes =~ "u")
- continue
- endif
-
- if (g:bufExplorerShowTabBuffer)
- let show_buffer = 0
-
- for bufnr in s:tabSpace[tabpagenr()]
- if (buf.attributes =~ '^\s*'.bufnr.'\>')
- " Only buffers shown on the current tabpagenr
- let show_buffer = 1
- break
- endif
- endfor
-
- if show_buffer == 0
- continue
- endif
- endif
-
- let line = buf.attributes." "
-
- if g:bufExplorerSplitOutPathName
- let type = (g:bufExplorerShowRelativePath) ? "relativepath" : "path"
- let path = buf[type]
- let pad = (g:bufExplorerShowUnlisted) ? s:allpads.shortname : s:listedpads.shortname
- let line .= buf.shortname." ".strpart(pad.path, len(buf.shortname))
- else
- let type = (g:bufExplorerShowRelativePath) ? "relativename" : "fullname"
- let path = buf[type]
- let line .= path
- endif
-
- let pads = (g:bufExplorerShowUnlisted) ? s:allpads : s:listedpads
-
- if !empty(pads[type])
- let line .= strpart(pads[type], len(path))." "
- endif
-
- let line .= buf.line
-
- call add(lines, line)
- endfor
-
- call setline(s:firstBufferLine, lines)
-
- call s:BESortListing()
-endfunction
-
-" BESelectBuffer {{{1
-function! s:BESelectBuffer(...)
- " Sometimes messages are not cleared when we get here so it looks like an error has
- " occurred when it really has not.
- echo ""
-
- " Are we on a line with a file name?
- if line('.') < s:firstBufferLine
- exec "normal! \<cr>"
- return
- endif
-
- let _bufNbr = str2nr(getline('.'))
-
- " Check and see if we are running BE via WinManager.
- if exists("b:displayMode") && b:displayMode == "winmanager"
- let bufname = expand("#"._bufNbr.":p")
-
- if (a:0 == 1) && (a:1 == "tab")
- call WinManagerFileEdit(bufname, 1)
- else
- call WinManagerFileEdit(bufname, 0)
- endif
-
- return
- endif
-
- if bufexists(_bufNbr)
- if bufnr("#") == _bufNbr && !exists("g:bufExplorerChgWin")
- return s:BEClose("")
- endif
-
- " Are we suppose to open the selected buffer in a tab?
- if (a:0 == 1) && (a:1 == "tab")
- " Yes, we are to open the selected buffer in a tab.
-
- " Restore [BufExplorer] buffer.
- exec "keepjumps silent buffer!".s:originBuffer
-
- " Get the tab number where this buffer is located at.
- let tabNbr = s:BEGetTabNbr(_bufNbr)
-
- " Was the tab found?
- if tabNbr == 0
- " _bufNbr is not opened in any tabs. Open a new tab with the selected buffer in it.
- exec "999tab split +buffer" . _bufNbr
- else
- " The _bufNbr is already opened in tab, go to that tab.
- exec tabNbr . "tabnext"
-
- " Focus window.
- exec s:BEGetWinNbr(tabNbr, _bufNbr) . "wincmd w"
- endif
- else
- "No, the use did not ask to open the selected buffer in a tab.
-
- " Are we suppose to move to the tab where this active buffer is?
- if exists("g:bufExplorerChgWin")
- exe g:bufExplorerChgWin."wincmd w"
- elseif bufloaded(_bufNbr) && g:bufExplorerFindActive
- " Close the BE window.
- call s:BEClose("")
-
- " Get the tab number where this buffer is located at.
- let tabNbr = s:BEGetTabNbr(_bufNbr)
-
- " Was the tab found?
- if tabNbr != 0
- " The buffer is located in a tab. Go to that tab number.
- exec tabNbr . "tabnext"
- else
- " Nope, the buffer is not in a tab, simple switch to that buffer.
- let bufname = expand("#"._bufNbr.":p")
- exec bufname ? "drop ".escape(bufname, " ") : "buffer "._bufNbr
- endif
- endif
-
- " Switch to the buffer.
- exec "keepalt keepjumps silent b!" _bufNbr
- endif
-
- " Make the buffer 'listed' again.
- call setbufvar(_bufNbr, "&buflisted", "1")
-
- " call any associated function references
- " g:bufExplorerFuncRef may be an individual function reference
- " or it may be a list containing function references.
- " It will ignore anything that's not a function reference.
- " See :help FuncRef for more on function references.
- if exists("g:BufExplorerFuncRef")
- if type(g:BufExplorerFuncRef) == 2
- keepj call g:BufExplorerFuncRef()
- elseif type(g:BufExplorerFuncRef) == 3
- for FncRef in g:BufExplorerFuncRef
- if type(FncRef) == 2
- keepj call FncRef()
- endif
- endfor
- endif
- endif
- else
- call s:BEError("Sorry, that buffer no longer exists, please select another")
- call s:BEDeleteBuffer(_bufNbr, "wipe")
- endif
-endfunction
-
-" BEDeleteBufferListing {{{1
-function! s:BEDeleteBufferListing(buf)
- if exists('s:raw_buffer_listing') && !empty(s:raw_buffer_listing)
- " Delete the buffer from the raw buffer list.
- " Careful use of ' and " so we do not have to escape all the \'s
- " Regex: ^\s*\(10\|20\)\>
- " ^ - Starting at the beginning of the string
- " \s* - optional whitespace
- " \(10\|20\) - either a 10 or a 20
- " \> - end of word (so it can't make 100 or 201)
- call filter(s:raw_buffer_listing, "v:val.attributes !~ '".'^\s*\('.substitute(a:buf, ' ', '\\|', 'g').'\)\>'."'")
- endif
-endfunction
-
-" BERemoveBuffer {{{1
-function! s:BERemoveBuffer(type, mode) range
- " Are we on a line with a file name?
- if line('.') < s:firstBufferLine
- return
- endif
-
- " These commands are to temporarily suspend the activity of winmanager.
- if exists("b:displayMode") && b:displayMode == "winmanager"
- call WinManagerSuspendAUs()
- endif
-
- let _bufNbrs = ''
-
- for lineNum in range(a:firstline, a:lastline)
- let line = getline(lineNum)
-
- if line =~ '^\s*\(\d\+\)'
- " Regex: ^\s*\(10\|20\)\>
- " ^ - Starting at the beginning of the string
- " \s* - optional whitespace
- " \zs - start the match here
- " \d\+ - any digits
- " \> - end of word (so it can't make 100 or 201)
- let bufNbr = matchstr(line, '^\s*\zs\d\+\>')
-
- " Add 0 to bufNbr to ensure Vim treats it as a Number
- " for use with the getbufvar() function
- if bufNbr !~ '^\d\+$' || getbufvar(bufNbr+0, '&modified') != 0
- call s:BEError("Sorry, no write since last change for buffer ".bufNbr.", unable to delete")
- else
- let _bufNbrs = _bufNbrs . (_bufNbrs==''?'':' '). bufNbr
- endif
- endif
- endfor
-
- " Okay, everything is good, delete or wipe the buffers.
- call s:BEDeleteBuffer(_bufNbrs, a:type)
-
- " Reactivate winmanager autocommand activity.
- if exists("b:displayMode") && b:displayMode == "winmanager"
- call WinManagerForceReSize("BufExplorer")
- call WinManagerResumeAUs()
- endif
-endfunction
-
-" BEDeleteBuffer {{{1
-function! s:BEDeleteBuffer(bufNbr, mode)
- " This routine assumes that the buffer to be removed is on the current line.
- try
- if a:mode == "wipe"
- exe "bwipe" a:bufNbr
- else
- exe "bdelete" a:bufNbr
- endif
-
- setlocal modifiable
-
- " Remove each of the lines beginning with the buffer numbers we are removing
- " Regex: ^\s*\(10\|20\)\>
- " ^ - Starting at the beginning of the string
- " \s* - optional whitespace
- " \(10\|20\) - either a 10 or a 20
- " \> - end of word (so it can't make 100 or 201)
- exec 'silent! g/^\s*\('.substitute(a:bufNbr, ' ', '\\|', 'g').'\)\>/d_'
-
- setlocal nomodifiable
-
- call s:BEDeleteBufferListing(a:bufNbr)
- catch
- call s:BEError(v:exception)
- endtry
-endfunction
-
-" BEClose {{{1
-function! s:BEClose(mode)
- " Get only the listed buffers.
- let listed = filter(copy(s:MRUList), "buflisted(v:val)")
-
- " If we needed to split the main window, close the split one.
-" if (s:splitMode)
-" if (s:splitMode != "")
- if (s:splitMode != "" && a:mode == "quit")
- exec "wincmd c"
- endif
-
- if len(listed) == 0
- exe "enew"
- else
- for b in reverse(listed[0:1])
- exec "keepjumps silent b ".b
- endfor
- endif
-endfunction
-
-" BEToggleSplitOutPathName {{{1
-function! s:BEToggleSplitOutPathName()
- let g:bufExplorerSplitOutPathName = !g:bufExplorerSplitOutPathName
- call s:BERebuildBufferList()
- call s:BEUpdateHelpStatus()
-endfunction
-
-" BEToggleShowRelativePath {{{1
-function! s:BEToggleShowRelativePath()
- let g:bufExplorerShowRelativePath = !g:bufExplorerShowRelativePath
- call s:BERebuildBufferList()
- call s:BEUpdateHelpStatus()
-endfunction
-
-" BEToggleShowUnlisted {{{1
-function! s:BEToggleShowUnlisted()
- let g:bufExplorerShowUnlisted = !g:bufExplorerShowUnlisted
- let num_bufs = s:BERebuildBufferList(g:bufExplorerShowUnlisted == 0)
- call s:BEUpdateHelpStatus()
-endfunction
-
-" BEToggleFindActive {{{1
-function! s:BEToggleFindActive()
- let g:bufExplorerFindActive = !g:bufExplorerFindActive
- call s:BEUpdateHelpStatus()
-endfunction
-
-" BEToggleShowTabBuffer {{{1
-function! s:BEToggleShowTabBuffer()
- let g:bufExplorerShowTabBuffer = !g:bufExplorerShowTabBuffer
- call s:BEDisplayBufferList()
-endfunction
-
-" BEToggleOnlyOneTab {{{1
-function! s:BEToggleOnlyOneTab()
- let g:bufExplorerOnlyOneTab = !g:bufExplorerOnlyOneTab
- call s:BEDisplayBufferList()
-endfunction
-
-" BERebuildBufferList {{{1
-function! s:BERebuildBufferList(...)
- setlocal modifiable
-
- let curPos = getpos('.')
-
- if a:0
- " Clear the list first.
- exec "keepjumps ".s:firstBufferLine.',$d "_'
- endif
-
- let num_bufs = s:BEBuildBufferList()
-
- call setpos('.', curPos)
-
- setlocal nomodifiable
-
- return num_bufs
-endfunction
-
-" BEUpdateHelpStatus {{{1
-function! s:BEUpdateHelpStatus()
- setlocal modifiable
-
- let text = s:BEGetHelpStatus()
- call setline(s:firstBufferLine - 2, text)
-
- setlocal nomodifiable
-endfunction
-
-" BEMRUCmp {{{1
-function! s:BEMRUCmp(line1, line2)
- return index(s:MRUList, str2nr(a:line1)) - index(s:MRUList, str2nr(a:line2))
-endfunction
-
-" BESortReverse {{{1
-function! s:BESortReverse()
- let g:bufExplorerReverseSort = !g:bufExplorerReverseSort
- call s:BEReSortListing()
-endfunction
-
-" BESortSelect {{{1
-function! s:BESortSelect()
- let g:bufExplorerSortBy = get(s:sort_by, index(s:sort_by, g:bufExplorerSortBy) + 1, s:sort_by[0])
- call s:BEReSortListing()
-endfunction
-
-" BEReverseSortSelect {{{1
-function! s:BEReverseSortSelect()
- let g:bufExplorerSortBy = get(s:sort_by, (index(s:sort_by, g:bufExplorerSortBy) + len(s:sort_by) - 1) % len(s:sort_by), s:sort_by[0])
- call s:BEReSortListing()
-endfunction
-
-" BEReSortListing {{{1
-function! s:BEReSortListing()
- setlocal modifiable
-
- let curPos = getpos('.')
-
- call s:BESortListing()
- call s:BEUpdateHelpStatus()
-
- call setpos('.', curPos)
-
- setlocal nomodifiable
-endfunction
-
-" BESortListing {{{1
-function! s:BESortListing()
- let sort = s:firstBufferLine.",$sort".((g:bufExplorerReverseSort == 1) ? "!": "")
-
- if g:bufExplorerSortBy == "number"
- " Easiest case.
- exec sort 'n'
- elseif g:bufExplorerSortBy == "name"
- if g:bufExplorerSplitOutPathName
- exec sort 'ir /\d.\{7}\zs\f\+\ze/'
- else
- exec sort 'ir /\zs[^\/\\]\+\ze\s*line/'
- endif
- elseif g:bufExplorerSortBy == "fullpath"
- if g:bufExplorerSplitOutPathName
- " Sort twice - first on the file name then on the path.
- exec sort 'ir /\d.\{7}\zs\f\+\ze/'
- endif
-
- exec sort 'ir /\zs\f\+\ze\s\+line/'
- elseif g:bufExplorerSortBy == "extension"
- exec sort 'ir /\.\zs\w\+\ze\s/'
- elseif g:bufExplorerSortBy == "mru"
- let l = getline(s:firstBufferLine, "$")
-
- call sort(l, "<SID>BEMRUCmp")
-
- if g:bufExplorerReverseSort
- call reverse(l)
- endif
-
- call setline(s:firstBufferLine, l)
- endif
-endfunction
-
-" BEMRUListShow {{{1
-function! s:BEMRUListShow()
- echomsg "MRUList=".string(s:MRUList)
-endfunction
-
-" BEError {{{1
-function! s:BEError(msg)
- echohl ErrorMsg | echo a:msg | echohl none
-endfunction
-
-" BEWarning {{{1
-function! s:BEWarning(msg)
- echohl WarningMsg | echo a:msg | echohl none
-endfunction
-
-" GetTabNbr {{{1
-function! s:BEGetTabNbr(bufNbr)
- " Searching buffer bufno, in tabs.
- for i in range(tabpagenr("$"))
- if index(tabpagebuflist(i + 1), a:bufNbr) != -1
- return i + 1
- endif
- endfor
-
- return 0
-endfunction
-
-" GetWinNbr" {{{1
-function! s:BEGetWinNbr(tabNbr, bufNbr)
- " window number in tabpage.
- return index(tabpagebuflist(a:tabNbr), a:bufNbr) + 1
-endfunction
-
-" Winmanager Integration {{{1
-let g:BufExplorer_title = "\[Buf\ List\]"
-call s:BESet("g:bufExplorerResize", 1)
-call s:BESet("g:bufExplorerMaxHeight", 25) " Handles dynamic resizing of the window.
-
-" Function to start display. Set the mode to 'winmanager' for this buffer.
-" This is to figure out how this plugin was called. In a standalone fashion
-" or by winmanager.
-function! BufExplorer_Start()
- let b:displayMode = "winmanager"
- call StartBufExplorer("e")
-endfunction
-
-" Returns whether the display is okay or not.
-function! BufExplorer_IsValid()
- return 0
-endfunction
-
-" Handles dynamic refreshing of the window.
-function! BufExplorer_Refresh()
- let b:displayMode = "winmanager"
- call StartBufExplorer("e")
-endfunction
-
-function! BufExplorer_ReSize()
- if !g:bufExplorerResize
- return
- endif
-
- let nlines = min([line("$"), g:bufExplorerMaxHeight])
-
- exe nlines." wincmd _"
-
- " The following lines restore the layout so that the last file line is also
- " the last window line. Sometimes, when a line is deleted, although the
- " window size is exactly equal to the number of lines in the file, some of
- " the lines are pushed up and we see some lagging '~'s.
- let pres = getpos(".")
-
- exe $
-
- let _scr = &scrolloff
- let &scrolloff = 0
-
- normal! z-
-
- let &scrolloff = _scr
-
- call setpos(".", pres)
-endfunction
-
-" Default values {{{1
-call s:BESet("g:bufExplorerDefaultHelp", 1) " Show default help?
-call s:BESet("g:bufExplorerDetailedHelp", 0) " Show detailed help?
-call s:BESet("g:bufExplorerFindActive", 1) " When selecting an active buffer, take you to the window where it is active?
-call s:BESet("g:bufExplorerReverseSort", 0) " sort reverse?
-call s:BESet("g:bufExplorerShowDirectories", 1) " (Dir's are added by commands like ':e .')
-call s:BESet("g:bufExplorerShowRelativePath", 0) " Show listings with relative or absolute paths?
-call s:BESet("g:bufExplorerShowUnlisted", 0) " Show unlisted buffers?
-call s:BESet("g:bufExplorerSortBy", "mru") " Sorting methods are in s:sort_by:
-call s:BESet("g:bufExplorerSplitOutPathName", 1) " Split out path and file name?
-call s:BESet("g:bufExplorerSplitRight", &splitright) " Should vertical splits be on the right or left of current window?
-call s:BESet("g:bufExplorerSplitBelow", &splitbelow) " Should horizontal splits be below or above current window?
-call s:BESet("g:bufExplorerShowTabBuffer", 0) " Show only buffer(s) for this tab?
-call s:BESet("g:bufExplorerOnlyOneTab", 1) " If ShowTabBuffer = 1, only store the most recent tab for this buffer.
-
-" Global variables {{{1
-call s:BEReset()
-let s:running = 0
-let s:sort_by = ["number", "name", "fullpath", "mru", "extension"]
-let s:types = {"fullname": ':p', "path": ':p:h', "relativename": ':~:.', "relativepath": ':~:.:h', "shortname": ':t'}
-let s:originBuffer = 0
-let s:splitMode = ""
-let s:name = '[BufExplorer]'
-let s:refreshBufferList = 1
-let s:MRU_Exclude_List = ["[BufExplorer]","__MRU_Files__"]
-"1}}}
-
-" vim:ft=vim foldmethod=marker sw=2
diff --git a/vim/plugin/rspec.vim b/vim/plugin/rspec.vim
deleted file mode 100644
index d244476..0000000
--- a/vim/plugin/rspec.vim
+++ /dev/null
@@ -1,36 +0,0 @@
-fun! GetRubyBin()
- for [key, val] in items(g:ruby_bin_list)
- if match(expand("%:p"), key) == 0
- return val
- endif
- endfor
- return "ruby"
-endfun
-
-fun! GetSpecBin()
- for [key, val] in items(g:spec_bin_list)
- if match(expand("%:p"), key) == 0
- return val
- endif
- endfor
- return "spec"
-endfun
-
-fun! GetLibDirs()
- let l:lib_dirs = []
- for [key, val] in items(g:lib_dirs_list)
- if match(expand("%:p"), key) == 0
- call extend(l:lib_dirs, val)
- endif
- endfor
- return "-I\"".join(l:lib_dirs, "\" -I\"")."\""
-endfun
-
-fun! RunSpec()
- let l:current_file = expand("%:p")
- let l:ruby_bin = GetRubyBin()
- let l:spec_bin = GetSpecBin()
- let l:lib_dirs = GetLibDirs()
- let l:cmd = l:ruby_bin." ".l:lib_dirs." ".l:spec_bin." ".l:current_file
- exec "!".l:cmd
-endfun
diff --git a/vim/syntax/coffee.vim b/vim/syntax/coffee.vim
deleted file mode 100755
index c324435..0000000
--- a/vim/syntax/coffee.vim
+++ /dev/null
@@ -1,236 +0,0 @@
-" Language: CoffeeScript
-" Maintainer: Mick Koch <kchmck@gmail.com>
-" URL: http://github.com/kchmck/vim-coffee-script
-" License: WTFPL
-
-" Bail if our syntax is already loaded.
-if exists('b:current_syntax') && b:current_syntax == 'coffee'
- finish
-endif
-
-" Include JavaScript for coffeeEmbed.
-syn include @coffeeJS syntax/javascript.vim
-
-" Highlight long strings.
-syn sync minlines=100
-
-" CoffeeScript identifiers can have dollar signs.
-setlocal isident+=$
-
-" These are `matches` instead of `keywords` because vim's highlighting
-" priority for keywords is higher than matches. This causes keywords to be
-" highlighted inside matches, even if a match says it shouldn't contain them --
-" like with coffeeAssign and coffeeDot.
-syn match coffeeStatement /\<\%(return\|break\|continue\|throw\)\>/ display
-hi def link coffeeStatement Statement
-
-syn match coffeeRepeat /\<\%(for\|while\|until\|loop\)\>/ display
-hi def link coffeeRepeat Repeat
-
-syn match coffeeConditional /\<\%(if\|else\|unless\|switch\|when\|then\)\>/
-\ display
-hi def link coffeeConditional Conditional
-
-syn match coffeeException /\<\%(try\|catch\|finally\)\>/ display
-hi def link coffeeException Exception
-
-syn match coffeeKeyword /\<\%(new\|in\|of\|by\|and\|or\|not\|is\|isnt\|class\|extends\|super\|do\)\>/
-\ display
-" The `own` keyword is only a keyword after `for`.
-syn match coffeeKeyword /\<for\s\+own\>/ contained containedin=coffeeRepeat
-\ display
-hi def link coffeeKeyword Keyword
-
-syn match coffeeOperator /\<\%(instanceof\|typeof\|delete\)\>/ display
-hi def link coffeeOperator Operator
-
-" The first case matches symbol operators only if they have an operand before.
-syn match coffeeExtendedOp /\%(\S\s*\)\@<=[+\-*/%&|\^=!<>?.]\+\|[-=]>\|--\|++\|::/
-\ display
-syn match coffeeExtendedOp /\%(and\|or\)=/ display
-hi def link coffeeExtendedOp coffeeOperator
-
-" This is separate from `coffeeExtendedOp` to help differentiate commas from
-" dots.
-syn match coffeeSpecialOp /[,;]/ display
-hi def link coffeeSpecialOp SpecialChar
-
-syn match coffeeBoolean /\<\%(true\|on\|yes\|false\|off\|no\)\>/ display
-hi def link coffeeBoolean Boolean
-
-syn match coffeeGlobal /\<\%(null\|undefined\)\>/ display
-hi def link coffeeGlobal Type
-
-" A special variable
-syn match coffeeSpecialVar /\<\%(this\|prototype\|arguments\)\>/ display
-" An @-variable
-syn match coffeeSpecialVar /@\%(\I\i*\)\?/ display
-hi def link coffeeSpecialVar Special
-
-" A class-like name that starts with a capital letter
-syn match coffeeObject /\<\u\w*\>/ display
-hi def link coffeeObject Structure
-
-" A constant-like name in SCREAMING_CAPS
-syn match coffeeConstant /\<\u[A-Z0-9_]\+\>/ display
-hi def link coffeeConstant Constant
-
-" A variable name
-syn cluster coffeeIdentifier contains=coffeeSpecialVar,coffeeObject,
-\ coffeeConstant
-
-" A non-interpolated string
-syn cluster coffeeBasicString contains=@Spell,coffeeEscape
-" An interpolated string
-syn cluster coffeeInterpString contains=@coffeeBasicString,coffeeInterp
-
-" Regular strings
-syn region coffeeString start=/"/ skip=/\\\\\|\\"/ end=/"/
-\ contains=@coffeeInterpString
-syn region coffeeString start=/'/ skip=/\\\\\|\\'/ end=/'/
-\ contains=@coffeeBasicString
-hi def link coffeeString String
-
-" A integer, including a leading plus or minus
-syn match coffeeNumber /\i\@<![-+]\?\d\+\%([eE][+-]\?\d\+\)\?/ display
-" A hex number
-syn match coffeeNumber /\<0[xX]\x\+\>/ display
-hi def link coffeeNumber Number
-
-" A floating-point number, including a leading plus or minus
-syn match coffeeFloat /\i\@<![-+]\?\d*\.\@<!\.\d\+\%([eE][+-]\?\d\+\)\?/
-\ display
-hi def link coffeeFloat Float
-
-" An error for reserved keywords
-if !exists("coffee_no_reserved_words_error")
- syn match coffeeReservedError /\<\%(case\|default\|function\|var\|void\|with\|const\|let\|enum\|export\|import\|native\|__hasProp\|__extends\|__slice\|__bind\|__indexOf\)\>/
- \ display
- hi def link coffeeReservedError Error
-endif
-
-" This is separate from `coffeeExtendedOp` since assignments require it.
-syn match coffeeAssignOp /:/ contained display
-hi def link coffeeAssignOp coffeeOperator
-
-" Strings used in string assignments, which can't have interpolations
-syn region coffeeAssignString start=/"/ skip=/\\\\\|\\"/ end=/"/ contained
-\ contains=@coffeeBasicString
-syn region coffeeAssignString start=/'/ skip=/\\\\\|\\'/ end=/'/ contained
-\ contains=@coffeeBasicString
-hi def link coffeeAssignString String
-
-" A normal object assignment
-syn match coffeeObjAssign /@\?\I\i*\s*:\@<!::\@!/
-\ contains=@coffeeIdentifier,coffeeAssignOp
-hi def link coffeeObjAssign Identifier
-
-" An object-string assignment
-syn match coffeeObjStringAssign /\("\|'\)[^\1]*\1\s*;\@<!::\@!'\@!/
-\ contains=coffeeAssignString,coffeeAssignOp
-" An object-integer assignment
-syn match coffeeObjNumberAssign /\d\+\%(\.\d\+\)\?\s*:\@<!::\@!/
-\ contains=coffeeNumber,coffeeAssignOp
-
-syn keyword coffeeTodo TODO FIXME XXX contained
-hi def link coffeeTodo Todo
-
-syn match coffeeComment /#.*/ contains=@Spell,coffeeTodo
-hi def link coffeeComment Comment
-
-syn region coffeeBlockComment start=/####\@!/ end=/###/
-\ contains=@Spell,coffeeTodo
-hi def link coffeeBlockComment coffeeComment
-
-" A comment in a heregex
-syn region coffeeHeregexComment start=/#/ end=/\ze\/\/\/\|$/ contained
-\ contains=@Spell,coffeeTodo
-hi def link coffeeHeregexComment coffeeComment
-
-" Embedded JavaScript
-syn region coffeeEmbed matchgroup=coffeeEmbedDelim
-\ start=/`/ skip=/\\\\\|\\`/ end=/`/
-\ contains=@coffeeJS
-hi def link coffeeEmbedDelim Delimiter
-
-syn region coffeeInterp matchgroup=coffeeInterpDelim start=/#{/ end=/}/ contained
-\ contains=@coffeeAll
-hi def link coffeeInterpDelim PreProc
-
-" A string escape sequence
-syn match coffeeEscape /\\\d\d\d\|\\x\x\{2\}\|\\u\x\{4\}\|\\./ contained display
-hi def link coffeeEscape SpecialChar
-
-" A regex -- must not follow a parenthesis, number, or identifier, and must not
-" be followed by a number
-syn region coffeeRegex start=/\%(\%()\|\i\@<!\d\)\s*\|\i\)\@<!\/=\@!\s\@!/
-\ skip=/\[[^\]]\{-}\/[^\]]\{-}\]/
-\ end=/\/[gimy]\{,4}\d\@!/
-\ oneline contains=@coffeeBasicString
-hi def link coffeeRegex String
-
-" A heregex
-syn region coffeeHeregex start=/\/\/\// end=/\/\/\/[gimy]\{,4}/
-\ contains=@coffeeInterpString,coffeeHeregexComment
-\ fold
-hi def link coffeeHeregex coffeeRegex
-
-" Heredoc strings
-syn region coffeeHeredoc start=/"""/ end=/"""/ contains=@coffeeInterpString
-\ fold
-syn region coffeeHeredoc start=/'''/ end=/'''/ contains=@coffeeBasicString
-\ fold
-hi def link coffeeHeredoc String
-
-" An error for trailing whitespace, as long as the line isn't just whitespace
-if !exists("coffee_no_trailing_space_error")
- syn match coffeeSpaceError /\S\@<=\s\+$/ display
- hi def link coffeeSpaceError Error
-endif
-
-" An error for trailing semicolons, for help transitioning from JavaScript
-if !exists("coffee_no_trailing_semicolon_error")
- syn match coffeeSemicolonError /;$/ display
- hi def link coffeeSemicolonError Error
-endif
-
-" Ignore reserved words in dot accesses.
-syn match coffeeDotAccess /\.\@<!\.\s*\I\i*/he=s+1 contains=@coffeeIdentifier
-hi def link coffeeDotAccess coffeeExtendedOp
-
-" Ignore reserved words in prototype accesses.
-syn match coffeeProtoAccess /::\s*\I\i*/he=s+2 contains=@coffeeIdentifier
-hi def link coffeeProtoAccess coffeeExtendedOp
-
-" This is required for interpolations to work.
-syn region coffeeCurlies matchgroup=coffeeCurly start=/{/ end=/}/
-\ contains=@coffeeAll
-syn region coffeeBrackets matchgroup=coffeeBracket start=/\[/ end=/\]/
-\ contains=@coffeeAll
-syn region coffeeParens matchgroup=coffeeParen start=/(/ end=/)/
-\ contains=@coffeeAll
-
-" These are highlighted the same as commas since they tend to go together.
-hi def link coffeeBlock coffeeSpecialOp
-hi def link coffeeBracket coffeeBlock
-hi def link coffeeCurly coffeeBlock
-hi def link coffeeParen coffeeBlock
-
-" This is used instead of TOP to keep things coffee-specific for good
-" embedding. `contained` groups aren't included.
-syn cluster coffeeAll contains=coffeeStatement,coffeeRepeat,coffeeConditional,
-\ coffeeException,coffeeKeyword,coffeeOperator,
-\ coffeeExtendedOp,coffeeSpecialOp,coffeeBoolean,
-\ coffeeGlobal,coffeeSpecialVar,coffeeObject,
-\ coffeeConstant,coffeeString,coffeeNumber,
-\ coffeeFloat,coffeeReservedError,coffeeObjAssign,
-\ coffeeObjStringAssign,coffeeObjNumberAssign,
-\ coffeeComment,coffeeBlockComment,coffeeEmbed,
-\ coffeeRegex,coffeeHeregex,coffeeHeredoc,
-\ coffeeSpaceError,coffeeSemicolonError,
-\ coffeeDotAccess,coffeeProtoAccess,
-\ coffeeCurlies,coffeeBrackets,coffeeParens
-
-if !exists('b:current_syntax')
- let b:current_syntax = 'coffee'
-endif
diff --git a/vim/syntax/eco.vim b/vim/syntax/eco.vim
deleted file mode 100755
index 485b356..0000000
--- a/vim/syntax/eco.vim
+++ /dev/null
@@ -1,62 +0,0 @@
-" Vim syntax file
-" Language: eco
-" Maintainer: Jay Adkisson
-" Mostly stolen from eruby.vim
-
-if !exists("g:eco_default_subtype")
- let g:eco_default_subtype = "html"
-endif
-
-if !exists("b:eco_subtype")
- let s:lines = getline(1)."\n".getline(2)."\n".getline(3)."\n".getline(4)."\n".getline(5)."\n".getline("$")
- let b:eco_subtype = matchstr(s:lines,'eco_subtype=\zs\w\+')
- if b:eco_subtype == ''
- let b:eco_subtype = matchstr(substitute(expand("%:t"),'\c\%(\.eco\)\+$','',''),'\.\zs\w\+$')
- endif
- if b:eco_subtype == 'rhtml'
- let b:eco_subtype = 'html'
- elseif b:eco_subtype == 'jst'
- let b:eco_subtype = 'html'
- elseif b:eco_subtype == 'rb'
- let b:eco_subtype = 'ruby'
- elseif b:eco_subtype == 'yml'
- let b:eco_subtype = 'yaml'
- elseif b:eco_subtype == 'js' || b:eco_subtype == 'json'
- let b:eco_subtype = 'javascript'
- elseif b:eco_subtype == 'txt'
- " Conventional; not a real file type
- let b:eco_subtype = 'text'
- elseif b:eco_subtype == ''
- if exists('b:current_syntax') && b:current_syntax != ''
- let b:eco_subtype = b:current_syntax
- else
- let b:eco_subtype = g:eco_default_subtype
- endif
- endif
-endif
-
-if exists("b:eco_subtype") && b:eco_subtype != '' && b:eco_subtype != 'eco'
- exec "runtime! syntax/".b:eco_subtype.".vim"
- syn include @coffeeTop syntax/coffee.vim
-endif
-
-syn cluster ecoRegions contains=ecoBlock,ecoExpression,ecoComment
-
-syn region ecoBlock matchgroup=ecoDelimiter start=/<%/ end=/%>/ contains=@coffeeTop containedin=ALLBUT,@ecoRegions keepend
-syn region ecoExpression matchgroup=ecoDelimiter start=/<%[=\-]/ end=/%>/ contains=@coffeeTop containedin=ALLBUT,@ecoRegions keepend
-syn region ecoComment matchgroup=ecoComment start=/<%#/ end=/%>/ contains=@coffeeTodo,@Spell containedin=ALLBUT,@ecoRegions keepend
-
-" eco features not in coffeescript proper
-syn keyword ecoEnd end containedin=@ecoRegions
-syn match ecoIndentColon /\s+\w+:/ containedin=@ecoRegions
-
-" Define the default highlighting.
-
-hi def link ecoDelimiter Delimiter
-hi def link ecoComment Comment
-hi def link ecoEnd coffeeConditional
-hi def link ecoIndentColon None
-
-let b:current_syntax = 'eco'
-
-" vim: nowrap sw=2 sts=2 ts=8:
diff --git a/vim/syntax/scala.vim b/vim/syntax/scala.vim
deleted file mode 100644
index 36605ab..0000000
--- a/vim/syntax/scala.vim
+++ /dev/null
@@ -1,151 +0,0 @@
-" Vim syntax file
-" Language : Scala (http://scala-lang.org/)
-" Maintainers: Stefan Matthias Aust, Julien Wetterwald
-" Last Change: 2007 June 13
-
-if version < 600
- syntax clear
-elseif exists("b:current_syntax")
- finish
-endif
-
-syn case match
-syn sync minlines=50
-
-" most Scala keywords
-syn keyword scalaKeyword abstract case catch do else extends final finally for forSome if implicit lazy match new null override private protected requires return sealed super this throw try type while with yield
-syn match scalaKeyword "=>"
-syn match scalaKeyword "<-"
-syn match scalaKeyword "\<_\>"
-
-syn match scalaOperator ":\{2,\}" "this is not a type
-
-" package and import statements
-syn keyword scalaPackage package nextgroup=scalaFqn skipwhite
-syn keyword scalaImport import nextgroup=scalaFqn skipwhite
-syn match scalaFqn "\<[._$a-zA-Z0-9,]*" contained nextgroup=scalaFqnSet
-syn region scalaFqnSet start="{" end="}" contained
-
-" boolean literals
-syn keyword scalaBoolean true false
-
-" definitions
-syn keyword scalaDef def nextgroup=scalaDefName skipwhite
-syn keyword scalaVal val nextgroup=scalaValName skipwhite
-syn keyword scalaVar var nextgroup=scalaVarName skipwhite
-syn keyword scalaClass class nextgroup=scalaClassName skipwhite
-syn keyword scalaObject object nextgroup=scalaClassName skipwhite
-syn keyword scalaTrait trait nextgroup=scalaClassName skipwhite
-syn match scalaDefName "[^ =:;([]\+" contained nextgroup=scalaDefSpecializer skipwhite
-syn match scalaValName "[^ =:;([]\+" contained
-syn match scalaVarName "[^ =:;([]\+" contained
-syn match scalaClassName "[^ =:;(\[]\+" contained nextgroup=scalaClassSpecializer skipwhite
-syn region scalaDefSpecializer start="\[" end="\]" contained contains=scalaDefSpecializer
-syn region scalaClassSpecializer start="\[" end="\]" contained contains=scalaClassSpecializer
-
-" type constructor (actually anything with an uppercase letter)
-syn match scalaConstructor "\<[A-Z][_$a-zA-Z0-9]*\>" nextgroup=scalaConstructorSpecializer
-syn region scalaConstructorSpecializer start="\[" end="\]" contained contains=scalaConstructorSpecializer
-
-" method call
-syn match scalaRoot "\<[a-zA-Z][_$a-zA-Z0-9]*\."me=e-1
-syn match scalaMethodCall "\.[a-z][_$a-zA-Z0-9]*"ms=s+1
-
-" type declarations in val/var/def
-syn match scalaType ":\s*\(=>\s*\)\?[._$a-zA-Z0-9]\+\(\[[^]]*\]\+\)\?\(\s*\(<:\|>:\|#\|=>\)\s*[._$a-zA-Z0-9]\+\(\[[^]]*\]\+\)*\)*"ms=s+1
-
-" comments
-syn match scalaTodo "[tT][oO][dD][oO]" contained
-syn match scalaLineComment "//.*" contains=scalaTodo
-syn region scalaComment start="/\*" end="\*/" contains=scalaTodo
-syn case ignore
-syn include @scalaHtml syntax/html.vim
-unlet b:current_syntax
-syn case match
-syn region scalaDocComment start="/\*\*" end="\*/" contains=scalaDocTags,scalaTodo,@scalaHtml keepend
-syn region scalaDocTags start="{@\(link\|linkplain\|inherit[Dd]oc\|doc[rR]oot\|value\)" end="}" contained
-syn match scalaDocTags "@[a-z]\+" contained
-
-syn match scalaEmptyString "\"\""
-
-" multi-line string literals
-syn region scalaMultiLineString start="\"\"\"" end="\"\"\"" contains=scalaUnicode
-syn match scalaUnicode "\\u[0-9a-fA-F]\{4}" contained
-
-" string literals with escapes
-syn region scalaString start="\"[^"]" skip="\\\"" end="\"" contains=scalaStringEscape " TODO end \n or not?
-syn match scalaStringEscape "\\u[0-9a-fA-F]\{4}" contained
-syn match scalaStringEscape "\\[nrfvb\\\"]" contained
-
-" symbol and character literals
-syn match scalaSymbol "'[_a-zA-Z0-9][_a-zA-Z0-9]*\>"
-syn match scalaChar "'[^'\\]'\|'\\.'\|'\\u[0-9a-fA-F]\{4}'"
-
-" number literals
-syn match scalaNumber "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>"
-syn match scalaNumber "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\="
-syn match scalaNumber "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>"
-syn match scalaNumber "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>"
-
-" xml literals
-syn match scalaXmlTag "<[a-zA-Z]\_[^>]*/>" contains=scalaXmlQuote,scalaXmlEscape,scalaXmlString
-syn region scalaXmlString start="\"" end="\"" contained
-syn match scalaXmlStart "<[a-zA-Z]\_[^>]*>" contained contains=scalaXmlQuote,scalaXmlEscape,scalaXmlString
-syn region scalaXml start="<\([a-zA-Z]\_[^>]*\_[^/]\|[a-zA-Z]\)>" matchgroup=scalaXmlStart end="</\_[^>]\+>" contains=scalaXmlEscape,scalaXmlQuote,scalaXml,scalaXmlStart,scalaXmlComment
-syn region scalaXmlEscape matchgroup=scalaXmlEscapeSpecial start="{" matchgroup=scalaXmlEscapeSpecial end="}" contained contains=TOP
-syn match scalaXmlQuote "&[^;]\+;" contained
-syn match scalaXmlComment "<!--\_[^>]*-->" contained
-
-syn sync fromstart
-
-" map Scala groups to standard groups
-hi link scalaKeyword Keyword
-hi link scalaPackage Include
-hi link scalaImport Include
-hi link scalaBoolean Boolean
-hi link scalaOperator Normal
-hi link scalaNumber Number
-hi link scalaEmptyString String
-hi link scalaString String
-hi link scalaChar String
-hi link scalaMultiLineString String
-hi link scalaStringEscape Special
-hi link scalaSymbol Special
-hi link scalaUnicode Special
-hi link scalaComment Comment
-hi link scalaLineComment Comment
-hi link scalaDocComment Comment
-hi link scalaDocTags Special
-hi link scalaTodo Todo
-hi link scalaType Type
-hi link scalaTypeSpecializer scalaType
-hi link scalaXml String
-hi link scalaXmlTag Include
-hi link scalaXmlString String
-hi link scalaXmlStart Include
-hi link scalaXmlEscape Normal
-hi link scalaXmlEscapeSpecial Special
-hi link scalaXmlQuote Special
-hi link scalaXmlComment Comment
-hi link scalaDef Keyword
-hi link scalaVar Keyword
-hi link scalaVal Keyword
-hi link scalaClass Keyword
-hi link scalaObject Keyword
-hi link scalaTrait Keyword
-hi link scalaDefName Function
-hi link scalaDefSpecializer Function
-hi link scalaClassName Special
-hi link scalaClassSpecializer Special
-hi link scalaConstructor Special
-hi link scalaConstructorSpecializer scalaConstructor
-
-let b:current_syntax = "scala"
-
-" you might like to put these lines in your .vimrc
-"
-" customize colors a little bit (should be a different file)
-" hi scalaNew gui=underline
-" hi scalaMethodCall gui=italic
-" hi scalaValName gui=underline
-" hi scalaVarName gui=underline