commit e99a7a03139314997b1a83bea181bb6b36639514
parent 1e2b7ef98d87955f7b9e6d1cfcad49df7e47cd5b
Author: Phil Runninger (mac) <prunninger@vhtcx.com>
Date: Fri, 27 Jul 2018 08:46:50 -0400
Restore the cached _sortKey for faster processing.
Also add a new global variable to track when the g:NERDTreeSortOrder
changes. If it has been changed, or when the cached _sortKey value is
uninitialized, then calculate the sort key. This improves processing
speed over the previous commit, and allows on-the-fly changes to the
sort order, (without required vim to be restarted.)
Diffstat:
3 files changed, 15 insertions(+), 11 deletions(-)
diff --git a/lib/nerdtree/path.vim b/lib/nerdtree/path.vim
@@ -392,17 +392,19 @@ endfunction
" FUNCTION: Path.getSortKey() {{{1
" returns a key used in compare function for sorting
function! s:Path.getSortKey()
- let path = self.getLastPathComponent(1)
- if !g:NERDTreeSortHiddenFirst
- let path = substitute(path, '^[._]', '', '')
- endif
- if !g:NERDTreeCaseSensitiveSort
- let path = tolower(path)
- endif
- if !g:NERDTreeNaturalSort
- let self._sortKey = [self.getSortOrderIndex(), path]
- else
- let self._sortKey = [self.getSortOrderIndex()] + self._splitChunks(path)
+ if !exists("self._sortKey") || g:NERDTreeSortOrder !=# g:NERDTreeOldSortOrder
+ let path = self.getLastPathComponent(1)
+ if !g:NERDTreeSortHiddenFirst
+ let path = substitute(path, '^[._]', '', '')
+ endif
+ if !g:NERDTreeCaseSensitiveSort
+ let path = tolower(path)
+ endif
+ if !g:NERDTreeNaturalSort
+ let self._sortKey = [self.getSortOrderIndex(), path]
+ else
+ let self._sortKey = [self.getSortOrderIndex()] + self._splitChunks(path)
+ endif
endif
return self._sortKey
diff --git a/lib/nerdtree/tree_dir_node.vim b/lib/nerdtree/tree_dir_node.vim
@@ -612,6 +612,7 @@ function! s:TreeDirNode.sortChildren()
endif
let CompareFunc = function("nerdtree#compareNodesBySortKey")
call sort(self.children, CompareFunc)
+ let g:NERDTreeOldSortOrder = g:NERDTreeSortOrder
endfunction
" FUNCTION: TreeDirNode.toggleOpen([options]) {{{1
diff --git a/plugin/NERD_tree.vim b/plugin/NERD_tree.vim
@@ -82,6 +82,7 @@ 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")