diff --git a/plugin/NERD_tree.vim b/plugin/NERD_tree.vim index e7cff2f..d5e55e3 100644 --- a/plugin/NERD_tree.vim +++ b/plugin/NERD_tree.vim @@ -129,7 +129,7 @@ call s:initVariable("g:NERDTreeMapUpdirKeepOpen", "U") "SECTION: Script level variable declaration{{{2 let s:escape_chars = " \\`\|\"#%&,?()\*^<>" -let s:NERDTreeWinName = '_NERD_tree_' +let s:NERDTreeBufName = '_NERD_tree_' let s:tree_wid = 2 let s:tree_markup_reg = '^[ `|]*[\-+~]' @@ -150,7 +150,7 @@ command! -n=1 -complete=customlist,s:completeBookmarks NERDTreeFromBookmark call " SECTION: Auto commands {{{1 "============================================================ "Save the cursor position whenever we close the nerd tree -exec "autocmd BufWinLeave *". s:NERDTreeWinName ." call saveScreenState()" +exec "autocmd BufWinLeave *". s:NERDTreeBufName ." call saveScreenState()" "cache bookmarks when vim loads autocmd VimEnter * call s:Bookmark.CacheBookmarks(0) @@ -285,7 +285,7 @@ endfunction " 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() : t:NERDTreeRoot + let searchRoot = a:searchFromAbsoluteRoot ? s:TreeDirNode.AbsoluteTreeRoot() : b:NERDTreeRoot let targetNode = searchRoot.findNode(self.path) if empty(targetNode) throw "NERDTree.BookmarkedNodeNotFound no node was found for bookmark: " . self.name @@ -458,7 +458,7 @@ endfunction function! s:TreeFileNode.copy(dest) call self.path.copy(a:dest) let newPath = s:Path.New(a:dest) - let parent = t:NERDTreeRoot.findNode(newPath.getParent()) + let parent = b:NERDTreeRoot.findNode(newPath.getParent()) if !empty(parent) call parent.refresh() endif @@ -571,29 +571,29 @@ endfunction "FUNCTION: TreeFileNode.isRoot() {{{3 -"returns 1 if this node is t:NERDTreeRoot +"returns 1 if this node is b:NERDTreeRoot function! s:TreeFileNode.isRoot() if !s:treeExistsForTab() throw "NERDTree.TreeFileNode.IsRoot exception: No tree exists for the current tab" endif - return self.equals(t:NERDTreeRoot) + 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 t:NERDTreeRoot = self + let b:NERDTreeRoot = self else call self.cacheParent() - let t:NERDTreeRoot = self.parent + let b:NERDTreeRoot = self.parent endif - call t:NERDTreeRoot.open() + call b:NERDTreeRoot.open() "change dir to the dir of the new root if instructed to if g:NERDTreeChDirMode == 2 - exec "cd " . t:NERDTreeRoot.path.strForEditCmd() + exec "cd " . b:NERDTreeRoot.path.strForEditCmd() endif endfunction "FUNCTION: TreeFileNode.New(path) {{{3 @@ -625,7 +625,7 @@ function! s:TreeFileNode.rename(newName) call self.parent.removeChild(self) let parentPath = self.path.getPathTrunk() - let newParent = t:NERDTreeRoot.findNode(parentPath) + let newParent = b:NERDTreeRoot.findNode(parentPath) if newParent != {} call newParent.createChild(self.path, 1) @@ -652,7 +652,7 @@ 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 = t:NERDTreeRoot + let currentNode = b:NERDTreeRoot while currentNode.parent != {} let currentNode = currentNode.parent endwhile @@ -1342,7 +1342,7 @@ function! s:Path.ignore() let lastPathComponent = self.getLastPathComponent(0) "filter out the user specified paths to ignore - if t:NERDTreeIgnoreEnabled + if b:NERDTreeIgnoreEnabled for i in g:NERDTreeIgnore if lastPathComponent =~ i return 1 @@ -1351,11 +1351,11 @@ function! s:Path.ignore() endif "dont show hidden files unless instructed to - if t:NERDTreeShowHidden == 0 && lastPathComponent =~ '^\.' + if b:NERDTreeShowHidden == 0 && lastPathComponent =~ '^\.' return 1 endif - if t:NERDTreeShowFiles == 0 && self.isDirectory == 0 + if b:NERDTreeShowFiles == 0 && self.isDirectory == 0 return 1 endif @@ -1702,30 +1702,32 @@ function! s:initNerdTree(name) exec 'cd ' . path.strForCd() endif - let t:treeShowHelp = 0 - let t:NERDTreeIgnoreEnabled = 1 - let t:NERDTreeShowFiles = g:NERDTreeShowFiles - let t:NERDTreeShowHidden = g:NERDTreeShowHidden - let t:NERDTreeShowBookmarks = g:NERDTreeShowBookmarks - if s:treeExistsForTab() if s:isTreeOpen() call s:closeTree() endif - unlet t:NERDTreeRoot + unlet b:NERDTreeRoot endif - let t:NERDTreeRoot = s:TreeDirNode.New(path) - call t:NERDTreeRoot.open() + 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 + call s:renderView() - call s:putCursorOnNode(t:NERDTreeRoot, 0, 0) + call s:putCursorOnNode(b:NERDTreeRoot, 0, 0) endfunction + " Function: s:treeExistsForTab() {{{2 " Returns 1 if a nerd tree root exists in the current tab function! s:treeExistsForTab() - return exists("t:NERDTreeRoot") + return exists("t:NERDTreeBufName") endfunction " SECTION: Public Functions {{{1 "============================================================ @@ -1821,8 +1823,10 @@ function! s:createTreeWin() let splitLocation = (g:NERDTreeWinPos == "top" || g:NERDTreeWinPos == "left") ? "topleft " : "botright " let splitMode = s:shouldSplitVertically() ? "vertical " : "" let splitSize = g:NERDTreeWinSize - let t:NERDTreeWinName = localtime() . s:NERDTreeWinName - let cmd = splitLocation . splitMode . splitSize . ' new ' . t:NERDTreeWinName + if !exists('t:NERDTreeBufName') + let t:NERDTreeBufName = localtime() . s:NERDTreeBufName + endif + let cmd = splitLocation . splitMode . splitSize . ' new ' . t:NERDTreeBufName silent! execute cmd setlocal winfixwidth @@ -1830,7 +1834,7 @@ function! s:createTreeWin() "throwaway buffer options setlocal noswapfile setlocal buftype=nofile - setlocal bufhidden=delete + "setlocal bufhidden=delete setlocal nowrap setlocal foldcolumn=0 setlocal nobuflisted @@ -1935,7 +1939,7 @@ endfunction "prints out the quick help function! s:dumpHelp() let old_h = @h - if t:treeShowHelp == 1 + 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" @@ -1993,10 +1997,10 @@ function! s:dumpHelp() let @h=@h."\"\n\" ----------------------------\n" let @h=@h."\" Tree filtering mappings~\n" - let @h=@h."\" ". g:NERDTreeMapToggleHidden .": hidden files (" . (t:NERDTreeShowHidden ? "on" : "off") . ")\n" - let @h=@h."\" ". g:NERDTreeMapToggleFilters .": file filters (" . (t:NERDTreeIgnoreEnabled ? "on" : "off") . ")\n" - let @h=@h."\" ". g:NERDTreeMapToggleFiles .": files (" . (t:NERDTreeShowFiles ? "on" : "off") . ")\n" - let @h=@h."\" ". g:NERDTreeMapToggleBookmarks .": bookmarks (" . (t:NERDTreeShowBookmarks ? "on" : "off") . ")\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" let @h=@h."\"\n\" ----------------------------\n" let @h=@h."\" Other mappings~\n" @@ -2059,7 +2063,7 @@ function! s:findNodeLineNumber(treenode) let totalLines = line("$") "the path components we have matched so far - let pathcomponents = [substitute(t:NERDTreeRoot.path.str(0), '/ *$', '', '')] + let pathcomponents = [substitute(b:NERDTreeRoot.path.str(0), '/ *$', '', '')] "the index of the component we are searching for let curPathComponent = 1 @@ -2137,7 +2141,7 @@ function! s:getPath(ln) "check to see if we have the root node if line =~ '^\/' - return t:NERDTreeRoot.path + return b:NERDTreeRoot.path endif " in case called from outside the tree @@ -2146,7 +2150,7 @@ function! s:getPath(ln) endif if line == s:tree_up_dir_line - return t:NERDTreeRoot.path.getParent() + return b:NERDTreeRoot.path.getParent() endif let indent = s:indentLevelFor(line) @@ -2183,7 +2187,7 @@ function! s:getPath(ln) endif endif endwhile - let curFile = t:NERDTreeRoot.path.drive . dir . curFile + let curFile = b:NERDTreeRoot.path.drive . dir . curFile let toReturn = s:Path.New(curFile) return toReturn endfunction @@ -2223,7 +2227,7 @@ function! s:getSelectedNode() if path == {} return {} endif - return t:NERDTreeRoot.findNode(path) + return b:NERDTreeRoot.findNode(path) catch /^NERDTree/ return {} endtry @@ -2231,8 +2235,8 @@ endfunction "FUNCTION: s:getTreeWinNum() {{{2 "gets the nerd tree window number for this tab function! s:getTreeWinNum() - if exists("t:NERDTreeWinName") - return bufwinnr(t:NERDTreeWinName) + if exists("t:NERDTreeBufName") + return bufwinnr(t:NERDTreeBufName) else return -1 endif @@ -2455,7 +2459,7 @@ function! s:openNodeSplit(treenode) "resize the tree window if no other window was open before if onlyOneWin - let size = exists("t:NERDTreeOldWindowSize") ? t:NERDTreeOldWindowSize : g:NERDTreeWinSize + let size = exists("b:NERDTreeOldWindowSize") ? b:NERDTreeOldWindowSize : g:NERDTreeWinSize exec(there) exec("silent ". splitMode ." resize ". size) wincmd p @@ -2484,7 +2488,7 @@ endfunction "FUNCTION: s:putCursorOnBookmarkTable(){{{2 "Places the cursor at the top of the bookmarks table function! s:putCursorOnBookmarkTable() - if !t:NERDTreeShowBookmarks + if !b:NERDTreeShowBookmarks throw "NERDTree.IllegalOperation exception: cant find bookmark table, bookmarks arent active" endif @@ -2558,8 +2562,6 @@ endfunction " "Args: function! s:renderView() - execute s:getTreeWinNum() . "wincmd w" - setlocal modifiable "remember the top line of the buffer and the current line so we can @@ -2577,7 +2579,7 @@ function! s:renderView() call setline(line(".")+1, "") call cursor(line(".")+1, col(".")) - if t:NERDTreeShowBookmarks + if b:NERDTreeShowBookmarks call s:renderBookmarks() endif @@ -2586,11 +2588,11 @@ function! s:renderView() call cursor(line(".")+1, col(".")) "draw the header line - call setline(line(".")+1, t:NERDTreeRoot.path.str(0)) + call setline(line(".")+1, b:NERDTreeRoot.path.str(0)) call cursor(line(".")+1, col(".")) "draw the tree - call s:drawTree(t:NERDTreeRoot, 0, 0, [], t:NERDTreeRoot.getChildCount() == 1) + call s:drawTree(b:NERDTreeRoot, 0, 0, [], b:NERDTreeRoot.getChildCount() == 1) "delete the blank line at the top of the buffer silent 1,1delete _ @@ -2631,16 +2633,16 @@ endfunction " "Assumes the cursor is in the NERDTree window function! s:restoreScreenState() - if !exists("t:NERDTreeOldTopLine") || !exists("t:NERDTreeOldPos") || !exists("t:NERDTreeOldWindowSize") + if !exists("b:NERDTreeOldTopLine") || !exists("b:NERDTreeOldPos") || !exists("b:NERDTreeOldWindowSize") return endif - exec("silent ". (s:shouldSplitVertically() ? "vertical" : "") ." resize ".t:NERDTreeOldWindowSize) + exec("silent ". (s:shouldSplitVertically() ? "vertical" : "") ." resize ".b:NERDTreeOldWindowSize) let old_scrolloff=&scrolloff let &scrolloff=0 - call cursor(t:NERDTreeOldTopLine, 0) + call cursor(b:NERDTreeOldTopLine, 0) normal! zt - call setpos(".", t:NERDTreeOldPos) + call setpos(".", b:NERDTreeOldPos) let &scrolloff=old_scrolloff endfunction @@ -2651,9 +2653,9 @@ function! s:saveScreenState() let win = winnr() try call s:putCursorInTreeWin() - let t:NERDTreeOldPos = getpos(".") - let t:NERDTreeOldTopLine = line("w0") - let t:NERDTreeOldWindowSize = s:shouldSplitVertically() ? winwidth("") : winheight("") + let b:NERDTreeOldPos = getpos(".") + let b:NERDTreeOldTopLine = line("w0") + let b:NERDTreeOldWindowSize = s:shouldSplitVertically() ? winwidth("") : winheight("") exec win . "wincmd w" catch /NERDTree.view.InvalidOperation/ endtry @@ -2803,8 +2805,6 @@ function! s:toggle(dir) if s:treeExistsForTab() if !s:isTreeOpen() call s:createTreeWin() - call s:renderView() - call s:restoreScreenState() else call s:closeTree() @@ -2985,7 +2985,7 @@ function! s:chRoot() call treenode.makeRoot() call s:renderView() - call s:putCursorOnNode(t:NERDTreeRoot, 0, 0) + call s:putCursorOnNode(b:NERDTreeRoot, 0, 0) endfunction " FUNCTION: s:clearBookmarks(bookmarks) {{{2 @@ -3153,7 +3153,7 @@ endfunction " FUNCTION: s:displayHelp() {{{2 " toggles the help display function! s:displayHelp() - let t:treeShowHelp = t:treeShowHelp ? 0 : 1 + let b:treeShowHelp = b:treeShowHelp ? 0 : 1 call s:renderView() call s:centerView() endfunction @@ -3215,7 +3215,7 @@ function! s:insertNewNode() try let newPath = s:Path.Create(newNodeName) - let parentNode = t:NERDTreeRoot.findNode(newPath.getPathTrunk()) + let parentNode = b:NERDTreeRoot.findNode(newPath.getPathTrunk()) let newTreeNode = s:TreeFileNode.New(newPath) if parentNode.isOpen || !empty(parentNode.children) @@ -3259,7 +3259,7 @@ endfunction " FUNCTION: s:jumpToRoot() {{{2 " moves the cursor to the root node function! s:jumpToRoot() - call s:putCursorOnNode(t:NERDTreeRoot, 1, 0) + call s:putCursorOnNode(b:NERDTreeRoot, 1, 0) call s:centerView() endfunction @@ -3401,7 +3401,7 @@ endfunction " will be reloaded. function! s:refreshRoot() call s:echo("Refreshing the root node. This could take a while...") - call t:NERDTreeRoot.refresh() + call b:NERDTreeRoot.refresh() call s:renderView() redraw call s:echo("Refreshing the root node. This could take a while... DONE") @@ -3501,7 +3501,7 @@ endfunction " FUNCTION: s:toggleIgnoreFilter() {{{2 " toggles the use of the NERDTreeIgnore option function! s:toggleIgnoreFilter() - let t:NERDTreeIgnoreEnabled = !t:NERDTreeIgnoreEnabled + let b:NERDTreeIgnoreEnabled = !b:NERDTreeIgnoreEnabled call s:renderViewSavingPosition() call s:centerView() endfunction @@ -3509,8 +3509,8 @@ endfunction " FUNCTION: s:toggleShowBookmarks() {{{2 " toggles the display of bookmarks function! s:toggleShowBookmarks() - let t:NERDTreeShowBookmarks = !t:NERDTreeShowBookmarks - if t:NERDTreeShowBookmarks + let b:NERDTreeShowBookmarks = !b:NERDTreeShowBookmarks + if b:NERDTreeShowBookmarks call s:renderView() call s:putCursorOnBookmarkTable() else @@ -3521,7 +3521,7 @@ endfunction " FUNCTION: s:toggleShowFiles() {{{2 " toggles the display of hidden files function! s:toggleShowFiles() - let t:NERDTreeShowFiles = !t:NERDTreeShowFiles + let b:NERDTreeShowFiles = !b:NERDTreeShowFiles call s:renderViewSavingPosition() call s:centerView() endfunction @@ -3529,7 +3529,7 @@ endfunction " FUNCTION: s:toggleShowHidden() {{{2 " toggles the display of hidden files function! s:toggleShowHidden() - let t:NERDTreeShowHidden = !t:NERDTreeShowHidden + let b:NERDTreeShowHidden = !b:NERDTreeShowHidden call s:renderViewSavingPosition() call s:centerView() endfunction @@ -3541,24 +3541,24 @@ endfunction "keepState: 1 if the current root should be left open when the tree is "re-rendered function! s:upDir(keepState) - let cwd = t:NERDTreeRoot.path.str(0) + let cwd = b:NERDTreeRoot.path.str(0) if cwd == "/" || cwd =~ '^[^/]..$' call s:echo("already at top dir") else if !a:keepState - call t:NERDTreeRoot.close() + call b:NERDTreeRoot.close() endif - let oldRoot = t:NERDTreeRoot + let oldRoot = b:NERDTreeRoot - if empty(t:NERDTreeRoot.parent) - let path = t:NERDTreeRoot.path.getPathTrunk() + if empty(b:NERDTreeRoot.parent) + let path = b:NERDTreeRoot.path.getPathTrunk() let newRoot = s:TreeDirNode.New(path) call newRoot.open() - call newRoot.transplantChild(t:NERDTreeRoot) - let t:NERDTreeRoot = newRoot + call newRoot.transplantChild(b:NERDTreeRoot) + let b:NERDTreeRoot = newRoot else - let t:NERDTreeRoot = t:NERDTreeRoot.parent + let b:NERDTreeRoot = b:NERDTreeRoot.parent endif