diff --git a/autoload/nerdtree/ui_glue.vim b/autoload/nerdtree/ui_glue.vim index 592d220..2aa3bec 100644 --- a/autoload/nerdtree/ui_glue.vim +++ b/autoload/nerdtree/ui_glue.vim @@ -207,15 +207,14 @@ endfunction " FUNCTION: s:closeTreeWindow() {{{1 " close the tree window function! s:closeTreeWindow() - if b:NERDTree.isWinTree() - bp - return - endif - - if winnr("$") > 1 - call g:NERDTree.Close() + if b:NERDTree.isWinTree() && b:NERDTree.previousBuf() != -1 + exec "buffer " . b:NERDTree.previousBuf() else - call nerdtree#echo("Cannot close last window") + if winnr("$") > 1 + call g:NERDTree.Close() + else + call nerdtree#echo("Cannot close last window") + endif endif endfunction diff --git a/lib/nerdtree/creator.vim b/lib/nerdtree/creator.vim index 20bd32a..952811c 100644 --- a/lib/nerdtree/creator.vim +++ b/lib/nerdtree/creator.vim @@ -92,11 +92,14 @@ function! s:Creator.createWindowTree(dir) "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 window tree buffer to ensure they are "all independent exec g:NERDTreeCreatePrefix . " edit " . self._nextBufferName() call self._createNERDTree(path, "window") + let b:NERDTree._previousBuf = bufnr(previousBuf) call self._setCommonBufOptions() call b:NERDTree.render() diff --git a/lib/nerdtree/nerdtree.vim b/lib/nerdtree/nerdtree.vim index 3289705..73a30f7 100644 --- a/lib/nerdtree/nerdtree.vim +++ b/lib/nerdtree/nerdtree.vim @@ -181,6 +181,11 @@ function! s:NERDTree.PathFilters() return s:NERDTree._PathFilters endfunction +"FUNCTION: s:NERDTree.previousBuf() {{{1 +function! s:NERDTree.previousBuf() + return self._previousBuf +endfunction + "FUNCTION: s:NERDTree.render() {{{1 "A convenience function - since this is called often function! s:NERDTree.render()