mirror of
https://github.com/preservim/nerdtree.git
synced 2025-11-08 19:33:50 -05:00
Compare commits
16 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e731b84559 | ||
|
|
7eee457efa | ||
|
|
aa7e97b7ff | ||
|
|
e5f24e2b8b | ||
|
|
0e71462f90 | ||
|
|
2c14ed0e15 | ||
|
|
de0e2edeac | ||
|
|
81f3eaba29 | ||
|
|
f63fb6984f | ||
|
|
a1fa4a33bf | ||
|
|
3a9d533f3d | ||
|
|
d3f9fc44ca | ||
|
|
1d46d6df3e | ||
|
|
593c16add3 | ||
|
|
d3becd1149 | ||
|
|
1b19089917 |
55
.github/ISSUE_TEMPLATE/bug.md
vendored
55
.github/ISSUE_TEMPLATE/bug.md
vendored
@@ -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
|
||||||
|
|
||||||
|
|||||||
21
.github/ISSUE_TEMPLATE/question.md
vendored
21
.github/ISSUE_TEMPLATE/question.md
vendored
@@ -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
|
||||||
|
|
||||||
|
|||||||
13
CHANGELOG.md
13
CHANGELOG.md
@@ -5,6 +5,19 @@
|
|||||||
- **.PATCH**: Pull Request Title (PR Author) [PR Number](Link to PR)
|
- **.PATCH**: Pull Request Title (PR Author) [PR Number](Link to PR)
|
||||||
-->
|
-->
|
||||||
#### 6.10
|
#### 6.10
|
||||||
|
- **.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)
|
- **.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)
|
- **.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)
|
- **.0**: Enable full path specifications for NERDTreeIgnore (PhilRunninger) [#1207](https://github.com/preservim/nerdtree/pull/1207)
|
||||||
|
|||||||
@@ -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,31 @@ 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:
|
or change your NERDTree-launching shortcut key like so:
|
||||||
```vim
|
```vim
|
||||||
@@ -176,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
|
||||||
|
```
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -109,40 +109,16 @@ endfunction
|
|||||||
|
|
||||||
"FUNCTION: s:initCustomOpenArgs() {{{1
|
"FUNCTION: s:initCustomOpenArgs() {{{1
|
||||||
function! s:initCustomOpenArgs() abort
|
function! s:initCustomOpenArgs() abort
|
||||||
let l:defaultOpenArgs = {'file': {'reuse': 'all', 'where': 'p'}, 'dir': {}}
|
let l:defaultOpenArgs = {'file': {'reuse': 'all', 'where': 'p', 'keepopen':!nerdtree#closeTreeOnOpen()}, 'dir': {}}
|
||||||
let l:customOpenArgs = get(g:, 'NERDTreeCustomOpenArgs', {})
|
try
|
||||||
|
let g:NERDTreeCustomOpenArgs = get(g:, 'NERDTreeCustomOpenArgs', {})
|
||||||
if !s:validateType(l:customOpenArgs, type({})) || empty(l:customOpenArgs)
|
call extend(g:NERDTreeCustomOpenArgs, l:defaultOpenArgs, 'keep')
|
||||||
let g:NERDTreeCustomOpenArgs = l:customOpenArgs
|
catch /^Vim(\a\+):E712:/
|
||||||
return l:defaultOpenArgs
|
call nerdtree#echoWarning('g:NERDTreeCustomOpenArgs is not set properly. Using default value.')
|
||||||
endif
|
let g:NERDTreeCustomOpenArgs = l:defaultOpenArgs
|
||||||
|
finally
|
||||||
for l:typeKey in keys(l:defaultOpenArgs)
|
return g:NERDTreeCustomOpenArgs
|
||||||
if !s:validateType(get(l:customOpenArgs, l:typeKey, {}), type({}))
|
endtry
|
||||||
\ || !has_key(l:customOpenArgs, l:typeKey)
|
|
||||||
let l:customOpenArgs[l:typeKey] = l:defaultOpenArgs[l:typeKey]
|
|
||||||
continue
|
|
||||||
endif
|
|
||||||
|
|
||||||
for l:optionName in keys(l:defaultOpenArgs[l:typeKey])
|
|
||||||
if s:validateType(get(l:customOpenArgs[l:typeKey], l:optionName, v:null), type(''))
|
|
||||||
continue
|
|
||||||
endif
|
|
||||||
let l:customOpenArgs[l:typeKey][l:optionName] = l:defaultOpenArgs[l:typeKey][l:optionName]
|
|
||||||
endfor
|
|
||||||
endfor
|
|
||||||
|
|
||||||
let g:NERDTreeCustomOpenArgs = l:customOpenArgs
|
|
||||||
|
|
||||||
return extend(l:customOpenArgs, l:defaultOpenArgs, 'keep')
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! s:validateType(variable, type) abort
|
|
||||||
if type(a:variable) == a:type
|
|
||||||
return v:true
|
|
||||||
endif
|
|
||||||
|
|
||||||
return v:false
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: s:activateAll() {{{1
|
"FUNCTION: s:activateAll() {{{1
|
||||||
@@ -168,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
|
||||||
@@ -397,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
|
||||||
@@ -539,24 +515,24 @@ 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
|
||||||
@@ -576,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
|
||||||
|
|
||||||
@@ -596,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
|
||||||
@@ -621,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
|
||||||
|
|
||||||
|
|||||||
@@ -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 directory 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|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -169,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.')
|
||||||
@@ -206,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
|
||||||
|
|
||||||
|
|
||||||
@@ -337,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
|
||||||
|
|||||||
@@ -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 #^>#
|
||||||
|
|||||||
Reference in New Issue
Block a user