Permalink
Browse files

Merge pull request #180 from pendulm/master

For recusive open single directory child
  • Loading branch information...
2 parents dbeb194 + 29e6879 commit e7b663fe94ba94fc3b5d2856294bbe0ca4a98541 @scrooloose committed Jul 5, 2012
Showing with 44 additions and 3 deletions.
  1. +18 −0 doc/NERD_tree.txt
  2. +26 −3 plugin/NERD_tree.vim
View
@@ -654,6 +654,10 @@ NERD tree. These options should be set in your vimrc.
|'NERDTreeDirArrows'| Tells the NERD tree to use arrows instead of
+ ~ chars when displaying directories.
+|'NERDTreeCasadeOpenSingleChildDir'|
+ Casade open while selected directory has only
+ one child that also is a directory.
+
------------------------------------------------------------------------------
3.2. Customisation details *NERDTreeOptionDetails*
@@ -965,6 +969,20 @@ option: >
let NERDTreeDirArrows=1
<
+------------------------------------------------------------------------------
+ *'NERDTreeCasadeOpenSingleChildDir'*
+Values: 0 or 1
+Default: 0.
+
+This option tell NERDTree open the child directory if the selected opening
+directory has only one child that is a directory, and do same to sub-directory
+recursively. NERDTree will stop till it find a empty directory or this
+directory has more than one child. This option may be useful for Java projects.
+Use one of the follow lines to set this option: >
+ let NERDTreeCasadeOpenSingleChildDir=0
+ let NERDTreeCasadeOpenSingleChildDir=1
+<
+
==============================================================================
4. The NERD tree API *NERDTreeAPI*
View
@@ -69,6 +69,7 @@ call s:initVariable("g:NERDTreeShowHidden", 0)
call s:initVariable("g:NERDTreeShowLineNumbers", 0)
call s:initVariable("g:NERDTreeSortDirs", 1)
call s:initVariable("g:NERDTreeDirArrows", !s:running_windows)
+call s:initVariable("g:NERDTreeCasadeOpenSingleChildDir", 0)
if !exists("g:NERDTreeSortOrder")
let g:NERDTreeSortOrder = ['\/$', '*', '\.swp$', '\.bak$', '\~$']
@@ -1694,7 +1695,26 @@ function! s:TreeDirNode.open(...)
endif
endif
endfunction
-
+"FUNCTION: TreeDirNode.openAlong([opts]) {{{3
+"recursive open the dir if it has only one directory child.
+"
+"return the level of opened directories.
+function! s:TreeDirNode.openAlong(...)
+ let opts = a:0 ? a:1 : {}
+ let level = 0
+
+ let node = self
+ while node.path.isDirectory
+ call node.open(opts)
+ let level += 1
+ if node.getVisibleChildCount() == 1
+ let node = node.getChildByIndex(0, 1)
+ else
+ break
+ endif
+ endwhile
+ return level
+endfunction
" FUNCTION: TreeDirNode.openExplorer() {{{3
" opens an explorer window for this node in the previous window (could be a
" nerd tree or a netrw)
@@ -1857,10 +1877,13 @@ function! s:TreeDirNode.toggleOpen(...)
if self.isOpen ==# 1
call self.close()
else
- call self.open(opts)
+ if g:NERDTreeCasadeOpenSingleChildDir == 0
+ call self.open(opts)
+ else
+ call self.openAlong(opts)
+ endif
endif
endfunction
-
"FUNCTION: TreeDirNode.transplantChild(newNode) {{{3
"Replaces the child of this with the given node (where the child node's full
"path matches a:newNode's fullpath). The search for the matching node is

0 comments on commit e7b663f

Please sign in to comment.