commit 57788abd6fab6ec928b29a5619b8c0b1f686047e
parent fc14b4f5df9be4d1c1d67c99d841e634bd5472ea
Author: Jason Franklin <lifecrisis@users.noreply.github.com>
Date: Fri, 22 Dec 2017 09:44:04 -0500
Merge pull request #785 from lifecrisis/find-new-file
In certain cases, ":NERDTreeFind" would fail to reveal files that
were created/written after the current tab's NERDTree had been
initialized. This pull request repairs that problem.
Diffstat:
3 files changed, 47 insertions(+), 47 deletions(-)
diff --git a/autoload/nerdtree/ui_glue.vim b/autoload/nerdtree/ui_glue.vim
@@ -261,61 +261,55 @@ function! s:displayHelp()
call b:NERDTree.ui.centerView()
endfunction
-" FUNCTION: s:findAndRevealPath(path) {{{1
-function! s:findAndRevealPath(path)
- let l:path = a:path
+" FUNCTION: s:findAndRevealPath(pathStr) {{{1
+function! s:findAndRevealPath(pathStr)
+ let l:pathStr = !empty(a:pathStr) ? a:pathStr : expand('%:p')
- if empty(l:path)
- let l:path = expand('%:p')
+ if empty(l:pathStr)
+ call nerdtree#echoWarning('no file for the current buffer')
+ return
endif
-
+
try
- let p = g:NERDTreePath.New(l:path)
+ let l:pathObj = g:NERDTreePath.New(l:pathStr)
catch /^NERDTree.InvalidArgumentsError/
- call nerdtree#echo("no file for the current buffer")
+ call nerdtree#echoWarning('invalid path')
return
endtry
- if p.isUnixHiddenPath()
- let showhidden=g:NERDTreeShowHidden
+ if l:pathObj.isUnixHiddenPath()
+ let l:showHidden = g:NERDTreeShowHidden
let g:NERDTreeShowHidden = 1
endif
if !g:NERDTree.ExistsForTab()
try
- let cwd = g:NERDTreePath.New(getcwd())
+ let l:cwd = g:NERDTreePath.New(getcwd())
catch /^NERDTree.InvalidArgumentsError/
- call nerdtree#echo("current directory does not exist.")
- let cwd = p.getParent()
+ call nerdtree#echo('current directory does not exist.')
+ let l:cwd = l:pathObj.getParent()
endtry
- if p.isUnder(cwd)
- call g:NERDTreeCreator.CreateTabTree(cwd.str())
+ if l:pathObj.isUnder(l:cwd)
+ call g:NERDTreeCreator.CreateTabTree(l:cwd.str())
else
- call g:NERDTreeCreator.CreateTabTree(p.getParent().str())
+ call g:NERDTreeCreator.CreateTabTree(l:pathObj.getParent().str())
endif
else
- if !p.isUnder(g:NERDTreeFileNode.GetRootForTab().path)
- if !g:NERDTree.IsOpen()
- call g:NERDTreeCreator.ToggleTabTree('')
- else
- call g:NERDTree.CursorToTreeWin()
- endif
+ NERDTreeFocus
+
+ if !l:pathObj.isUnder(g:NERDTreeFileNode.GetRootForTab().path)
call b:NERDTree.ui.setShowHidden(g:NERDTreeShowHidden)
- call s:chRoot(g:NERDTreeDirNode.New(p.getParent(), b:NERDTree))
- else
- if !g:NERDTree.IsOpen()
- call g:NERDTreeCreator.ToggleTabTree("")
- endif
+ call s:chRoot(g:NERDTreeDirNode.New(l:pathObj.getParent(), b:NERDTree))
endif
endif
- call g:NERDTree.CursorToTreeWin()
- let node = b:NERDTree.root.reveal(p)
+
+ let l:node = b:NERDTree.root.reveal(l:pathObj)
call b:NERDTree.render()
- call node.putCursorHere(1,0)
+ call l:node.putCursorHere(1, 0)
- if p.isUnixHiddenFile()
- let g:NERDTreeShowHidden = showhidden
+ if l:pathObj.isUnixHiddenFile()
+ let g:NERDTreeShowHidden = l:showHidden
endif
endfunction
diff --git a/doc/NERDTree.txt b/doc/NERDTree.txt
@@ -126,20 +126,20 @@ The following features and functionality are provided by the NERD tree:
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.
+ 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.
+:NERDTreeFind [<path>] *:NERDTreeFind*
+ Without the optional argument, find and reveal the file for the active
+ buffer in the NERDTree window. With the <path> argument, find and
+ reveal the specified path.
- If no tree exists and the current file is under vim's CWD, then init a
- tree at the CWD and reveal the file. Otherwise init a tree in the current
- file's directory.
-
- In any case, the current file is revealed and the cursor is placed on it.
+ Focus will be shifted to the NERDTree window, and the cursor will be
+ placed on the tree node for the determined path. If a NERDTree for the
+ current tab does not exist, a new one will be initialized.
:NERDTreeCWD *:NERDTreeCWD*
Change tree root to current directory. If no NERD tree exists for this
@@ -1128,13 +1128,12 @@ NERDTreeAddKeyMap({options}) *NERDTreeAddKeyMap()*
Additionally, a "scope" argument may be supplied. This constrains the
mapping so that it is only activated if the cursor is on a certain object.
That object is then passed into the handling method. Possible values are:
- "FileNode" - a file node
- "DirNode" - a directory node
- "Node" - a file or directory node
- "Bookmark" - A bookmark
- "all" - the keymap is not constrained to any scope (default). When
- thei is used, the handling function is not passed any arguments.
+ "FileNode" .... a file node
+ "DirNode" ..... a directory node
+ "Node" ........ a file node OR a directory node
+ "Bookmark" .... a bookmark
+ "all" ......... global scope; handler receives no arguments (default)
Example: >
call NERDTreeAddKeyMap({
diff --git a/lib/nerdtree/tree_dir_node.vim b/lib/nerdtree/tree_dir_node.vim
@@ -568,6 +568,13 @@ function! s:TreeDirNode.reveal(path, ...)
throw "NERDTree.InvalidArgumentsError: " . a:path.str() . " should be under " . self.path.str()
endif
+ " Refresh "self.children" to avoid missing paths created after this node
+ " was last opened. If "self.children" is empty, the call to "open()" will
+ " initialize the children.
+ if !empty(self.children)
+ " Silence messages/errors. They were seen on the first open.
+ silent! call self._initChildren(1)
+ endif
call self.open()
if self.path.equals(a:path.getParent())