mirror of
https://github.com/preservim/nerdtree.git
synced 2025-11-09 11:53:48 -05:00
Compare commits
23 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9aba1c17f6 | ||
|
|
0fc5d3f656 | ||
|
|
729abf8e9b | ||
|
|
96215c5da6 | ||
|
|
f4c455bc2f | ||
|
|
22904e41de | ||
|
|
d49c742daf | ||
|
|
a59a2f6177 | ||
|
|
2f399b9ba4 | ||
|
|
4b61723952 | ||
|
|
00ab690758 | ||
|
|
d4b4d69469 | ||
|
|
283559bd97 | ||
|
|
38442b06d4 | ||
|
|
ae0d744357 | ||
|
|
094074d8c6 | ||
|
|
9b192b4be4 | ||
|
|
5fcdd03f12 | ||
|
|
d89dbd354a | ||
|
|
ed273e108d | ||
|
|
03dec4cde4 | ||
|
|
171c3825fa | ||
|
|
be2e602efa |
@@ -122,7 +122,7 @@ For example, you could use bookmarks to tag all of your project directories.
|
||||
2.2.1. The Bookmark Table *NERDTreeBookmarkTable*
|
||||
|
||||
If the bookmark table is active (see |NERDTree-B| and
|
||||
|NERDTreeShowBookmarks|), it will be rendered above the tree. You can double
|
||||
|'NERDTreeShowBookmarks'|), it will be rendered above the tree. You can double
|
||||
click bookmarks or use the |NERDTree-o| mapping to activate them. See also,
|
||||
|NERDTree-t| and |NERDTree-T|
|
||||
|
||||
@@ -160,7 +160,7 @@ Note that the following commands are only available in the NERD tree buffer.
|
||||
Remove all bookmarks.
|
||||
|
||||
:ReadBookmarks
|
||||
Re-read the bookmarks in the |NERDTreeBookmarksFile|.
|
||||
Re-read the bookmarks in the |'NERDTreeBookmarksFile'|.
|
||||
|
||||
See also |:NERDTree| and |:NERDTreeFromBookmark|.
|
||||
|
||||
@@ -171,7 +171,7 @@ If invalid bookmarks are detected, the script will issue an error message and
|
||||
the invalid bookmarks will become unavailable for use.
|
||||
|
||||
These bookmarks will still be stored in the bookmarks file (see
|
||||
|NERDTreeBookmarksFile|), down the bottom. There will always be a blank line
|
||||
|'NERDTreeBookmarksFile'|), down the bottom. There will always be a blank line
|
||||
after the valid bookmarks but before the invalid ones.
|
||||
|
||||
Each line in the bookmarks file represents one bookmark. The proper format is:
|
||||
@@ -314,8 +314,8 @@ Applies to: directories.
|
||||
Recursively opens the selelected directory.
|
||||
|
||||
All files and directories are cached, but if a directory would not be
|
||||
displayed due to file filters (see |NERDTreeIgnore| |NERDTree-f|) or the
|
||||
hidden file filter (see |NERDTreeShowHidden|) then its contents are not
|
||||
displayed due to file filters (see |'NERDTreeIgnore'| |NERDTree-f|) or the
|
||||
hidden file filter (see |'NERDTreeShowHidden'|) then its contents are not
|
||||
cached. This is handy, especially if you have .svn directories.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
@@ -477,7 +477,7 @@ Default key: f
|
||||
Map option: NERDTreeMapToggleFilters
|
||||
Applies to: no restrictions.
|
||||
|
||||
Toggles whether file filters are used. See |NERDTreeIgnore| for details.
|
||||
Toggles whether file filters are used. See |'NERDTreeIgnore'| for details.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
*NERDTree-F*
|
||||
@@ -561,53 +561,53 @@ then id be grateful if you'd email me.
|
||||
The script provides the following options that can customise the behaviour the
|
||||
NERD tree. These options should be set in your vimrc.
|
||||
|
||||
|loaded_nerd_tree| Turns off the script.
|
||||
|'loaded_nerd_tree'| Turns off the script.
|
||||
|
||||
|NERDChristmasTree| Tells the NERD tree to make itself colourful
|
||||
|'NERDChristmasTree'| Tells the NERD tree to make itself colourful
|
||||
and pretty.
|
||||
|
||||
|NERDTreeAutoCenter| Controls whether the NERD tree window centers
|
||||
|'NERDTreeAutoCenter'| Controls whether the NERD tree window centers
|
||||
when the cursor moves within a specified
|
||||
distance to the top/bottom of the window.
|
||||
|NERDTreeAutoCenterThreshold| Controls the sensitivity of autocentering.
|
||||
|'NERDTreeAutoCenterThreshold'| Controls the sensitivity of autocentering.
|
||||
|
||||
|NERDTreeCaseSensitiveSort| Tells the NERD tree whether to be case
|
||||
|'NERDTreeCaseSensitiveSort'| Tells the NERD tree whether to be case
|
||||
sensitive or not when sorting nodes.
|
||||
|
||||
|NERDTreeChDirMode| Tells the NERD tree if/when it should change
|
||||
|'NERDTreeChDirMode'| Tells the NERD tree if/when it should change
|
||||
vim's current working directory.
|
||||
|
||||
|NERDTreeHighlightCursorline| Tell the NERD tree whether to highlight the
|
||||
|'NERDTreeHighlightCursorline'| Tell the NERD tree whether to highlight the
|
||||
current cursor line.
|
||||
|
||||
|NERDTreeIgnore| Tells the NERD tree which files to ignore.
|
||||
|'NERDTreeIgnore'| Tells the NERD tree which files to ignore.
|
||||
|
||||
|NERDTreeBookmarksFile| Where the bookmarks are stored.
|
||||
|'NERDTreeBookmarksFile'| Where the bookmarks are stored.
|
||||
|
||||
|NERDTreeMouseMode| Tells the NERD tree how to handle mouse
|
||||
|'NERDTreeMouseMode'| Tells the NERD tree how to handle mouse
|
||||
clicks.
|
||||
|
||||
|NERDTreeQuitOnOpen| Closes the tree window after opening a file.
|
||||
|'NERDTreeQuitOnOpen'| Closes the tree window after opening a file.
|
||||
|
||||
|NERDTreeShowBookmarks| Tells the NERD tree whether to display the
|
||||
|'NERDTreeShowBookmarks'| Tells the NERD tree whether to display the
|
||||
bookmarks table on startup.
|
||||
|
||||
|NERDTreeShowFiles| Tells the NERD tree whether to display files
|
||||
|'NERDTreeShowFiles'| Tells the NERD tree whether to display files
|
||||
in the tree on startup.
|
||||
|
||||
|NERDTreeShowHidden| Tells the NERD tree whether to display hidden
|
||||
|'NERDTreeShowHidden'| Tells the NERD tree whether to display hidden
|
||||
files on startup.
|
||||
|
||||
|NERDTreeShowLineNumbers| Tells the NERD tree whether to display line
|
||||
|'NERDTreeShowLineNumbers'| Tells the NERD tree whether to display line
|
||||
numbers in the tree window.
|
||||
|
||||
|NERDTreeSortOrder| Tell the NERD tree how to sort the nodes in
|
||||
|'NERDTreeSortOrder'| Tell the NERD tree how to sort the nodes in
|
||||
the tree.
|
||||
|
||||
|NERDTreeWinPos| Tells the script where to put the NERD tree
|
||||
|'NERDTreeWinPos'| Tells the script where to put the NERD tree
|
||||
window.
|
||||
|
||||
|NERDTreeWinSize| Sets the window size when the NERD tree is
|
||||
|'NERDTreeWinSize'| Sets the window size when the NERD tree is
|
||||
opened.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
@@ -616,13 +616,13 @@ NERD tree. These options should be set in your vimrc.
|
||||
To enable any of the below options you should put the given line in your
|
||||
~/.vimrc
|
||||
|
||||
*loaded_nerd_tree*
|
||||
*'loaded_nerd_tree'*
|
||||
If this plugin is making you feel homicidal, it may be a good idea to turn it
|
||||
off with this line in your vimrc: >
|
||||
let loaded_nerd_tree=1
|
||||
<
|
||||
------------------------------------------------------------------------------
|
||||
*NERDChristmasTree*
|
||||
*'NERDChristmasTree'*
|
||||
Values: 0 or 1.
|
||||
Default: 1.
|
||||
|
||||
@@ -632,12 +632,12 @@ added to the nerd tree to make it more colourful.
|
||||
Set it to 0 for a more vanilla looking tree.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
*NERDTreeAutoCenter*
|
||||
*'NERDTreeAutoCenter'*
|
||||
Values: 0 or 1.
|
||||
Default: 1
|
||||
|
||||
If set to 1, the NERD tree window will center around the cursor if it moves to
|
||||
within |NERDTreeAutoCenterThreshold| lines of the top/bottom of the window.
|
||||
within |'NERDTreeAutoCenterThreshold'| lines of the top/bottom of the window.
|
||||
|
||||
This is ONLY done in response to tree navigation mappings,
|
||||
i.e. |NERDTree-J| |NERDTree-K| |NERDTree-C-J| |NERDTree-c-K| |NERDTree-p|
|
||||
@@ -646,15 +646,15 @@ i.e. |NERDTree-J| |NERDTree-K| |NERDTree-C-J| |NERDTree-c-K| |NERDTree-p|
|
||||
The centering is done with a |zz| operation.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
*NERDTreeAutoCenterThreshold*
|
||||
*'NERDTreeAutoCenterThreshold'*
|
||||
Values: Any natural number.
|
||||
Default: 3
|
||||
|
||||
This option controls the "sensitivity" of the NERD tree auto centering. See
|
||||
|NERDTreeAutoCenter| for details.
|
||||
|'NERDTreeAutoCenter'| for details.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
*NERDTreeCaseSensitiveSort*
|
||||
*'NERDTreeCaseSensitiveSort'*
|
||||
Values: 0 or 1.
|
||||
Default: 0.
|
||||
|
||||
@@ -675,7 +675,7 @@ account. The above nodes would then be sorted like this: >
|
||||
boner.c
|
||||
<
|
||||
------------------------------------------------------------------------------
|
||||
*NERDTreeChDirMode*
|
||||
*'NERDTreeChDirMode'*
|
||||
|
||||
Values: 0, 1 or 2.
|
||||
Default: 0.
|
||||
@@ -698,7 +698,7 @@ is /home/marty/foobar and you make the node for /home/marty/foobar/baz the new
|
||||
root then the CWD will become /home/marty/foobar/baz.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
*NERDTreeHighlightCursorline*
|
||||
*'NERDTreeHighlightCursorline'*
|
||||
Values: 0 or 1.
|
||||
Default: 1.
|
||||
|
||||
@@ -706,13 +706,14 @@ If set to 1, the current cursor line in the NERD tree buffer will be
|
||||
highlighted. This is done using the |cursorline| option.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
*NERDTreeIgnore*
|
||||
*'NERDTreeIgnore'*
|
||||
Values: a list of regular expressions.
|
||||
Default: ['\~$'].
|
||||
|
||||
This option is used to specify which files the NERD tree should ignore. It
|
||||
must be a list of regular expressions. When the NERD tree is rendered, any
|
||||
files/dirs that match any of the regex's in NERDTreeIgnore wont be displayed.
|
||||
files/dirs that match any of the regex's in 'NERDTreeIgnore' wont be
|
||||
displayed.
|
||||
|
||||
For example if you put the following line in your vimrc: >
|
||||
let NERDTreeIgnore=['\.vim$', '\~$']
|
||||
@@ -728,14 +729,14 @@ The file filters can be turned on and off dynamically with the |NERDTree-f|
|
||||
mapping.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
*NERDTreeBookmarksFile*
|
||||
*'NERDTreeBookmarksFile'*
|
||||
Values: a path
|
||||
Default: $HOME/.NERDTreeBookmarks
|
||||
|
||||
This is where bookmarks are saved. See |NERDTreeBookmarkCommands|.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
*NERDTreeMouseMode*
|
||||
*'NERDTreeMouseMode'*
|
||||
Values: 1, 2 or 3.
|
||||
Default: 1.
|
||||
|
||||
@@ -753,7 +754,7 @@ then (to single click activate it) you must click somewhere in
|
||||
'application.rb'.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
*NERDTreeQuitOnOpen*
|
||||
*'NERDTreeQuitOnOpen'*
|
||||
|
||||
Values: 0 or 1.
|
||||
Default: 0
|
||||
@@ -762,16 +763,17 @@ If set to 1, the NERD tree window will close after opening a file with the
|
||||
|NERDTree-o| or |NERDTree-tab| mappings.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
*NERDTreeShowBookmarks*
|
||||
*'NERDTreeShowBookmarks'*
|
||||
Values: 0 or 1.
|
||||
Default: 0.
|
||||
|
||||
If this option is set to 1 then the bookmarks table will be displayed.
|
||||
|
||||
This option can be toggled dynamically, per tree, with the |NERDTree-B| mapping.
|
||||
This option can be toggled dynamically, per tree, with the |NERDTree-B|
|
||||
mapping.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
*NERDTreeShowFiles*
|
||||
*'NERDTreeShowFiles'*
|
||||
Values: 0 or 1.
|
||||
Default: 1.
|
||||
|
||||
@@ -783,7 +785,7 @@ mapping and is useful for drastically shrinking the tree when you are
|
||||
navigating to a different part of the tree.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
*NERDTreeShowHidden*
|
||||
*'NERDTreeShowHidden'*
|
||||
Values: 0 or 1.
|
||||
Default: 0.
|
||||
|
||||
@@ -795,7 +797,7 @@ of the follow lines to set this option: >
|
||||
<
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
*NERDTreeShowLineNumbers*
|
||||
*'NERDTreeShowLineNumbers'*
|
||||
Values: 0 or 1.
|
||||
Default: 0.
|
||||
|
||||
@@ -806,7 +808,7 @@ window. Use one of the follow lines to set this option: >
|
||||
<
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
*NERDTreeSortOrder*
|
||||
*'NERDTreeSortOrder'*
|
||||
Values: a list of regular expressions.
|
||||
Default: ['\/$', '*', '\.swp$', '\.bak$', '\~$']
|
||||
|
||||
@@ -821,8 +823,8 @@ all .h files. All files containing the string 'foobar' will be placed at the
|
||||
end. The star is a special flag: it tells the script that every node that
|
||||
doesnt match any of the other regexps should be placed here.
|
||||
|
||||
If no star is present in NERDTreeSortOrder then one is automatically appended
|
||||
to the array.
|
||||
If no star is present in 'NERDTreeSortOrder' then one is automatically
|
||||
appended to the array.
|
||||
|
||||
The regex '\/$' should be used to match directory nodes.
|
||||
|
||||
@@ -839,7 +841,7 @@ Other examples: >
|
||||
backup files will appear last with everything else preceding them.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
*NERDTreeWinPos*
|
||||
*'NERDTreeWinPos'*
|
||||
Values: "left", "right", "top" or "bottom"
|
||||
Default: "left".
|
||||
|
||||
@@ -854,7 +856,7 @@ plugins simultaneously. For example, you could have the taglist plugin on the
|
||||
left of the window and the NERD tree on the right.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
*NERDTreeWinSize*
|
||||
*'NERDTreeWinSize'*
|
||||
Values: a positive integer.
|
||||
Default: 31.
|
||||
|
||||
@@ -899,6 +901,30 @@ fridge for later ;)
|
||||
==============================================================================
|
||||
7. Changelog *NERDTreeChangelog*
|
||||
|
||||
2.14.3
|
||||
Thanks to tpope for the following:
|
||||
- use relative paths when doing edit commands if possible (useful if you
|
||||
have %f on your statusline for example)
|
||||
- allow relative paths for :NERDTree commands, eg ":NERDTree ../foo"
|
||||
- fix a bug where the script used the directory of the current buffer
|
||||
instead of vims cwd for the :NERDTree command
|
||||
- bugfix for read only node highlighting
|
||||
|
||||
2.14.2
|
||||
- when opening a file (with 'o' or double click) dont split the window
|
||||
unless we absolutely have to. This should make the script work better
|
||||
with other explorer plugins. Thanks to Ryan Penn, Simon Peter Nicholls
|
||||
and Michael
|
||||
- fix a bug where directories starting with a '+' char could not be opened.
|
||||
Thanks to Tomasz Chomiuk.
|
||||
- fix a bug where closing vim with :qa with a tree open in another tab
|
||||
would break, thanks to Denis Pokataev.
|
||||
- compatibility bugfix for older versions of vim, thanks to knekk for
|
||||
helping me track it down and to Sean Chou.
|
||||
|
||||
2.14.1
|
||||
- dont clobber &cpo. Thanks to godlygeek for the bug report.
|
||||
|
||||
2.14.0
|
||||
- fix a bug where the <c-w>o mapping would cause the tree window to be
|
||||
incorrectly sized when reopened.
|
||||
@@ -938,8 +964,8 @@ fridge for later ;)
|
||||
- applied a patch from Matan Nassau to add the NERDTreeQuitOnOpen option
|
||||
which closes the tree window after opening a file. See :help
|
||||
NERDTreeQuitOnOpen.
|
||||
- optimised the nerd tree rendering. Now it takes just over 1/3 of the time
|
||||
it previously took to render.
|
||||
- optimised the nerd tree rendering. Now it takes just over 1/3 of the
|
||||
time it previously took to render.
|
||||
- now the tree filter mappings toggle the filters "per tree" rather than
|
||||
globally. The global filter variables are used to set the initial filter
|
||||
settings for each new NERD tree.
|
||||
@@ -1015,9 +1041,9 @@ fridge for later ;)
|
||||
and you use <c-j/k> the cursor will jump to its PARENTS next/previous
|
||||
sibling. Go :help NERDTree-c-j and :help NERDTree-c-k for info.
|
||||
- Extended the behaviour of the J/K mappings. Now if the cursor is on the
|
||||
last child of a node and you push J/K it will jump down to the last child
|
||||
of the next/prev of its parents siblings that is open and has children.
|
||||
Go :help NERDTree-J and :help NERDTree-K for info.
|
||||
last child of a node and you push J/K it will jump down to the last
|
||||
child of the next/prev of its parents siblings that is open and has
|
||||
children. Go :help NERDTree-J and :help NERDTree-K for info.
|
||||
- The goal of these changes is to make tree navigation faster.
|
||||
- Reorganised the help page a bit.
|
||||
- Removed the E mapping.
|
||||
@@ -1057,8 +1083,8 @@ fridge for later ;)
|
||||
- Tree navigation changes:
|
||||
- Added J and K mappings to jump to last/first child of the current dir.
|
||||
Options to customise these mappings have also been added.
|
||||
- Remapped the jump to next/prev sibling commands to be <C-j> and <C-k> by
|
||||
default.
|
||||
- Remapped the jump to next/prev sibling commands to be <C-j> and <C-k>
|
||||
by default.
|
||||
These changes should hopefully make tree navigation mappings easier to
|
||||
remember and use as the j and k keys are simply reused 3 times (twice
|
||||
with modifier keys).
|
||||
@@ -1220,6 +1246,25 @@ NERDTreeQuitOnOpen was set.
|
||||
Thanks to Charlton Wang for reporting bugs with the 'o' mapping and with
|
||||
handling named pipes.
|
||||
|
||||
Chur to godlygeek for reporting a bug where &cpo was getting clobbered.
|
||||
|
||||
Cheers to knekk for helping me track down a bug when overwriting dictionary
|
||||
keys that only occurred in some versions of vim.
|
||||
|
||||
Thanks also to Sean Chou for the bug report about the above bug.
|
||||
|
||||
Thanks to Ryan Penn, Simon Peter Nicholls and Michael for pointing out an issue
|
||||
where the script was splitting constantly when using the 'o' mapping while
|
||||
other explorers were open.
|
||||
|
||||
Thanks to Tomasz Chomiuk for the bug report about the script failing when dir
|
||||
names began with a +.
|
||||
|
||||
Thanks to Denis Pokataev for the bug report about the script failing when
|
||||
closing vim with :qa with a tree open in another tab.
|
||||
|
||||
Thanks to tpope for his dope bug reporting.
|
||||
|
||||
==============================================================================
|
||||
9. License *NERDTreeLicense*
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
" File: NERD_tree.vim
|
||||
" Description: vim global plugin that provides a nice tree explorer
|
||||
" Maintainer: Martin Grenfell <martin_grenfell at msn dot com>
|
||||
" Last Change: 20 July, 2008
|
||||
" Last Change: 29 October, 2008
|
||||
" License: This program is free software. It comes without any warranty,
|
||||
" to the extent permitted by applicable law. You can redistribute
|
||||
" it and/or modify it under the terms of the Do What The Fuck You
|
||||
@@ -10,7 +10,7 @@
|
||||
" See http://sam.zoy.org/wtfpl/COPYING for more details.
|
||||
"
|
||||
" ============================================================================
|
||||
let s:NERD_tree_version = '2.14.0'
|
||||
let s:NERD_tree_version = '2.14.3'
|
||||
|
||||
" SECTION: Script init stuff {{{1
|
||||
"============================================================
|
||||
@@ -22,6 +22,11 @@ if v:version < 700
|
||||
finish
|
||||
endif
|
||||
let loaded_nerd_tree = 1
|
||||
|
||||
"for line continuation - i.e dont want C in &cpo
|
||||
let s:old_cpo = &cpo
|
||||
set cpo&vim
|
||||
|
||||
"Function: s:initVariable() function {{{2
|
||||
"This function is used to initialise a given variable to a given value. The
|
||||
"variable is only initialised if it does not exist prior
|
||||
@@ -127,8 +132,7 @@ let s:escape_chars = " \\`\|\"#%&,?()\*^<>"
|
||||
let s:NERDTreeWinName = '_NERD_tree_'
|
||||
|
||||
let s:tree_wid = 2
|
||||
let s:tree_markup_reg = '[ \-+~`|]'
|
||||
let s:tree_markup_reg_neg = '[^ \-+~`|]'
|
||||
let s:tree_markup_reg = '^[ `|]*[\-+~]'
|
||||
let s:tree_up_dir_line = '.. (up a dir)'
|
||||
|
||||
let s:os_slash = '/'
|
||||
@@ -136,7 +140,6 @@ if s:running_windows
|
||||
let s:os_slash = '\'
|
||||
endif
|
||||
|
||||
|
||||
" SECTION: Commands {{{1
|
||||
"============================================================
|
||||
"init the command that users start the nerd tree with
|
||||
@@ -355,7 +358,7 @@ endfunction
|
||||
function! s:Bookmark.toRoot()
|
||||
if self.validate()
|
||||
try
|
||||
let targetNode = s:Bookmark.GetNodeForName(self.name, 1)
|
||||
let targetNode = self.getNode(1)
|
||||
catch /NERDTree.BookmarkedNodeNotFound/
|
||||
let targetNode = s:TreeFileNode.New(s:Bookmark.BookmarkFor(self.name).path)
|
||||
endtry
|
||||
@@ -495,7 +498,7 @@ function! s:TreeFileNode.findNode(path)
|
||||
endif
|
||||
return {}
|
||||
endfunction
|
||||
"FUNCTION: TreeFileNode.findOpenDirSiblingWithChildren(direction) {{{3
|
||||
"FUNCTION: TreeFileNode.findOpenDirSiblingWithVisibleChildren(direction) {{{3
|
||||
"
|
||||
"Finds the next sibling for this node in the indicated direction. This sibling
|
||||
"must be a directory and may/may not have children as specified.
|
||||
@@ -505,7 +508,7 @@ endfunction
|
||||
"
|
||||
"Return:
|
||||
"a treenode object or {} if no appropriate sibling could be found
|
||||
function! s:TreeFileNode.findOpenDirSiblingWithChildren(direction)
|
||||
function! s:TreeFileNode.findOpenDirSiblingWithVisibleChildren(direction)
|
||||
"if we have no parent then we can have no siblings
|
||||
if self.parent != {}
|
||||
let nextSibling = self.findSibling(a:direction)
|
||||
@@ -708,6 +711,7 @@ endfunction
|
||||
"
|
||||
"Args:
|
||||
"path: a path object
|
||||
unlet s:TreeDirNode.findNode
|
||||
function! s:TreeDirNode.findNode(path)
|
||||
if a:path.equals(self.path)
|
||||
return self
|
||||
@@ -726,7 +730,6 @@ function! s:TreeDirNode.findNode(path)
|
||||
endif
|
||||
return {}
|
||||
endfunction
|
||||
|
||||
"FUNCTION: TreeDirNode.getChildCount() {{{3
|
||||
"Returns the number of children this node has
|
||||
function! s:TreeDirNode.getChildCount()
|
||||
@@ -824,7 +827,7 @@ endfunction
|
||||
"FUNCTION: TreeDirNode.hasVisibleChildren() {{{3
|
||||
"returns 1 if this node has any childre, 0 otherwise..
|
||||
function! s:TreeDirNode.hasVisibleChildren()
|
||||
return self.getChildCount() != 0
|
||||
return self.getVisibleChildCount() != 0
|
||||
endfunction
|
||||
|
||||
"FUNCTION: TreeDirNode._initChildren() {{{3
|
||||
@@ -882,6 +885,7 @@ endfunction
|
||||
"
|
||||
"Args:
|
||||
"path: a path object representing the full filesystem path to the file/dir that the node represents
|
||||
unlet s:TreeDirNode.New
|
||||
function! s:TreeDirNode.New(path)
|
||||
if a:path.isDirectory != 1
|
||||
throw "NERDTree.TreeDirNode.InvalidArguments exception. A TreeDirNode object must be instantiated with a directory Path object."
|
||||
@@ -943,6 +947,7 @@ function! s:TreeDirNode._openRecursively2(forceOpen)
|
||||
endfunction
|
||||
|
||||
"FUNCTION: TreeDirNode.refresh() {{{3
|
||||
unlet s:TreeDirNode.refresh
|
||||
function! s:TreeDirNode.refresh()
|
||||
call self.path.refresh()
|
||||
|
||||
@@ -1050,10 +1055,10 @@ endfunction
|
||||
let s:Path = {}
|
||||
"FUNCTION: Path.bookmarkNames() {{{3
|
||||
function! s:Path.bookmarkNames()
|
||||
if !exists("self.bookmarkNames")
|
||||
if !exists("self._bookmarkNames")
|
||||
call self.cacheDisplayString()
|
||||
endif
|
||||
return self.bookmarkNames
|
||||
return self._bookmarkNames
|
||||
endfunction
|
||||
"FUNCTION: Path.cacheDisplayString() {{{3
|
||||
function! s:Path.cacheDisplayString()
|
||||
@@ -1063,14 +1068,14 @@ function! s:Path.cacheDisplayString()
|
||||
let self.cachedDisplayString = self.cachedDisplayString . '*'
|
||||
endif
|
||||
|
||||
let self.bookmarkNames = []
|
||||
let self._bookmarkNames = []
|
||||
for i in s:Bookmark.Bookmarks()
|
||||
if i.path.equals(self)
|
||||
call add(self.bookmarkNames, i.name)
|
||||
call add(self._bookmarkNames, i.name)
|
||||
endif
|
||||
endfor
|
||||
if !empty(self.bookmarkNames)
|
||||
let self.cachedDisplayString .= ' {' . join(self.bookmarkNames) . '}'
|
||||
if !empty(self._bookmarkNames)
|
||||
let self.cachedDisplayString .= ' {' . join(self._bookmarkNames) . '}'
|
||||
endif
|
||||
|
||||
if self.isSymLink
|
||||
@@ -1534,12 +1539,21 @@ endfunction
|
||||
"Return: the string for this path that is suitable to be used with the :edit
|
||||
"command
|
||||
function! s:Path.strForEditCmd()
|
||||
let p = self.str(1)
|
||||
let cwd = getcwd()
|
||||
|
||||
if s:running_windows
|
||||
return self.strForOS(0)
|
||||
else
|
||||
return self.str(1)
|
||||
let p = tolower(self.strForOS(0))
|
||||
let cwd = tolower(getcwd())
|
||||
endif
|
||||
|
||||
"return a relative path if we can
|
||||
if stridx(p, cwd) == 0
|
||||
let p = strpart(p, strlen(cwd)+1)
|
||||
endif
|
||||
|
||||
return p
|
||||
|
||||
endfunction
|
||||
"FUNCTION: Path.strForGlob() {{{3
|
||||
function! s:Path.strForGlob()
|
||||
@@ -1663,8 +1677,14 @@ function! s:initNerdTree(name)
|
||||
if s:Bookmark.BookmarkExistsFor(a:name)
|
||||
let path = s:Bookmark.BookmarkFor(a:name).path
|
||||
else
|
||||
let dir = a:name == '' ? expand('%:p:h') : a:name
|
||||
let dir = a:name == '' ? getcwd() : a:name
|
||||
|
||||
"hack to get an absolute path if a relative path is given
|
||||
if dir =~ '^\.'
|
||||
let dir = getcwd() . s:os_slash . dir
|
||||
endif
|
||||
let dir = resolve(dir)
|
||||
|
||||
try
|
||||
let path = s:Path.New(dir)
|
||||
catch /NERDTree.Path.InvalidArguments/
|
||||
@@ -1828,9 +1848,6 @@ function! s:createTreeWin()
|
||||
endif
|
||||
|
||||
|
||||
" for line continuation
|
||||
let cpo_save1 = &cpo
|
||||
set cpo&vim
|
||||
|
||||
call s:bindMappings()
|
||||
setfiletype nerdtree
|
||||
@@ -2059,7 +2076,7 @@ function! s:findNodeLineNumber(treenode)
|
||||
|
||||
let curLine = getline(lnum)
|
||||
|
||||
let indent = match(curLine,s:tree_markup_reg_neg) / s:tree_wid
|
||||
let indent = s:indentLevelFor(curLine)
|
||||
if indent == curPathComponent
|
||||
let curLine = s:stripMarkupFromLine(curLine, 1)
|
||||
|
||||
@@ -2090,6 +2107,21 @@ function! s:findRootNodeLineNumber()
|
||||
return rootLine
|
||||
endfunction
|
||||
|
||||
"FUNCTION: s:firstNormalWindow(){{{2
|
||||
"find the window number of the first normal window
|
||||
function! s:firstNormalWindow()
|
||||
let i = 1
|
||||
while i <= winnr("$")
|
||||
let bnum = winbufnr(i)
|
||||
if bnum != -1 && getbufvar(bnum, '&buftype') == ''
|
||||
\ && !getwinvar(i, '&previewwindow')
|
||||
return i
|
||||
endif
|
||||
|
||||
let i += 1
|
||||
endwhile
|
||||
return -1
|
||||
endfunction
|
||||
"FUNCTION: s:getPath(ln) {{{2
|
||||
"Gets the full path to the node that is rendered on the given line number
|
||||
"
|
||||
@@ -2117,9 +2149,7 @@ function! s:getPath(ln)
|
||||
return t:NERDTreeRoot.path.getParent()
|
||||
endif
|
||||
|
||||
"get the indent level for the file (i.e. how deep in the tree it is)
|
||||
let indent = match(line, s:tree_markup_reg_neg) / s:tree_wid
|
||||
|
||||
let indent = s:indentLevelFor(line)
|
||||
|
||||
"remove the tree parts and the leading space
|
||||
let curFile = s:stripMarkupFromLine(line, 0)
|
||||
@@ -2144,7 +2174,7 @@ function! s:getPath(ln)
|
||||
break
|
||||
endif
|
||||
if curLineStripped =~ '/$'
|
||||
let lpindent = match(curLine,s:tree_markup_reg_neg) / s:tree_wid
|
||||
let lpindent = s:indentLevelFor(curLine)
|
||||
if lpindent < indent
|
||||
let indent = indent - 1
|
||||
|
||||
@@ -2207,11 +2237,44 @@ function! s:getTreeWinNum()
|
||||
return -1
|
||||
endif
|
||||
endfunction
|
||||
|
||||
"FUNCTION: s:indentLevelFor(line) {{{2
|
||||
function! s:indentLevelFor(line)
|
||||
return match(a:line, '[^ \-+~`|]') / s:tree_wid
|
||||
endfunction
|
||||
"FUNCTION: s:isTreeOpen() {{{2
|
||||
function! s:isTreeOpen()
|
||||
return s:getTreeWinNum() != -1
|
||||
endfunction
|
||||
"FUNCTION: s:isWindowUsable(winnumber) {{{2
|
||||
"Returns 1 if opening a file from the tree in the given window requires it to
|
||||
"be split
|
||||
"
|
||||
"Args:
|
||||
"winnumber: the number of the window in question
|
||||
function! s:isWindowUsable(winnumber)
|
||||
"gotta split if theres only one window (i.e. the NERD tree)
|
||||
if winnr("$") == 1
|
||||
return 0
|
||||
endif
|
||||
|
||||
let oldwinnr = winnr()
|
||||
exec a:winnumber . "wincmd p"
|
||||
let specialWindow = getbufvar("%", '&buftype') != '' || getwinvar('%', '&previewwindow')
|
||||
let modified = &modified
|
||||
exec oldwinnr . "wincmd p"
|
||||
|
||||
"if its a special window e.g. quickfix or another explorer plugin then we
|
||||
"have to split
|
||||
if specialWindow
|
||||
return 0
|
||||
endif
|
||||
|
||||
if &hidden
|
||||
return 1
|
||||
endif
|
||||
|
||||
return !modified || s:bufInWindows(winbufnr(a:winnumber)) >= 2
|
||||
endfunction
|
||||
|
||||
" FUNCTION: s:jumpToChild(direction) {{{2
|
||||
" Args:
|
||||
@@ -2231,7 +2294,7 @@ function! s:jumpToChild(direction)
|
||||
endif
|
||||
|
||||
if targetNode.equals(currentNode)
|
||||
let siblingDir = currentNode.parent.findOpenDirSiblingWithChildren(a:direction)
|
||||
let siblingDir = currentNode.parent.findOpenDirSiblingWithVisibleChildren(a:direction)
|
||||
if siblingDir != {}
|
||||
let indx = a:direction ? siblingDir.getVisibleChildCount()-1 : 0
|
||||
let targetNode = siblingDir.getChildByIndex(indx, 1)
|
||||
@@ -2282,11 +2345,16 @@ function! s:openFileNode(treenode)
|
||||
if winnr != -1
|
||||
exec winnr . "wincmd w"
|
||||
|
||||
elseif s:shouldSplitToOpen(winnr("#"))
|
||||
else
|
||||
if !s:isWindowUsable(winnr("#")) && s:firstNormalWindow() == -1
|
||||
call s:openFileNodeSplit(a:treenode)
|
||||
else
|
||||
try
|
||||
if !s:isWindowUsable(winnr("#"))
|
||||
exec s:firstNormalWindow() . "wincmd w"
|
||||
else
|
||||
wincmd p
|
||||
endif
|
||||
exec ("edit " . a:treenode.path.strForEditCmd())
|
||||
catch /^Vim\%((\a\+)\)\=:E37/
|
||||
call s:putCursorInTreeWin()
|
||||
@@ -2295,6 +2363,7 @@ function! s:openFileNode(treenode)
|
||||
echo v:exception
|
||||
endtry
|
||||
endif
|
||||
endif
|
||||
endfunction
|
||||
|
||||
"FUNCTION: s:openFileNodeSplit(treenode) {{{2
|
||||
@@ -2580,11 +2649,14 @@ endfunction
|
||||
"scroll position
|
||||
function! s:saveScreenState()
|
||||
let win = winnr()
|
||||
try
|
||||
call s:putCursorInTreeWin()
|
||||
let t:NERDTreeOldPos = getpos(".")
|
||||
let t:NERDTreeOldTopLine = line("w0")
|
||||
let t:NERDTreeOldWindowSize = s:shouldSplitVertically() ? winwidth("") : winheight("")
|
||||
exec win . "wincmd w"
|
||||
catch /NERDTree.view.InvalidOperation/
|
||||
endtry
|
||||
endfunction
|
||||
|
||||
"FUNCTION: s:setupSyntaxHighlighting() {{{2
|
||||
@@ -2618,7 +2690,7 @@ function! s:setupSyntaxHighlighting()
|
||||
syn match treeHelp #^".*# contains=treeHelpKey,treeHelpTitle,treeFlag,treeToggleOff,treeToggleOn,treeHelpCommand
|
||||
|
||||
"highlighting for readonly files
|
||||
syn match treeRO #[\/0-9a-zA-Z]\+.*\[RO\]# contains=treeFlag,treeBookmark
|
||||
syn match treeRO #.*\[RO\]#hs=s+2 contains=treeFlag,treeBookmark,treePart,treePartFile
|
||||
|
||||
"highlighting for sym links
|
||||
syn match treeLink #[^-| `].* -> # contains=treeBookmark,treeOpenable,treeClosable,treeDirSlash
|
||||
@@ -2678,37 +2750,6 @@ function! s:setupSyntaxHighlighting()
|
||||
hi def link NERDTreeCurrentNode Search
|
||||
endfunction
|
||||
|
||||
"FUNCTION: s:shouldSplitToOpen() {{{2
|
||||
"Returns 1 if opening a file from the tree in the given window requires it to
|
||||
"be split
|
||||
"
|
||||
"Args:
|
||||
"winnumber: the number of the window in question
|
||||
function! s:shouldSplitToOpen(winnumber)
|
||||
"gotta split if theres only one window (i.e. the NERD tree)
|
||||
if winnr("$") == 1
|
||||
return 1
|
||||
endif
|
||||
|
||||
let oldwinnr = winnr()
|
||||
exec a:winnumber . "wincmd p"
|
||||
let specialWindow = getbufvar("%", '&buftype') != '' || getwinvar('%', '&previewwindow')
|
||||
let modified = &modified
|
||||
exec oldwinnr . "wincmd p"
|
||||
|
||||
"if its a special window e.g. quickfix or another explorer plugin then we
|
||||
"have to split
|
||||
if specialWindow
|
||||
return 1
|
||||
endif
|
||||
|
||||
if &hidden
|
||||
return 0
|
||||
endif
|
||||
|
||||
return modified && s:bufInWindows(winbufnr(a:winnumber)) < 2
|
||||
endfunction
|
||||
|
||||
" Function: s:shouldSplitVertically() {{{2
|
||||
" Returns 1 if g:NERDTreeWinPos is 'left' or 'right'
|
||||
function! s:shouldSplitVertically()
|
||||
@@ -2724,7 +2765,7 @@ endfunction
|
||||
function! s:stripMarkupFromLine(line, removeLeadingSpaces)
|
||||
let line = a:line
|
||||
"remove the tree parts and the leading space
|
||||
let line = substitute (line,"^" . s:tree_markup_reg . "*","","")
|
||||
let line = substitute (line, s:tree_markup_reg,"","")
|
||||
|
||||
"strip off any read only flag
|
||||
let line = substitute (line, ' \[RO\]', "","")
|
||||
@@ -2903,8 +2944,7 @@ function! s:checkForActivate()
|
||||
"if they clicked a dir, check if they clicked on the + or ~ sign
|
||||
"beside it
|
||||
if currentNode.path.isDirectory
|
||||
let reg = '^' . s:tree_markup_reg .'*[~+]$'
|
||||
if startToCur =~ reg
|
||||
if startToCur =~ s:tree_markup_reg . '$' && char =~ '[+~]'
|
||||
call s:activateNode(0)
|
||||
return
|
||||
endif
|
||||
@@ -3527,4 +3567,8 @@ function! s:upDir(keepState)
|
||||
endif
|
||||
endfunction
|
||||
|
||||
|
||||
"reset &cpo back to users setting
|
||||
let &cpo = s:old_cpo
|
||||
|
||||
" vim: set sw=4 sts=4 et fdm=marker:
|
||||
|
||||
Reference in New Issue
Block a user