Compare commits

...

24 Commits

Author SHA1 Message Date
lifecrisis
9310f91476 Fix documentation errors (#1269)
* Fix a typo: "NERDTree_*" -> "NERD_Tree_*"

* Format text

* Use the proper abbreviation for the BEL character

* Format text

* Make the documentation match the code

The syntax file sets 'conceallevel' to 2, not 3.

* Update the "CHANGELOG.md" file
2021-09-27 20:43:04 -04:00
lifecrisis
e731b84559 Ensure backward compatible testing of types (#1266)
- Use "type(0)" instead of "v:t_number"
- Use "==" instead of "==#" since we are comparing numbers
- Make use of the "+=" operator
- Update the "CHANGELOG.md" file

The only real issue here is that we should prefer "type(0)" over the
special variable.  I run into this problem enough on older systems
that it frustrates me.  Let's have it fixed!
2021-09-20 15:01:21 -04:00
Phil Runninger
7eee457efa Replace trim() with a version-compatible alternative. (#1265)
* Replace trim() with a version-compatible alternative.

* Update version number in change log.
2021-09-14 22:34:57 -04:00
Phil Runninger
aa7e97b7ff Change highlighting of bookmarks in the tree. (#1261)
* Change highlighting of bookmarks in the tree.

The bookmark names in the tree now have the same syntax highlighting as
the bookmark names in the list of bookmarks above the tree.

* Change version number in change log.
2021-09-11 11:31:39 -04:00
Phil Runninger
e5f24e2b8b Answer the question about accessing files over scp or ftp. (#1259)
* Answer the question about accessing files over scp or ftp.

* Minor formatting change to README.

* Update version number in Change Log.
2021-09-07 10:14:36 -04:00
Sharla Kew
0e71462f90 Trim filenames created via the fs_menu (#1243)
The default when naming a file in the command line is that extra white
space will be stripped away. It seems logical for file naming via the
fs_menu in nerdtree to follow that convention.

I have left the defaults of `trim` because they seem sensible.

Co-authored-by: Phil Runninger <PhilRunninger@users.noreply.github.com>
2021-08-12 19:18:53 -04:00
Phil Runninger
2c14ed0e15 Update Wiki link in General Question issue template 2021-07-15 08:31:01 -04:00
Phil Runninger
de0e2edeac Improve F.A.Q. Answers and Issue Templates (#1249)
* Update the issue templates, making them simpler to use.

* Update FAQ answers.

Closes #1246.
- Add an if statement to the autocommand to prevent its running in the
  Command Window.

Closes #1248.
- Add a new answer to show closing a tab when only NERDTree remains.

* Update the Bug issue template.

* Update version number in change log.
2021-07-13 14:28:29 -04:00
Phil Runninger
81f3eaba29 go on a bookmark directory will NERDTreeFind it. (#1236)
* `go` on a bookmark directory will NERDTreeFind it.

This leaves the root unchanged if possible.

* Update version number in change log.
2021-03-24 23:41:15 -04:00
Phil Runninger
f63fb6984f Put Callback function variables in local scope. (#1230)
* Put `Callback` function variables in local scope.

This change prevents conflict with other `Callback` functions that are
defined elsewhere in global scope.

* Update version number in change log.
2021-03-01 09:34:54 -05:00
Phil Runninger
a1fa4a33bf Fix mouse-clicking a file to open it, which was broken in 6.10.5. (#1225)
* Fix mouse-clicking a file to open it, which was broken in 6.10.5.

* Update version number in change log.
2021-02-12 23:14:26 -05:00
Phil Runninger
3a9d533f3d Restore the default behavior of the <CR> key. (#1221)
* Restore <CR>'s default behavior to be the same as o's.

* Remove the dictionary validation, and simplify initCustomOpenArgs().

There was a bug in the validation logic that caused a valid integer
value of 'keepopen' to always be overwritten with the defaultOpenArgs'
value. It was always comparing its type to the type of a string.

I fixed this by removing all the type validation, and wrapping the code
with a try-catch block. If NERDTreeCustomOpenArgs is not a dictionary,
an error message will print and the defaults will be used instead.

* Add fold markers to new functions.

* Update version number in change log.
2021-02-10 22:20:04 -05:00
Phil Runninger
d3f9fc44ca Update README.markdown
Add the missing slashes in the names of two of the mentioned plugin managers.
2021-02-10 16:38:41 -05:00
Phil Runninger
1d46d6df3e Update README.markdown 2021-02-09 21:50:35 -05:00
Phil Runninger
593c16add3 Fix {'keepopen':0} in NERDTreeCustomOpenArgs (#1217)
* Replace #and() with two more-specific functions.

* Push NERDTreeQuitOnOpen checking earlier in the call stack.

* Fix bug in `go` key for file bookmarks. It was behaving like `gs`.

* Fix the `o` mapping for bookmark nodes and the g:NERDTree reference.

* Use get() function to shorten if statement logic.

* Update version number in change log.

* Remove obsolete reference to MERDTreeQuitOnOpen in comment.
2021-02-09 21:34:24 -05:00
Daniel E
d3becd1149 Removed directory separator from sort key (#1219)
* Removed directory separator from sort key

Directories had an additional separator appended to them which caused improper comparisons for other directories that shared similar prefixes.

* Updated changelog
2021-02-09 20:48:36 -05:00
Phil Runninger
1b19089917 Add new FAQ and answer: How to prevent buffers replacing NERDTree. (#1215)
* Add new FAQ and answer: How to prevent buffers replacing NERDTree.

* Update version number in change log.
2021-01-31 00:19:58 -05:00
Phil Runninger
c8be9458dd New menu command: Run a system command in this directory. (#1214)
* New menu command: Run system command in this directory.

* Echo the output from the system command.

* Update version number in change log.

* Address Vim linter message: change "\n" to nr2char(10)

* Use single quoted strings.

* Use system() instead of systemlist() for greater version compatibility.

systemlist() was introduced sometime in Vim 8+, so I switched to
system() for 7.4 compatibility.
2021-01-30 23:45:56 -05:00
Phil Runninger
628098fff1 Escape quotation marks so they can be used in key mappings. (#1213)
* Escape quotation marks so they can be used in key mappings.

* Update version number in change log.
2021-01-30 23:43:29 -05:00
Phil Runninger
b134f6518b Enable full path specifications for NERDTreeIgnore (#1207)
* Add ability to specify a path to be ignored.

This ignore expression compares itself against the whole path of the
node, instead of just the tail component of the node.

* Remove debug statements and make it work on Windows.

* Restore the original self.str() to get OS-specific paths for comparing.

Using the UI-formatted path had two problems.
1. It always appended a forward slash at the end of the path, which was
   unnecessary and made patterns like '/tmp/cache$[[path]]' not work as
   expected.
2. It always used forward slashes to join the path components. I thought
   this would be a good thing, but there's no reason to force Windows
   users to use that syntax. They'll just need to remember to escape the
   backslashes, like so: '\\Temp\\cache$[[path]]'

* Add documentation for the new [[path]] tag for NERDTreeIgnore.

* Replace the abbreviation 'dir' with the full word 'directory'.

* Update version number in change log.
2021-01-19 20:07:26 -05:00
Tomasz N
7099f638ed Fix missing key case, add BC type checking (#1206)
* Fix missing key case, add BC type checking

Resolves #1205

* Assign g:NERDTreeCustomOpenArgs also before quick return

* Fix syntax to be compatibile with Vim 7.3
2021-01-18 21:23:52 -05:00
Phil Runninger
a7eb011e47 Revert #1200, due to bug (#1205) it introduced. 2021-01-17 22:16:38 -05:00
Tomasz N
7e1713853a Respect NERDTreeCustomOpenArgs when opening bookmark (#1200)
* Respect NERDTreeCustomOpenArgs when opening bookmark

* Update CHANGELOG

* Do not duplicate s:initCustomOpenArgs()

* Restore missing assignment

* fixup! Restore missing assignment

* fixup! Do not duplicate s:initCustomOpenArgs()

* Simplify loop iteration
2021-01-17 20:00:17 -05:00
Phil Runninger
aaa946fb6b Provide alternate way to mirror the NERDTree on all tabs. 2020-12-19 20:28:15 -05:00
15 changed files with 240 additions and 161 deletions

View File

@@ -5,41 +5,42 @@ labels: bug
--- ---
<!-- Attention! Please Read! <!-- Attention! Please Read!
Please fill out ALL the information below so that the issue can be fully Please fill out ALL the information below so that the issue can be fully understood. Omitting
understood. Omitting information will delay the resolution of your issue. It information will delay the resolution of your issue. It will be labeled "Needs More Info", and
will be labeled "Needs More Info", and may be closed until there is enough may be closed until there is enough information.
information.
Keep in mind that others may have the same question in the future. The better Keep in mind that others may have the same question in the future. The better your information,
your information, the more likely they'll be able to help themselves. --> the more likely they'll be able to help themselves.
-->
#### Self-Diagnosis #### Self-Diagnosis
<!-- Check the boxes after creating the issue, or use [x]. --> Before creating an issue, take some time to search these resources for an answer. It's possible that someone else has already seen and solved your issue.
- [ ] I have searched the [issues](https://github.com/scrooloose/nerdtree/issues) for an answer to my question. - [old NERDTree issues](https://github.com/preservim/nerdtree/issues?q=is%3Aissue)
- [ ] I have reviewed the NERDTree documentation. `:h NERDTree` - NERDTree documentation - `:h NERDTree`
- [ ] I have reviewed the [Wiki](https://github.com/scrooloose/nerdtree/wiki). - [NERDTree Wiki](https://github.com/preservim/nerdtree/wiki)
- [ ] I have searched the web for an answer to my question. - Other resources: <https://stackoverflow.com>, <https://vi.stackexchange.com>, etc.
#### Environment (for bug reports) #### Environment
- [ ] Operating System: - Operating System:
- [ ] Vim/Neovim version `:echo v:version`: - Vim/Neovim version `:version`:
- [ ] NERDTree version, found on 1st line in NERDTree quickhelp `?`: - NERDTree version, found on first line of quickhelp `?`:
- [ ] vimrc settings - Are you using any of these NERDTree-dependent plugins? <!-- Check the boxes after creating the issue. -->
- [ ] NERDTree variables - [ ] [Xuyuanp/nerdtree-git-plugin](https://github.com/Xuyuanp/nerdtree-git-plugin)
```vim - [ ] [ryanoasis/vim-devicons](https://github.com/ryanoasis/vim-devicons)
``` - [ ] [tiagofumo/vim-nerdtree-syntax-highlight](https://github.com/tiagofumo/vim-nerdtree-syntax-highlight)
- Other NERDTree-dependent Plugins - [ ] [scrooloose/nerdtree-project-plugin](https://github.com/scrooloose/nerdtree-project-plugin)
- [ ] jistr/vim-nerdtree-tabs - [ ] [PhilRunninger/nerdtree-buffer-ops](https://github.com/PhilRunninger/nerdtree-buffer-ops)
- [ ] ryanoasis/vim-devicons - [ ] [PhilRunninger/nerdtree-visual-selection](https://github.com/PhilRunninger/nerdtree-visual-selection)
- [ ] tiagofumo/vim-nerdtree-syntax-highlight - [ ] [jistr/vim-nerdtree-tabs](https://github.com/jistr/vim-nerdtree-tabs)
- [ ] Xuyuanp/nerdtree-git-plugin - [ ] Others (specify):
- [ ] Others (specify): - Provide a minimal **.vimrc** file that will reproduce the issue.
- [ ] I've verified the issue occurs with only NERDTree installed. ```vim
```
#### Steps to Reproduce the Issue #### Steps to Reproduce the Issue
1. 1.
#### Current Result (Include screenshots where appropriate.) #### Current Behavior (Include screenshots where appropriate.)
#### Expected Result #### Expected Result

View File

@@ -3,22 +3,11 @@ name: "General Question"
about: "Having trouble setting up NERDTree? Need clarification on a setting? Ask your question here." about: "Having trouble setting up NERDTree? Need clarification on a setting? Ask your question here."
labels: "general question" labels: "general question"
--- ---
<!-- Attention! Please Read! Before creating an issue, take some time to search these resources. It's possible that someone else has already asked your question and gotten an answer.
- [old NERDTree issues](https://github.com/preservim/nerdtree/issues?q=is%3Aissue)
Please fill out ALL the information below so that the issue can be fully - NERDTree documentation - `:h NERDTree`
understood. Omitting information will delay the resolution of your issue. It - [NERDTree Wiki](https://github.com/preservim/nerdtree/wiki)
will be labeled "Needs More Info", and may be closed until there is enough - Other resource: <https://stackoverflow.com>, <https://vi.stackexchange.com>, etc.
information.
Keep in mind that others may have the same question in the future. The better
your information, the more likely they'll be able to help themselves. -->
#### Self-Diagnosis
<!-- Check the boxes after creating the issue, or use [x]. -->
- [ ] I have searched the [issues](https://github.com/scrooloose/nerdtree/issues) for an answer to my question.
- [ ] I have reviewed the NERDTree documentation. `:h NERDTree`
- [ ] I have reviewed the [Wiki](https://github.com/scrooloose/nerdtree/wiki).
- [ ] I have searched the web for an answer to my question.
#### State Your Question #### State Your Question

View File

@@ -4,7 +4,26 @@
version in an unordered list. The format is: version in an unordered list. The format is:
- **.PATCH**: Pull Request Title (PR Author) [PR Number](Link to PR) - **.PATCH**: Pull Request Title (PR Author) [PR Number](Link to PR)
--> -->
#### 6.10
- **.16**: Fix documentation errors. (lifecrisis) [#1269](https://github.com/preservim/nerdtree/pull/1269)
- **.15**: Ensure backward compatible testing of types. (lifecrisis) [#1266](https://github.com/preservim/nerdtree/pull/1266)
- **.14**: Replace trim() with a version-compatible alternative. (PhilRunninger) [#1265](https://github.com/preservim/nerdtree/pull/1265)
- **.13**: Change highlighting of bookmarks in the tree. (PhilRunninger) [#1261](https://github.com/preservim/nerdtree/pull/1261)
- **.12**: Answer the question about accessing files over scp or ftp. (PhilRunninger) [#1259](https://github.com/preservim/nerdtree/pull/1259)
- **.11**: Trim filenames created via the fs_menu (elanorigby) [#1243](https://github.com/preservim/nerdtree/pull/1243)
- **.10**: Improve F.A.Q. Answers and Issue Templates (PhilRunninger) [#1249](https://github.com/preservim/nerdtree/pull/1249)
- **.9**: `go` on a bookmark directory will NERDTreeFind it. (PhilRunninger) [#1236](https://github.com/preservim/nerdtree/pull/1236)
- **.8**: Put `Callback` function variables in local scope. (PhilRunninger) [#1230](https://github.com/preservim/nerdtree/pull/1230)
- **.7**: Fix mouse-clicking a file to open it. (PhilRunninger) [#1225](https://github.com/preservim/nerdtree/pull/1225)
- **.6**: Restore the default behavior of the `<CR>` key. (PhilRunninger) [#1221](https://github.com/preservim/nerdtree/pull/1221)
- **.5**: Fix `{'keepopen':0}` in NERDTreeCustomOpenArgs (PhilRunninger) [#1217](https://github.com/preservim/nerdtree/pull/1217)
- **.4**: Removed directory separator from sort key (Daniel E) [#1219](https://github.com/preservim/nerdtree/pull/1219)
- **.3**: Add new FAQ and answer: How to prevent buffers replacing NERDTree. (PhilRunninger) [#1215](https://github.com/preservim/nerdtree/pull/1215)
- **.2**: New menu command: Run a system command in this directory. (PhilRunninger) [#1214](https://github.com/preservim/nerdtree/pull/1214)
- **.1**: Escape quotation marks so they can be used in key mappings. (PhilRunninger) [#1213](https://github.com/preservim/nerdtree/pull/1213)
- **.0**: Enable full path specifications for NERDTreeIgnore (PhilRunninger) [#1207](https://github.com/preservim/nerdtree/pull/1207)
#### 6.9 #### 6.9
- **.12**: Respect NERDTreeCustomOpenArgs when opening bookmark (przepompownia) [#1200](https://github.com/preservim/nerdtree/pull/1200)
- **.11**: Revamp the README. (buncis, PhilRunninger) [#1192](https://github.com/preservim/nerdtree/pull/1192), [#1193](https://github.com/preservim/nerdtree/pull/1193) - **.11**: Revamp the README. (buncis, PhilRunninger) [#1192](https://github.com/preservim/nerdtree/pull/1192), [#1193](https://github.com/preservim/nerdtree/pull/1193)
- **.10**: Open a mirrored NERDTree with correct width (PhilRunninger) [#1177](https://github.com/preservim/nerdtree/pull/1177) - **.10**: Open a mirrored NERDTree with correct width (PhilRunninger) [#1177](https://github.com/preservim/nerdtree/pull/1177)
- **.9**: Updated Readme, removed typo (H3RSKO) [#1167](https://github.com/preservim/nerdtree/pull/1167) - **.9**: Updated Readme, removed typo (H3RSKO) [#1167](https://github.com/preservim/nerdtree/pull/1167)

View File

@@ -8,7 +8,7 @@ The NERDTree is a file system explorer for the Vim editor. Using this plugin, us
## Installation ## Installation
Use your favorite plugin manager to install this plugin. [tpope/vim-pathogen](https://github.com/tpope/vim-pathogen), [VundleVimVundle.vim](https://github.com/VundleVim/Vundle.vim), [junegunnvim-plug](https://github.com/junegunn/vim-plug), and [Shougo/dein.vim](https://github.com/Shougo/dein.vim) are some of the more popular ones. A lengthy discussion of these and other managers can be found on [vi.stackexchange.com](https://vi.stackexchange.com/questions/388/what-is-the-difference-between-the-vim-plugin-managers). Basic instructions are provided below, but please **be sure to read, understand, and follow all the safety rules that come with your ~~power tools~~ plugin manager.** Use your favorite plugin manager to install this plugin. [tpope/vim-pathogen](https://github.com/tpope/vim-pathogen), [VundleVim/Vundle.vim](https://github.com/VundleVim/Vundle.vim), [junegunn/vim-plug](https://github.com/junegunn/vim-plug), and [Shougo/dein.vim](https://github.com/Shougo/dein.vim) are some of the more popular ones. A lengthy discussion of these and other managers can be found on [vi.stackexchange.com](https://vi.stackexchange.com/questions/388/what-is-the-difference-between-the-vim-plugin-managers). Basic instructions are provided below, but please **be sure to read, understand, and follow all the safety rules that come with your ~~power tools~~ plugin manager.**
If you have no favorite, or want to manage your plugins without 3rd-party dependencies, consider using Vim 8+ packages, as described in Greg Hurrell's excellent Youtube video: [Vim screencast #75: Plugin managers](https://www.youtube.com/watch?v=X2_R3uxDN6g). If you have no favorite, or want to manage your plugins without 3rd-party dependencies, consider using Vim 8+ packages, as described in Greg Hurrell's excellent Youtube video: [Vim screencast #75: Plugin managers](https://www.youtube.com/watch?v=X2_R3uxDN6g).
@@ -148,19 +148,36 @@ autocmd VimEnter * if argc() == 1 && isdirectory(argv()[0]) && !exists('s:std_in
\ execute 'NERDTree' argv()[0] | wincmd p | enew | execute 'cd '.argv()[0] | endif \ execute 'NERDTree' argv()[0] | wincmd p | enew | execute 'cd '.argv()[0] | endif
``` ```
### How can I close Vim automatically when NERDTree is the last window? ### How can I close Vim or a tab automatically when NERDTree is the last window?
```vim ```vim
" Exit Vim if NERDTree is the only window left. " Exit Vim if NERDTree is the only window remaining in the only tab.
autocmd BufEnter * if tabpagenr('$') == 1 && winnr('$') == 1 && exists('b:NERDTree') && b:NERDTree.isTabTree() | autocmd BufEnter * if tabpagenr('$') == 1 && winnr('$') == 1 && exists('b:NERDTree') && b:NERDTree.isTabTree() | quit | endif
\ quit | endif ```
---
```vim
" Close the tab if NERDTree is the only window remaining in it.
autocmd BufEnter * if winnr('$') == 1 && exists('b:NERDTree') && b:NERDTree.isTabTree() | quit | endif
```
### How can I prevent other buffers replacing NERDTree in its window?
```vim
" If another buffer tries to replace NERDTree, put it in the other window, and bring back NERDTree.
autocmd BufEnter * if bufname('#') =~ 'NERD_tree_\d\+' && bufname('%') !~ 'NERD_tree_\d\+' && winnr('$') > 1 |
\ let buf=bufnr() | buffer# | execute "normal! \<C-W>w" | execute 'buffer'.buf | endif
``` ```
### Can I have the same NERDTree on every tab automatically? ### Can I have the same NERDTree on every tab automatically?
```vim ```vim
" Open the existing NERDTree on each new tab. " Open the existing NERDTree on each new tab.
autocmd BufWinEnter * silent NERDTreeMirror autocmd BufWinEnter * if getcmdwintype() == '' | silent NERDTreeMirror | endif
```
or change your NERDTree-launching shortcut key like so:
```vim
" Mirror the NERDTree before showing it. This makes it the same on all tabs.
nnoremap <C-n> :NERDTreeMirror<CR>:NERDTreeFocus<CR>
``` ```
### How can I change the default arrows? ### How can I change the default arrows?
@@ -171,3 +188,34 @@ let g:NERDTreeDirArrowCollapsible = '▾'
``` ```
The preceding values are the non-Windows default arrow symbols. Setting these variables to empty strings will remove the arrows completely and shift the entire tree two character positions to the left. See `:h NERDTreeDirArrowExpandable` for more details. The preceding values are the non-Windows default arrow symbols. Setting these variables to empty strings will remove the arrows completely and shift the entire tree two character positions to the left. See `:h NERDTreeDirArrowExpandable` for more details.
### Can NERDTree access remote files via scp or ftp?
Short answer: No, and there are no plans to add that functionality. However, Vim ships with a plugin that does just that. It's called netrw, and by adding the following lines to your `.vimrc`, you can use it to open files over the `scp:`, `ftp:`, or other protocols, while still using NERDTree for all local files. The function seamlessly makes the decision to open NERDTree or netrw, and other supported protocols can be added to the regular expression.
```vim
" Function to open the file or NERDTree or netrw.
" Returns: 1 if either file explorer was opened; otherwise, 0.
function! s:OpenFileOrExplorer(...)
if a:0 == 0 || a:1 == ''
NERDTree
elseif filereadable(a:1)
execute 'edit '.a:1
return 0
elseif a:1 =~? '^\(scp\|ftp\)://' " Add other protocols as needed.
execute 'Vexplore '.a:1
elseif isdirectory(a:1)
execute 'NERDTree '.a:1
endif
return 1
endfunction
" Auto commands to handle OS commandline arguments
autocmd StdinReadPre * let s:std_in=1
autocmd VimEnter * if argc()==1 && !exists('s:std_in') | if <SID>OpenFileOrExplorer(argv()[0]) | wincmd p | enew | wincmd p | endif | endif
" Command to call the OpenFileOrExplorer function.
command! -n=? -complete=file -bar Edit :call <SID>OpenFileOrExplorer('<args>')
" Command-mode abbreviation to replace the :edit Vim command.
cnoreabbrev e Edit
```

View File

@@ -30,6 +30,16 @@ endfunction
" SECTION: General Functions {{{1 " SECTION: General Functions {{{1
"============================================================ "============================================================
" FUNCTION: nerdtree#closeTreeOnOpen() {{{2
function! nerdtree#closeTreeOnOpen() abort
return g:NERDTreeQuitOnOpen == 1 || g:NERDTreeQuitOnOpen == 3
endfunction
" FUNCTION: nerdtree#closeBookmarksOnOpen() {{{2
function! nerdtree#closeBookmarksOnOpen() abort
return g:NERDTreeQuitOnOpen == 2 || g:NERDTreeQuitOnOpen == 3
endfunction
" FUNCTION: nerdtree#slash() {{{2 " FUNCTION: nerdtree#slash() {{{2
" Return the path separator used by the underlying file system. Special " Return the path separator used by the underlying file system. Special
" consideration is taken for the use of the 'shellslash' option on Windows " consideration is taken for the use of the 'shellslash' option on Windows
@@ -46,28 +56,6 @@ function! nerdtree#slash() abort
return '/' return '/'
endfunction endfunction
"FUNCTION: nerdtree#and(x,y) {{{2
" Implements and() function for Vim <= 7.4
function! nerdtree#and(x,y) abort
if exists('*and')
return and(a:x, a:y)
else
let l:x = a:x
let l:y = a:y
let l:n = 0
let l:result = 0
while l:x > 0 && l:y > 0
if (l:x % 2) && (l:y % 2)
let l:result += float2nr(pow(2, l:n))
endif
let l:x = float2nr(l:x / 2)
let l:y = float2nr(l:y / 2)
let l:n += 1
endwhile
return l:result
endif
endfunction
"FUNCTION: nerdtree#checkForBrowse(dir) {{{2 "FUNCTION: nerdtree#checkForBrowse(dir) {{{2
"inits a window tree in the current buffer if appropriate "inits a window tree in the current buffer if appropriate
function! nerdtree#checkForBrowse(dir) abort function! nerdtree#checkForBrowse(dir) abort
@@ -124,18 +112,18 @@ function! nerdtree#compareNodePaths(p1, p2) abort
" Compare chunks upto common length. " Compare chunks upto common length.
" If chunks have different type, the one which has " If chunks have different type, the one which has
" integer type is the lesser. " integer type is the lesser.
if type(sortKey1[i]) ==# type(sortKey2[i]) if type(sortKey1[i]) == type(sortKey2[i])
if sortKey1[i] <# sortKey2[i] if sortKey1[i] <# sortKey2[i]
return - 1 return - 1
elseif sortKey1[i] ># sortKey2[i] elseif sortKey1[i] ># sortKey2[i]
return 1 return 1
endif endif
elseif type(sortKey1[i]) ==# v:t_number elseif type(sortKey1[i]) == type(0)
return -1 return -1
elseif type(sortKey2[i]) ==# v:t_number elseif type(sortKey2[i]) == type(0)
return 1 return 1
endif endif
let i = i + 1 let i += 1
endwhile endwhile
" Keys are identical upto common length. " Keys are identical upto common length.

View File

@@ -108,10 +108,17 @@ function! s:customOpenBookmark(node) abort
endfunction endfunction
"FUNCTION: s:initCustomOpenArgs() {{{1 "FUNCTION: s:initCustomOpenArgs() {{{1
" Make sure NERDTreeCustomOpenArgs has needed keys
function! s:initCustomOpenArgs() abort function! s:initCustomOpenArgs() abort
let g:NERDTreeCustomOpenArgs = get(g:, 'NERDTreeCustomOpenArgs', {}) let l:defaultOpenArgs = {'file': {'reuse': 'all', 'where': 'p', 'keepopen':!nerdtree#closeTreeOnOpen()}, 'dir': {}}
return extend(g:NERDTreeCustomOpenArgs, {'file':{'reuse': 'all', 'where': 'p'}, 'dir':{}}, 'keep') try
let g:NERDTreeCustomOpenArgs = get(g:, 'NERDTreeCustomOpenArgs', {})
call extend(g:NERDTreeCustomOpenArgs, l:defaultOpenArgs, 'keep')
catch /^Vim(\a\+):E712:/
call nerdtree#echoWarning('g:NERDTreeCustomOpenArgs is not set properly. Using default value.')
let g:NERDTreeCustomOpenArgs = l:defaultOpenArgs
finally
return g:NERDTreeCustomOpenArgs
endtry
endfunction endfunction
"FUNCTION: s:activateAll() {{{1 "FUNCTION: s:activateAll() {{{1
@@ -137,13 +144,13 @@ endfunction
"FUNCTION: s:activateFileNode() {{{1 "FUNCTION: s:activateFileNode() {{{1
"handle the user activating a tree node "handle the user activating a tree node
function! s:activateFileNode(node) abort function! s:activateFileNode(node) abort
call a:node.activate({'reuse': 'all', 'where': 'p'}) call a:node.activate({'reuse': 'all', 'where': 'p', 'keepopen': !nerdtree#closeTreeOnOpen()})
endfunction endfunction
"FUNCTION: s:activateBookmark(bookmark) {{{1 "FUNCTION: s:activateBookmark(bookmark) {{{1
"handle the user activating a bookmark "handle the user activating a bookmark
function! s:activateBookmark(bm) abort function! s:activateBookmark(bm) abort
call a:bm.activate(b:NERDTree, !a:bm.path.isDirectory ? {'where': 'p'} : {}) call a:bm.activate(b:NERDTree, !a:bm.path.isDirectory ? {'where': 'p', 'keepopen': !nerdtree#closeTreeOnOpen()} : {})
endfunction endfunction
" FUNCTION: nerdtree#ui_glue#bookmarkNode(name) {{{1 " FUNCTION: nerdtree#ui_glue#bookmarkNode(name) {{{1
@@ -366,7 +373,7 @@ function! s:handleLeftClick() abort
if currentNode.path.isDirectory if currentNode.path.isDirectory
call currentNode.activate() call currentNode.activate()
else else
call currentNode.activate({'reuse': 'all', 'where': 'p'}) call currentNode.activate({'reuse': 'all', 'where': 'p', 'keepopen':!nerdtree#closeTreeOnOpen()})
endif endif
return return
endif endif
@@ -500,31 +507,32 @@ function! nerdtree#ui_glue#openBookmark(name) abort
endtry endtry
if l:bookmark.path.isDirectory if l:bookmark.path.isDirectory
call l:bookmark.open(b:NERDTree) call l:bookmark.open(b:NERDTree)
else return
call l:bookmark.open(b:NERDTree, {'where': 'p'})
endif endif
call l:bookmark.open(b:NERDTree, s:initCustomOpenArgs().file)
endfunction endfunction
" FUNCTION: s:openHSplit(target) {{{1 " FUNCTION: s:openHSplit(target) {{{1
function! s:openHSplit(target) abort function! s:openHSplit(target) abort
call a:target.activate({'where': 'h'}) call a:target.activate({'where': 'h', 'keepopen': !nerdtree#closeTreeOnOpen()})
endfunction endfunction
" FUNCTION: s:openVSplit(target) {{{1 " FUNCTION: s:openVSplit(target) {{{1
function! s:openVSplit(target) abort function! s:openVSplit(target) abort
call a:target.activate({'where': 'v'}) call a:target.activate({'where': 'v', 'keepopen': !nerdtree#closeTreeOnOpen()})
endfunction endfunction
"FUNCTION: s:openHSplitBookmark(bookmark) {{{1 "FUNCTION: s:openHSplitBookmark(bookmark) {{{1
"handle the user activating a bookmark "handle the user activating a bookmark
function! s:openHSplitBookmark(bm) abort function! s:openHSplitBookmark(bm) abort
call a:bm.activate(b:NERDTree, !a:bm.path.isDirectory ? {'where': 'h'} : {}) call a:bm.activate(b:NERDTree, !a:bm.path.isDirectory ? {'where': 'h', 'keepopen': !nerdtree#closeTreeOnOpen()} : {})
endfunction endfunction
"FUNCTION: s:openVSplitBookmark(bookmark) {{{1 "FUNCTION: s:openVSplitBookmark(bookmark) {{{1
"handle the user activating a bookmark "handle the user activating a bookmark
function! s:openVSplitBookmark(bm) abort function! s:openVSplitBookmark(bm) abort
call a:bm.activate(b:NERDTree, !a:bm.path.isDirectory ? {'where': 'v'} : {}) call a:bm.activate(b:NERDTree, !a:bm.path.isDirectory ? {'where': 'v', 'keepopen': !nerdtree#closeTreeOnOpen()} : {})
endfunction endfunction
" FUNCTION: s:previewHSplitBookmark(bookmark) {{{1 " FUNCTION: s:previewHSplitBookmark(bookmark) {{{1
@@ -544,13 +552,13 @@ endfunction
" FUNCTION: s:openInNewTab(target) {{{1 " FUNCTION: s:openInNewTab(target) {{{1
function! s:openInNewTab(target) abort function! s:openInNewTab(target) abort
let l:opener = g:NERDTreeOpener.New(a:target.path, {'where': 't'}) let l:opener = g:NERDTreeOpener.New(a:target.path, {'where': 't', 'keepopen': !nerdtree#closeTreeOnOpen()})
call l:opener.open(a:target) call l:opener.open(a:target)
endfunction endfunction
" FUNCTION: s:openInNewTabSilent(target) {{{1 " FUNCTION: s:openInNewTabSilent(target) {{{1
function! s:openInNewTabSilent(target) abort function! s:openInNewTabSilent(target) abort
let l:opener = g:NERDTreeOpener.New(a:target.path, {'where': 't', 'stay': 1}) let l:opener = g:NERDTreeOpener.New(a:target.path, {'where': 't', 'keepopen': !nerdtree#closeTreeOnOpen(), 'stay': 1})
call l:opener.open(a:target) call l:opener.open(a:target)
endfunction endfunction
@@ -564,7 +572,11 @@ endfunction
" FUNCTION: s:previewBookmark(bookmark) {{{1 " FUNCTION: s:previewBookmark(bookmark) {{{1
function! s:previewBookmark(bookmark) abort function! s:previewBookmark(bookmark) abort
call a:bookmark.activate(b:NERDTree, !a:bookmark.path.isDirectory ? {'stay': 1, 'where': 'h', 'keepopen': 1} : {}) if a:bookmark.path.isDirectory
execute 'NERDTreeFind '.a:bookmark.path.str()
else
call a:bookmark.activate(b:NERDTree, {'stay': 1, 'where': 'p', 'keepopen': 1})
endif
endfunction endfunction
"FUNCTION: s:previewNodeCurrent(node) {{{1 "FUNCTION: s:previewNodeCurrent(node) {{{1
@@ -589,7 +601,7 @@ function! nerdtree#ui_glue#revealBookmark(name) abort
let targetNode = g:NERDTreeBookmark.GetNodeForName(a:name, 0, b:NERDTree) let targetNode = g:NERDTreeBookmark.GetNodeForName(a:name, 0, b:NERDTree)
call targetNode.putCursorHere(0, 1) call targetNode.putCursorHere(0, 1)
catch /^NERDTree.BookmarkNotFoundError/ catch /^NERDTree.BookmarkNotFoundError/
call nerdtree#echo('Bookmark isnt cached under the current root') call nerdtree#echo('Bookmark isn''t cached under the current root')
endtry endtry
endfunction endfunction

View File

@@ -116,7 +116,7 @@ The following features and functionality are provided by the NERDTree:
:NERDTreeVCS (opens root of repository containing CWD) :NERDTreeVCS (opens root of repository containing CWD)
< <
:NERDTreeFromBookmark <bookmark> *:NERDTreeFromBookmark* :NERDTreeFromBookmark <bookmark> *:NERDTreeFromBookmark*
Opens a fresh NERDTree with the root initialized to the dir for Opens a fresh NERDTree with the root initialized to the directory for
<bookmark>. The only reason to use this command over :NERDTree is for <bookmark>. The only reason to use this command over :NERDTree is for
the completion (which is for bookmarks rather than directories). the completion (which is for bookmarks rather than directories).
@@ -126,7 +126,7 @@ The following features and functionality are provided by the NERDTree:
is set to that path. If no NERDTree exists for this tab then this command is set to that path. If no NERDTree exists for this tab then this command
acts the same as the |:NERDTree| command. acts the same as the |:NERDTree| command.
:NERDTreeToggleVCS [<start-directory> | <bookmark>] *:NERDTreeToggleVCS* :NERDTreeToggleVCS [<start-directory> | <bookmark>] *:NERDTreeToggleVCS*
Like |:NERDTreeToggle|, but searches up the directory tree to find the top of Like |:NERDTreeToggle|, but searches up the directory tree to find the top of
the version control system repository, and roots the NERDTree there. It the version control system repository, and roots the NERDTree there. It
works with Git, Subversion, Mercurial, Bazaar, and Darcs repositories. A works with Git, Subversion, Mercurial, Bazaar, and Darcs repositories. A
@@ -249,7 +249,7 @@ Key Description help-tag~
o........Open files, directories and bookmarks......................|NERDTree-o| o........Open files, directories and bookmarks......................|NERDTree-o|
go.......Open selected file, but leave cursor in the NERDTree......|NERDTree-go| go.......Open selected file, but leave cursor in the NERDTree......|NERDTree-go|
Open selected bookmark dir in current NERDTree Find selected bookmark directory in current NERDTree
t........Open selected node/bookmark in a new tab...................|NERDTree-t| t........Open selected node/bookmark in a new tab...................|NERDTree-t|
T........Same as 't' but keep the focus on the current tab..........|NERDTree-T| T........Same as 't' but keep the focus on the current tab..........|NERDTree-T|
i........Open selected file in a split window.......................|NERDTree-i| i........Open selected file in a split window.......................|NERDTree-i|
@@ -260,10 +260,10 @@ gs.......Same as s, but leave the cursor on the NERDTree...........|NERDTree-gs|
O........Recursively open the selected directory....................|NERDTree-O| O........Recursively open the selected directory....................|NERDTree-O|
x........Close the current nodes parent.............................|NERDTree-x| x........Close the current nodes parent.............................|NERDTree-x|
X........Recursively close all children of the current node.........|NERDTree-X| X........Recursively close all children of the current node.........|NERDTree-X|
e........Edit the current dir.......................................|NERDTree-e| e........Edit the current directory.................................|NERDTree-e|
double-click....same as |NERDTree-o|. double-click....same as |NERDTree-o|.
middle-click....same as |NERDTree-i| for files, and |NERDTree-e| for dirs. middle-click....same as |NERDTree-i| for files, and |NERDTree-e| for directories.
D........Delete the current bookmark ...............................|NERDTree-D| D........Delete the current bookmark ...............................|NERDTree-D|
@@ -274,13 +274,13 @@ J........Jump down inside directories at the current tree depth.....|NERDTree-J|
<C-J>....Jump down to next sibling of the current directory.......|NERDTree-C-J| <C-J>....Jump down to next sibling of the current directory.......|NERDTree-C-J|
<C-K>....Jump up to previous sibling of the current directory.....|NERDTree-C-K| <C-K>....Jump up to previous sibling of the current directory.....|NERDTree-C-K|
C........Change the tree root to the selected dir...................|NERDTree-C| C........Change the tree root to the selected directory.............|NERDTree-C|
u........Move the tree root up one directory........................|NERDTree-u| u........Move the tree root up one directory........................|NERDTree-u|
U........Same as 'u' except the old root node is left open..........|NERDTree-U| U........Same as 'u' except the old root node is left open..........|NERDTree-U|
r........Recursively refresh the current directory..................|NERDTree-r| r........Recursively refresh the current directory..................|NERDTree-r|
R........Recursively refresh the current root.......................|NERDTree-R| R........Recursively refresh the current root.......................|NERDTree-R|
m........Display the NERDTree menu..................................|NERDTree-m| m........Display the NERDTree menu..................................|NERDTree-m|
cd.......Change the CWD to the dir of the selected node............|NERDTree-cd| cd.......Change the CWD to the directory of the selected node......|NERDTree-cd|
CD.......Change tree root to the CWD...............................|NERDTree-CD| CD.......Change tree root to the CWD...............................|NERDTree-CD|
I........Toggle whether hidden files displayed......................|NERDTree-I| I........Toggle whether hidden files displayed......................|NERDTree-I|
@@ -469,7 +469,7 @@ Jump to the first child of the current nodes parent.
If the cursor is already on the first node then do the following: If the cursor is already on the first node then do the following:
* loop back thru the siblings of the current nodes parent until we find an * loop back thru the siblings of the current nodes parent until we find an
open dir with children open directory with children
* go to the first child of that node * go to the first child of that node
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
@@ -482,7 +482,7 @@ Jump to the last child of the current nodes parent.
If the cursor is already on the last node then do the following: If the cursor is already on the last node then do the following:
* loop forward thru the siblings of the current nodes parent until we find * loop forward thru the siblings of the current nodes parent until we find
an open dir with children an open directory with children
* go to the last child of that node * go to the last child of that node
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
@@ -516,7 +516,7 @@ Default key: u
Map setting: *NERDTreeMapUpdir* Map setting: *NERDTreeMapUpdir*
Applies to: no restrictions. Applies to: no restrictions.
Move the tree root up a dir (like doing a "cd .."). Move the tree root up a directory (like doing a "cd ..").
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
*NERDTree-U* *NERDTree-U*
@@ -532,8 +532,8 @@ Default key: r
Map setting: *NERDTreeMapRefresh* Map setting: *NERDTreeMapRefresh*
Applies to: files and directories. Applies to: files and directories.
If a dir is selected, recursively refresh that dir, i.e. scan the filesystem If a directory is selected, recursively refresh that directory, i.e. scan the
for changes and represent them in the tree. filesystem for changes and represent them in the tree.
If a file node is selected then the above is done on it's parent. If a file node is selected then the above is done on it's parent.
@@ -634,8 +634,8 @@ file explorers have.
The script comes with two default menu plugins: exec_menuitem.vim and The script comes with two default menu plugins: exec_menuitem.vim and
fs_menu.vim. fs_menu.vim adds some basic filesystem operations to the menu for fs_menu.vim. fs_menu.vim adds some basic filesystem operations to the menu for
creating/deleting/moving/copying files and dirs. exec_menuitem.vim provides a creating/deleting/moving/copying files and directories. exec_menuitem.vim
menu item to execute executable files. provides a menu item to execute executable files.
Related tags: |NERDTree-m| |NERDTreeApi| Related tags: |NERDTree-m| |NERDTreeApi|
@@ -921,7 +921,7 @@ Default: ['\~$'].
This setting is used to specify which files the NERDTree should ignore. It This setting is used to specify which files the NERDTree should ignore. It
must be a list of regular expressions. When the NERDTree is rendered, any must be a list of regular expressions. When the NERDTree is rendered, any
files/dirs that match any of the regex's in NERDTreeIgnore won't be files/directories that match any of the regex's in NERDTreeIgnore won't be
displayed. displayed.
For example if you put the following line in your vimrc: > For example if you put the following line in your vimrc: >
@@ -929,13 +929,18 @@ For example if you put the following line in your vimrc: >
< <
then all files ending in .vim or ~ will be ignored. then all files ending in .vim or ~ will be ignored.
There are 2 magic flags that can be appended to the end of each regular There are 3 magic flags that can be appended to the end of each regular
expression to specify that the regex should match only files or only dirs. expression to specify that the regex should match only filenames, only lowest
These flags are "[[dir]]" and "[[file]]". Example: > level directories, or a full path. These flags are "[[dir]]", "[[file]]", and
let NERDTreeIgnore=['\.d$[[dir]]', '\.o$[[file]]'] "[[path]]". Example: >
let NERDTreeIgnore=['\.d$[[dir]]', '\.o$[[file]]', 'tmp/cache$[[path]]']
< <
This will cause all dirs ending in ".d" to be ignored and all files ending in This will cause all directories ending in ".d" to be ignored, all files ending
".o" to be ignored. in ".o" to be ignored, and the "cache" subdirectory of any "tmp" directory to
be ignored. All other "cache" directories will be displayed.
When using the "[[path]]" tag on Windows, make sure you use escaped
backslashes for the separators in the regex, eg. 'Temp\\cache$[[path]]'
Note: to tell the NERDTree not to ignore any files you must use the following Note: to tell the NERDTree not to ignore any files you must use the following
line: > line: >
@@ -1099,8 +1104,8 @@ Examples: >
< <
1. Directories will appear last, everything else will appear above. 1. Directories will appear last, everything else will appear above.
2. Everything will simply appear in alphabetical order. 2. Everything will simply appear in alphabetical order.
3. Dirs will appear first, then ruby and php. Swap files, bak files and vim 3. Directories will appear first, then ruby and php. Swap files, bak files
backup files will appear last with everything else preceding them. and vim backup files will appear last with everything else preceding them.
4. Everything is sorted by size, largest to smallest, with directories 4. Everything is sorted by size, largest to smallest, with directories
considered to have size 0 bytes. considered to have size 0 bytes.
5. Directories will appear first alphabetically, followed by files, sorted by 5. Directories will appear first alphabetically, followed by files, sorted by
@@ -1174,8 +1179,9 @@ Use one of the following lines for this setting: >
Values: 0 or 1 Values: 0 or 1
Default: 1. Default: 1.
When displaying dir nodes, this setting tells NERDTree to collapse dirs that When displaying directory nodes, this setting tells NERDTree to collapse
have only one child. Use one of the following lines for this setting: > directories that have only one child. Use one of the following lines for this
setting: >
let NERDTreeCascadeSingleChildDir=0 let NERDTreeCascadeSingleChildDir=0
let NERDTreeCascadeSingleChildDir=1 let NERDTreeCascadeSingleChildDir=1
< <
@@ -1184,11 +1190,12 @@ have only one child. Use one of the following lines for this setting: >
Values: 0 or 1 Values: 0 or 1
Default: 1. Default: 1.
When opening dir nodes, this setting tells NERDTree to recursively open dirs When opening directory nodes, this setting tells NERDTree to recursively open
that have only one child which is also a dir. NERDTree will stop when it finds directories that have only one child which is also a directory. NERDTree will
a dir that contains anything but another single dir. This setting also causes stop when it finds a directory that contains anything but another single
the |NERDTree-x| mapping to close dirs in the same manner. This setting may be directory. This setting also causes the |NERDTree-x| mapping to close
useful for Java projects. Use one of the following lines for this setting: > directories in the same manner. This setting may be useful for Java projects.
Use one of the following lines for this setting: >
let NERDTreeCascadeOpenSingleChildDir=0 let NERDTreeCascadeOpenSingleChildDir=0
let NERDTreeCascadeOpenSingleChildDir=1 let NERDTreeCascadeOpenSingleChildDir=1
< <
@@ -1249,10 +1256,10 @@ responsible pull request: https://github.com/preservim/nerdtree/pull/868.
The default value of this variable depends on the features compiled into your The default value of this variable depends on the features compiled into your
vim and the values of |NERDTreeDirArrowCollapsible| and vim and the values of |NERDTreeDirArrowCollapsible| and
|NERDTreeDirArrowExpandable|. |NERDTreeDirArrowExpandable|.
* If your vim is compiled with the +conceal feature, it is the "\x07" (BELL) * If your vim is compiled with the +conceal feature, it is the "\x07"
character, and it is hidden by setting 'conceallevel' to 3. If you use (BEL) character, and it is hidden by setting 'conceallevel' to 2. If you
autocommands, make sure none of them change that setting in the NERDTree_* use autocommands, make sure none of them change that setting in the
buffers. NERD_Tree_* buffers.
* If your vim does NOT have the +conceal feature and you're using "\u00a0" * If your vim does NOT have the +conceal feature and you're using "\u00a0"
(non-breaking space) to hide the directory arrows, "\u00b7" (middle dot) (non-breaking space) to hide the directory arrows, "\u00b7" (middle dot)
is used as the default delimiter. is used as the default delimiter.
@@ -1362,8 +1369,8 @@ NERDTreeAddKeyMap({options}) *NERDTreeAddKeyMap()*
< <
This code should sit in a file like ~/.vim/nerdtree_plugin/mymapping.vim. This code should sit in a file like ~/.vim/nerdtree_plugin/mymapping.vim.
It adds a (redundant) mapping on 'foo' which changes vim's CWD to that of It adds a (redundant) mapping on 'foo' which changes vim's CWD to that of
the current dir node. Note this mapping will only fire when the cursor is the current directory node. Note this mapping will only fire when the
on a directory node. cursor is on a directory node.
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
4.2. Menu API *NERDTreeMenuAPI* 4.2. Menu API *NERDTreeMenuAPI*

View File

@@ -256,7 +256,7 @@ endfunction
function! s:Bookmark.open(nerdtree, ...) function! s:Bookmark.open(nerdtree, ...)
let opts = a:0 ? a:1 : {} let opts = a:0 ? a:1 : {}
if nerdtree#and(g:NERDTreeQuitOnOpen,2) if nerdtree#closeBookmarksOnOpen()
call a:nerdtree.ui.toggleShowBookmarks() call a:nerdtree.ui.toggleShowBookmarks()
endif endif

View File

@@ -51,7 +51,7 @@ function! s:KeyMap.bind()
else else
let keymapInvokeString = self.key let keymapInvokeString = self.key
endif endif
let keymapInvokeString = escape(keymapInvokeString, '\') let keymapInvokeString = escape(keymapInvokeString, '\"')
let premap = self.key ==# '<LeftRelease>' ? ' <LeftRelease>' : ' ' let premap = self.key ==# '<LeftRelease>' ? ' <LeftRelease>' : ' '
@@ -66,11 +66,11 @@ endfunction
"FUNCTION: KeyMap.invoke() {{{1 "FUNCTION: KeyMap.invoke() {{{1
"Call the KeyMaps callback function "Call the KeyMaps callback function
function! s:KeyMap.invoke(...) function! s:KeyMap.invoke(...)
let Callback = type(self.callback) ==# type(function('tr')) ? self.callback : function(self.callback) let l:Callback = type(self.callback) ==# type(function('tr')) ? self.callback : function(self.callback)
if a:0 if a:0
call Callback(a:1) call l:Callback(a:1)
else else
call Callback() call l:Callback()
endif endif
endfunction endfunction

View File

@@ -65,14 +65,6 @@ function! s:NERDTree.Close()
endif endif
endfunction endfunction
"FUNCTION: s:NERDTree.CloseIfQuitOnOpen() {{{1
"Closes the NERD tree window if the close on open option is set
function! s:NERDTree.CloseIfQuitOnOpen()
if nerdtree#and(g:NERDTreeQuitOnOpen,1) && s:NERDTree.IsOpen()
call s:NERDTree.Close()
endif
endfunction
"FUNCTION: s:NERDTree.CursorToBookmarkTable(){{{1 "FUNCTION: s:NERDTree.CursorToBookmarkTable(){{{1
"Places the cursor at the top of the bookmarks table "Places the cursor at the top of the bookmarks table
function! s:NERDTree.CursorToBookmarkTable() function! s:NERDTree.CursorToBookmarkTable()

View File

@@ -15,8 +15,8 @@ function! s:Notifier.NotifyListeners(event, path, nerdtree, params)
let event = g:NERDTreeEvent.New(a:nerdtree, a:path, a:event, a:params) let event = g:NERDTreeEvent.New(a:nerdtree, a:path, a:event, a:params)
for Listener in s:Notifier.GetListenersForEvent(a:event) for Listener in s:Notifier.GetListenersForEvent(a:event)
let Callback = type(Listener) == type(function('tr')) ? Listener : function(Listener) let l:Callback = type(Listener) == type(function('tr')) ? Listener : function(Listener)
call Callback(event) call l:Callback(event)
endfor endfor
endfunction endfunction

View File

@@ -33,8 +33,7 @@ function! s:Opener._bufInWindows(bnum)
endfunction endfunction
" FUNCTION: Opener._checkToCloseTree(newtab) {{{1 " FUNCTION: Opener._checkToCloseTree(newtab) {{{1
" Check the class options and global options (i.e. NERDTreeQuitOnOpen) to see " Check the class options to see if the tree should be closed now.
" if the tree should be closed now.
" "
" Args: " Args:
" a:newtab - boolean. If set, only close the tree now if we are opening the " a:newtab - boolean. If set, only close the tree now if we are opening the
@@ -46,7 +45,7 @@ function! s:Opener._checkToCloseTree(newtab)
endif endif
if (a:newtab && self._where ==# 't') || !a:newtab if (a:newtab && self._where ==# 't') || !a:newtab
call g:NERDTree.CloseIfQuitOnOpen() call g:NERDTree.Close()
endif endif
endfunction endfunction
@@ -218,7 +217,7 @@ endfunction
" FUNCTION: Opener._openFile() {{{1 " FUNCTION: Opener._openFile() {{{1
function! s:Opener._openFile() function! s:Opener._openFile()
if !self._stay && !nerdtree#and(g:NERDTreeQuitOnOpen,1) && exists('b:NERDTreeZoomed') && b:NERDTreeZoomed if !self._stay && self._keepopen && get(b:, 'NERDTreeZoomed', 0)
call b:NERDTree.ui.toggleZoom() call b:NERDTree.ui.toggleZoom()
endif endif

View File

@@ -394,7 +394,7 @@ function! s:Path.getSortKey()
let self._sortKey = [self.getSortOrderIndex()] + metadata let self._sortKey = [self.getSortOrderIndex()] + metadata
endif endif
let path = self.getLastPathComponent(1) let path = self.getLastPathComponent(0)
if !g:NERDTreeSortHiddenFirst if !g:NERDTreeSortHiddenFirst
let path = substitute(path, '^[._]', '', '') let path = substitute(path, '^[._]', '', '')
endif endif
@@ -459,10 +459,10 @@ function! s:Path.ignore(nerdtree)
endif endif
endfor endfor
for Callback in g:NERDTree.PathFilters() for l:Callback in g:NERDTree.PathFilters()
let Callback = type(Callback) ==# type(function('tr')) ? Callback : function(Callback) let l:Callback = type(l:Callback) ==# type(function('tr')) ? l:Callback : function(l:Callback)
if Callback({'path': self, 'nerdtree': a:nerdtree}) if l:Callback({'path': self, 'nerdtree': a:nerdtree})
return 1 return 1
endif endif
endfor endfor
endif endif
@@ -483,7 +483,10 @@ endfunction
" returns true if this path matches the given ignore pattern " returns true if this path matches the given ignore pattern
function! s:Path._ignorePatternMatches(pattern) function! s:Path._ignorePatternMatches(pattern)
let pat = a:pattern let pat = a:pattern
if strpart(pat,len(pat)-7) ==# '[[dir]]' if strpart(pat,len(pat)-8) ==# '[[path]]'
let pat = strpart(pat,0, len(pat)-8)
return self.str() =~# pat
elseif strpart(pat,len(pat)-7) ==# '[[dir]]'
if !self.isDirectory if !self.isDirectory
return 0 return 0
endif endif

View File

@@ -49,6 +49,10 @@ else
call NERDTreeAddMenuItem({'text': '(l)ist the current node', 'shortcut': 'l', 'callback': 'NERDTreeListNodeWin32'}) call NERDTreeAddMenuItem({'text': '(l)ist the current node', 'shortcut': 'l', 'callback': 'NERDTreeListNodeWin32'})
endif endif
if exists('*system')
call NERDTreeAddMenuItem({'text': 'Run (s)ystem command in this directory', 'shortcut':'s', 'callback': 'NERDTreeSystemCommand'})
endif
"FUNCTION: s:inputPrompt(action){{{1 "FUNCTION: s:inputPrompt(action){{{1
"returns the string that should be prompted to the user for the given action "returns the string that should be prompted to the user for the given action
" "
@@ -165,7 +169,7 @@ endfunction
function! NERDTreeAddNode() function! NERDTreeAddNode()
let curDirNode = g:NERDTreeDirNode.GetSelected() let curDirNode = g:NERDTreeDirNode.GetSelected()
let prompt = s:inputPrompt('add') let prompt = s:inputPrompt('add')
let newNodeName = input(prompt, curDirNode.path.str() . nerdtree#slash(), 'file') let newNodeName = substitute(input(prompt, curDirNode.path.str() . nerdtree#slash(), 'file'), '\(^\s*\|\s*$\)', '', 'g')
if newNodeName ==# '' if newNodeName ==# ''
call nerdtree#echo('Node Creation Aborted.') call nerdtree#echo('Node Creation Aborted.')
@@ -202,7 +206,7 @@ function! NERDTreeMoveNode()
let newNodePath = input(prompt, curNode.path.str(), 'file') let newNodePath = input(prompt, curNode.path.str(), 'file')
while filereadable(newNodePath) while filereadable(newNodePath)
call nerdtree#echoWarning('This destination already exists. Try again.') call nerdtree#echoWarning('This destination already exists. Try again.')
let newNodePath = input(prompt, curNode.path.str(), 'file') let newNodePath = substitute(input(prompt, curNode.path.str(), 'file'), '\(^\s*\|\s*$\)', '', 'g')
endwhile endwhile
@@ -333,7 +337,7 @@ endfunction
function! NERDTreeCopyNode() function! NERDTreeCopyNode()
let currentNode = g:NERDTreeFileNode.GetSelected() let currentNode = g:NERDTreeFileNode.GetSelected()
let prompt = s:inputPrompt('copy') let prompt = s:inputPrompt('copy')
let newNodePath = input(prompt, currentNode.path.str(), 'file') let newNodePath = substitute(input(prompt, currentNode.path.str(), 'file'), '\(^\s*\|\s*$\)', '', 'g')
if newNodePath !=# '' if newNodePath !=# ''
"strip trailing slash "strip trailing slash
@@ -460,4 +464,21 @@ function! NERDTreeExecuteFileWindows()
call system('cmd.exe /c start "" ' . shellescape(l:node.path.str())) call system('cmd.exe /c start "" ' . shellescape(l:node.path.str()))
endfunction endfunction
" FUNCTION: NERDTreeSystemCommand() {{{1
function! NERDTreeSystemCommand()
let l:node = g:NERDTreeFileNode.GetSelected()
if empty(l:node)
return
endif
let l:cwd = getcwd()
let l:directory = l:node.path.isDirectory ? l:node.path.str() : l:node.parent.path.str()
execute 'cd '.l:directory
let l:nl = nr2char(10)
echo l:nl . system(input(l:directory . (nerdtree#runningWindows() ? '> ' : ' $ ')))
execute 'cd '.l:cwd
endfunction
" vim: set sw=4 sts=4 et fdm=marker: " vim: set sw=4 sts=4 et fdm=marker:

View File

@@ -36,23 +36,23 @@ if g:NERDTreeDirArrowExpandable !=# ''
exec 'syn match NERDTreeOpenable #' . escape(g:NERDTreeDirArrowExpandable, '~') . '\ze .*/# containedin=NERDTreeDir,NERDTreeFile' exec 'syn match NERDTreeOpenable #' . escape(g:NERDTreeDirArrowExpandable, '~') . '\ze .*/# containedin=NERDTreeDir,NERDTreeFile'
let s:dirArrows = escape(g:NERDTreeDirArrowCollapsible, '~]\-').escape(g:NERDTreeDirArrowExpandable, '~]\-') let s:dirArrows = escape(g:NERDTreeDirArrowCollapsible, '~]\-').escape(g:NERDTreeDirArrowExpandable, '~]\-')
exec 'syn match NERDTreeDir #[^'.s:dirArrows.' ].*/#' exec 'syn match NERDTreeDir #[^'.s:dirArrows.' ].*/#'
exec 'syn match NERDTreeExecFile #^.*'.g:NERDTreeNodeDelimiter.'\*\($\| \)# contains=NERDTreeRO,NERDTreeBookmark' exec 'syn match NERDTreeExecFile #^.*'.g:NERDTreeNodeDelimiter.'\*\($\| \)# contains=NERDTreeRO,NERDTreeBookmarkName'
exec 'syn match NERDTreeFile #^[^"\.'.s:dirArrows.'] *[^'.s:dirArrows.']*# contains=NERDTreeLink,NERDTreeRO,NERDTreeBookmark,NERDTreeExecFile' exec 'syn match NERDTreeFile #^[^"\.'.s:dirArrows.'] *[^'.s:dirArrows.']*# contains=NERDTreeLink,NERDTreeRO,NERDTreeBookmarkName,NERDTreeExecFile'
else else
exec 'syn match NERDTreeDir #[^'.g:NERDTreeNodeDelimiter.']\{-}/\ze\($\|'.g:NERDTreeNodeDelimiter.'\)#' exec 'syn match NERDTreeDir #[^'.g:NERDTreeNodeDelimiter.']\{-}/\ze\($\|'.g:NERDTreeNodeDelimiter.'\)#'
exec 'syn match NERDTreeExecFile #[^'.g:NERDTreeNodeDelimiter.']\{-}'.g:NERDTreeNodeDelimiter.'\*\($\| \)# contains=NERDTreeRO,NERDTreeBookmark' exec 'syn match NERDTreeExecFile #[^'.g:NERDTreeNodeDelimiter.']\{-}'.g:NERDTreeNodeDelimiter.'\*\($\| \)# contains=NERDTreeRO,NERDTreeBookmarkName'
exec 'syn match NERDTreeFile #^.*'.g:NERDTreeNodeDelimiter.'.*[^\/]\($\|'.g:NERDTreeNodeDelimiter.'.*\)# contains=NERDTreeLink,NERDTreeRO,NERDTreeBookmark,NERDTreeExecFile' exec 'syn match NERDTreeFile #^.*'.g:NERDTreeNodeDelimiter.'.*[^\/]\($\|'.g:NERDTreeNodeDelimiter.'.*\)# contains=NERDTreeLink,NERDTreeRO,NERDTreeBookmarkName,NERDTreeExecFile'
endif endif
"highlighting for readonly files "highlighting for readonly files
exec 'syn match NERDTreeRO #.*'.g:NERDTreeNodeDelimiter.'\zs.*\ze'.g:NERDTreeNodeDelimiter.'.*\['.g:NERDTreeGlyphReadOnly.'\]# contains=NERDTreeIgnore,NERDTreeBookmark,NERDTreeFile' exec 'syn match NERDTreeRO #.*'.g:NERDTreeNodeDelimiter.'\zs.*\ze'.g:NERDTreeNodeDelimiter.'.*\['.g:NERDTreeGlyphReadOnly.'\]# contains=NERDTreeIgnore,NERDTreeBookmarkName,NERDTreeFile'
exec 'syn match NERDTreeFlags #\[[^\]]*\]\ze'.g:NERDTreeNodeDelimiter.'# containedin=NERDTreeFile,NERDTreeExecFile,NERDTreeLinkFile,NERDTreeRO,NERDTreeDir' exec 'syn match NERDTreeFlags #\[[^\]]*\]\ze'.g:NERDTreeNodeDelimiter.'# containedin=NERDTreeFile,NERDTreeExecFile,NERDTreeLinkFile,NERDTreeRO,NERDTreeDir'
syn match NERDTreeCWD #^[</].*$# syn match NERDTreeCWD #^[</].*$#
"highlighting for bookmarks "highlighting for bookmarks
syn match NERDTreeBookmark # {.*}#hs=s+1 syn match NERDTreeBookmarkName # {.*}#hs=s+2,he=e-1
"highlighting for the bookmarks table "highlighting for the bookmarks table
syn match NERDTreeBookmarksLeader #^># syn match NERDTreeBookmarksLeader #^>#