" ============================================================================ " File: NERD_tree.vim " Maintainer: Martin Grenfell " 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. " " ============================================================================ " " 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 . ' = ' . "'" . substitute(a:value, "'", "''", "g") . "'" return 1 endif return 0 endfunction "SECTION: Init variable calls and other random constants {{{2 call s:initVariable("g:NERDTreeAutoCenter", 1) call s:initVariable("g:NERDTreeAutoCenterThreshold", 3) call s:initVariable("g:NERDTreeCaseSensitiveSort", 0) call s:initVariable("g:NERDTreeNaturalSort", 0) call s:initVariable("g:NERDTreeSortHiddenFirst", 1) call s:initVariable("g:NERDTreeChDirMode", 0) call s:initVariable("g:NERDTreeCreatePrefix", "silent") call s:initVariable("g:NERDTreeMinimalUI", 0) if !exists("g:NERDTreeIgnore") let g:NERDTreeIgnore = ['\~$'] endif call s:initVariable("g:NERDTreeBookmarksFile", expand('$HOME') . '/.NERDTreeBookmarks') call s:initVariable("g:NERDTreeBookmarksSort", 1) call s:initVariable("g:NERDTreeHighlightCursorline", 1) call s:initVariable("g:NERDTreeHijackNetrw", 1) call s:initVariable('g:NERDTreeMarkBookmarks', 1) call s:initVariable("g:NERDTreeMouseMode", 1) call s:initVariable("g:NERDTreeNotificationThreshold", 100) call s:initVariable("g:NERDTreeQuitOnOpen", 0) call s:initVariable("g:NERDTreeRespectWildIgnore", 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 !nerdtree#runningWindows() && !nerdtree#runningCygwin() call s:initVariable("g:NERDTreeDirArrowExpandable", "▸") call s:initVariable("g:NERDTreeDirArrowCollapsible", "▾") else call s:initVariable("g:NERDTreeDirArrowExpandable", "+") call s:initVariable("g:NERDTreeDirArrowCollapsible", "~") endif call s:initVariable("g:NERDTreeCascadeOpenSingleChildDir", 1) call s:initVariable("g:NERDTreeCascadeSingleChildDir", 1) if !exists("g:NERDTreeSortOrder") let g:NERDTreeSortOrder = ['\/$', '*', '\.swp$', '\.bak$', '\~$'] endif let g:NERDTreeOldSortOrder = [] call s:initVariable("g:NERDTreeGlyphReadOnly", "RO") " ASCII 160: non-breaking space used to delimit items in the tree's nodes. call s:initVariable("g:NERDTreeNodeDelimiter", "\u00a0") 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:NERDTree(its a b: var, and its a hash) let g:NERDTreeStatusline = "%{exists('b:NERDTree')?b:NERDTree.root.path.str():''}" endif call s:initVariable("g:NERDTreeWinPos", "left") call s:initVariable("g:NERDTreeWinSize", 31) "init the shell commands that will be used to copy nodes, and remove dir trees " "Note: the space after the command is important if nerdtree#runningWindows() call s:initVariable("g:NERDTreeRemoveDirCmd", 'rmdir /s /q ') call s:initVariable("g:NERDTreeCopyDirCmd", 'xcopy /s /e /i /y /q ') call s:initVariable("g:NERDTreeCopyFileCmd", 'copy /y ') 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", "") call s:initVariable("g:NERDTreeMapJumpParent", "p") call s:initVariable("g:NERDTreeMapJumpPrevSibling", "") 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") call s:initVariable("g:NERDTreeMapCWD", "CD") "SECTION: Load class files{{{2 call nerdtree#loadClassFiles() " SECTION: Commands {{{1 "============================================================ call nerdtree#ui_glue#setupCommands() " SECTION: Auto commands {{{1 "============================================================ augroup NERDTree "Save the cursor position whenever we close the nerd tree exec "autocmd BufLeave ". g:NERDTreeCreator.BufNamePrefix() ."* if g:NERDTree.IsOpen() | call b:NERDTree.ui.saveScreenState() | endif" "disallow insert mode in the NERDTree exec "autocmd BufEnter ". g:NERDTreeCreator.BufNamePrefix() ."* stopinsert" augroup END if g:NERDTreeHijackNetrw augroup NERDTreeHijackNetrw autocmd VimEnter * silent! autocmd! FileExplorer au BufEnter,VimEnter * call nerdtree#checkForBrowse(expand("")) augroup END endif " SECTION: Public API {{{1 "============================================================ function! NERDTreeAddMenuItem(options) call g:NERDTreeMenuItem.Create(a:options) endfunction function! NERDTreeAddMenuSeparator(...) let opts = a:0 ? a:1 : {} call g:NERDTreeMenuItem.CreateSeparator(opts) endfunction function! NERDTreeAddSubmenu(options) return g:NERDTreeMenuItem.Create(a:options) endfunction function! NERDTreeAddKeyMap(options) call g:NERDTreeKeyMap.Create(a:options) endfunction function! NERDTreeRender() call nerdtree#renderView() endfunction function! NERDTreeFocus() if g:NERDTree.IsOpen() call g:NERDTree.CursorToTreeWin() else call g:NERDTreeCreator.ToggleTabTree("") endif endfunction function! NERDTreeCWD() if empty(getcwd()) call nerdtree#echoWarning('current directory does not exist') return endif try let l:cwdPath = g:NERDTreePath.New(getcwd()) catch /^NERDTree.InvalidArgumentsError/ call nerdtree#echoWarning('current directory does not exist') return endtry call NERDTreeFocus() if b:NERDTree.root.path.equals(l:cwdPath) return endif let l:newRoot = g:NERDTreeFileNode.New(l:cwdPath, b:NERDTree) call b:NERDTree.changeRoot(l:newRoot) normal! ^ endfunction function! NERDTreeAddPathFilter(callback) call g:NERDTree.AddPathFilter(a:callback) endfunction " SECTION: Post Source Actions {{{1 call nerdtree#postSourceActions() "reset &cpo back to users setting let &cpo = s:old_cpo " vim: set sw=4 sts=4 et fdm=marker: