diff --git a/lib/nerdtree/path.vim b/lib/nerdtree/path.vim index 912c5372..20d7b681 100644 --- a/lib/nerdtree/path.vim +++ b/lib/nerdtree/path.vim @@ -39,10 +39,10 @@ endfunction " FUNCTION: Path.cacheDisplayString() {{{1 function! s:Path.cacheDisplayString() abort - let self.cachedDisplayString = self.getLastPathComponent(1) + let self.cachedDisplayString = g:NERDTreeNodeDelimiter . self.getLastPathComponent(1) if self.isExecutable - let self.cachedDisplayString = self.cachedDisplayString . '*' + let self.cachedDisplayString = self.addDelimiter(self.cachedDisplayString) . '*' endif let self._bookmarkNames = [] @@ -52,15 +52,24 @@ function! s:Path.cacheDisplayString() abort endif endfor if !empty(self._bookmarkNames) && g:NERDTreeMarkBookmarks == 1 - let self.cachedDisplayString .= ' {' . join(self._bookmarkNames) . '}' + let self.cachedDisplayString = self.addDelimiter(self.cachedDisplayString) . ' {' . join(self._bookmarkNames) . '}' endif if self.isSymLink - let self.cachedDisplayString .= ' -> ' . self.symLinkDest + let self.cachedDisplayString = self.addDelimiter(self.cachedDisplayString) . ' -> ' . self.symLinkDest endif if self.isReadOnly - let self.cachedDisplayString .= ' ['.g:NERDTreeGlyphReadOnly.']' + let self.cachedDisplayString = self.addDelimiter(self.cachedDisplayString) . ' ['.g:NERDTreeGlyphReadOnly.']' + endif +endfunction + +" FUNCTION: Path.addDelimiter() {{{1 +function! s:Path.addDelimiter(line) + if a:line =~# '\(.*' . g:NERDTreeNodeDelimiter . '\)\{2}' + return a:line + else + return a:line . g:NERDTreeNodeDelimiter endif endfunction diff --git a/lib/nerdtree/tree_dir_node.vim b/lib/nerdtree/tree_dir_node.vim index 04c598b4..016a5dcb 100644 --- a/lib/nerdtree/tree_dir_node.vim +++ b/lib/nerdtree/tree_dir_node.vim @@ -99,7 +99,8 @@ function! s:TreeDirNode.displayString() let l:label = '' let l:cascade = self.getCascade() for l:dirNode in l:cascade - let l:label .= l:dirNode.path.displayString() + let l:next = l:dirNode.path.displayString() + let l:label .= l:label == '' ? l:next : strcharpart(l:next,1) endfor " Select the appropriate open/closed status indicator symbol. @@ -304,9 +305,11 @@ function! s:TreeDirNode._glob(pattern, all) for l:file in l:globList let l:tail = fnamemodify(l:file, ':t') - " Double the modifier if only a separator was stripped. + " If l:file has a trailing slash, then its :tail will be ''. Use + " :h to drop the slash and the empty string after it; then use :t + " to get the directory name. if l:tail == '' - let l:tail = fnamemodify(l:file, ':t:t') + let l:tail = fnamemodify(l:file, ':h:t') endif if l:tail == '.' || l:tail == '..' diff --git a/lib/nerdtree/tree_file_node.vim b/lib/nerdtree/tree_file_node.vim index 52b61930..d4c060fc 100644 --- a/lib/nerdtree/tree_file_node.vim +++ b/lib/nerdtree/tree_file_node.vim @@ -242,7 +242,7 @@ endfunction " FUNCTION: TreeFileNode.openInNewTab(options) {{{1 function! s:TreeFileNode.openInNewTab(options) - echomsg 'TreeFileNode.openInNewTab is deprecated' + call nerdtree#deprecated('TreeFileNode.openinNewTab', 'is deprecated, use .open() instead.') call self.open(extend({'where': 't'}, a:options)) endfunction diff --git a/lib/nerdtree/ui.vim b/lib/nerdtree/ui.vim index 5ea13334..32d96d9b 100644 --- a/lib/nerdtree/ui.vim +++ b/lib/nerdtree/ui.vim @@ -300,7 +300,7 @@ endfunction " FUNCTION: s:UI.MarkupReg() {{{1 function! s:UI.MarkupReg() - return '^\(['.g:NERDTreeDirArrowExpandable.g:NERDTreeDirArrowCollapsible.'] \| \+['.g:NERDTreeDirArrowExpandable.g:NERDTreeDirArrowCollapsible.'] \| \+\)' + return '^ *['.g:NERDTreeDirArrowExpandable.g:NERDTreeDirArrowCollapsible.']\? ' endfunction " FUNCTION: s:UI._renderBookmarks {{{1 @@ -363,30 +363,13 @@ function! s:UI.setShowHidden(val) endfunction " FUNCTION: s:UI._stripMarkup(line){{{1 -" returns the given line with all the tree parts stripped off +" find the filename in the given line, and return it. " " Args: " line: the subject line function! s:UI._stripMarkup(line) - let line = a:line - " remove the tree parts and the leading space - let line = substitute (line, g:NERDTreeUI.MarkupReg(),"","") - - " strip off any read only flag - let line = substitute (line, ' \['.g:NERDTreeGlyphReadOnly.'\]', "","") - - " strip off any bookmark flags - let line = substitute (line, ' {[^}]*}', "","") - - " strip off any executable flags - let line = substitute (line, '*\ze\($\| \)', "","") - - " strip off any generic flags - let line = substitute (line, '\[[^]]*\]', "","") - - let line = substitute (line,' -> .*',"","") " remove link to - - return line + let l:line = substitute(a:line, '^.\{-}' . g:NERDTreeNodeDelimiter, '', '') + return substitute(l:line, g:NERDTreeNodeDelimiter.'.*$', '', '') endfunction " FUNCTION: s:UI.render() {{{1 diff --git a/plugin/NERD_tree.vim b/plugin/NERD_tree.vim index 2abd248a..62506e53 100644 --- a/plugin/NERD_tree.vim +++ b/plugin/NERD_tree.vim @@ -86,6 +86,9 @@ 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 diff --git a/syntax/nerdtree.vim b/syntax/nerdtree.vim index 7c80605c..dddce6d3 100644 --- a/syntax/nerdtree.vim +++ b/syntax/nerdtree.vim @@ -36,6 +36,15 @@ exec 'syn match NERDTreeRO # *\zs.*\ze \['.g:NERDTreeGlyphReadOnly.'\]# contains syn match NERDTreeFlags #^ *\zs\[.\]# containedin=NERDTreeFile,NERDTreeExecFile syn match NERDTreeFlags #\[.\]# containedin=NERDTreeDir +"highlighing to conceal the delimiter around the file/dir name +if has("conceal") + exec 'syn match NERDTreeNodeDelimiters #' . g:NERDTreeNodeDelimiter . '# conceal containedin=NERDTreeFile,NERDTreeLinkFile,NERDTreeExecFile,NERDTreeRO,NERDTreeDir' + setlocal conceallevel=2 concealcursor=nvic +else + exec 'syn match NERDTreeNodeDelimiters #' . g:NERDTreeNodeDelimiter . '# containedin=NERDTreeFile,NERDTreeLinkFile,NERDTreeExecFile,NERDTreeRO,NERDTreeDir' + hi! link NERDTreeNodeDelimiters Ignore +endif + syn match NERDTreeCWD #^[