mirror of
https://github.com/preservim/nerdtree.git
synced 2025-11-08 11:23:48 -05:00
Compare commits
62 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
373a4b28e4 | ||
|
|
4a32dd0be3 | ||
|
|
e571d3e95b | ||
|
|
96e247ba74 | ||
|
|
2af10e3589 | ||
|
|
42a5a2c106 | ||
|
|
f8aa749985 | ||
|
|
aa37cb40da | ||
|
|
6571452857 | ||
|
|
d48ab70721 | ||
|
|
9de5b3e785 | ||
|
|
635071dcc8 | ||
|
|
052b1f00a0 | ||
|
|
f63132cade | ||
|
|
484dc84b47 | ||
|
|
2e9d43b6f8 | ||
|
|
10eaa3a2f4 | ||
|
|
e2670f0d19 | ||
|
|
4cc6097ecb | ||
|
|
30ad6da984 | ||
|
|
3005a0e9c0 | ||
|
|
a7d585f7af | ||
|
|
5e77fb2fef | ||
|
|
29a321d061 | ||
|
|
0257d64248 | ||
|
|
2d7cb043d4 | ||
|
|
f767dd34a0 | ||
|
|
832bbaa729 | ||
|
|
343508e9fd | ||
|
|
495b4e781a | ||
|
|
e67324fdea | ||
|
|
5249b30fbf | ||
|
|
09b165cfac | ||
|
|
6224d20698 | ||
|
|
07612557eb | ||
|
|
7a0312f492 | ||
|
|
41a44be8d5 | ||
|
|
85103aa607 | ||
|
|
1f5018dc45 | ||
|
|
d706f40ae7 | ||
|
|
e41dd019d9 | ||
|
|
2388af7754 | ||
|
|
c3d7c141bb | ||
|
|
450abd1820 | ||
|
|
6d3743549c | ||
|
|
961c3571c4 | ||
|
|
26333ceeab | ||
|
|
8c48845d11 | ||
|
|
b16553ac54 | ||
|
|
e48b5728f9 | ||
|
|
f7b09634ba | ||
|
|
c2c4a6564f | ||
|
|
881c265438 | ||
|
|
26740d1157 | ||
|
|
6d5e185cef | ||
|
|
3a3636b7cb | ||
|
|
5fbf0d7dba | ||
|
|
901aba632b | ||
|
|
a046ba5c5b | ||
|
|
97e4b47aa3 | ||
|
|
ee79ecfb67 | ||
|
|
b579c7751d |
10
.github/PULL_REQUEST_TEMPLATE.md
vendored
10
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -1,5 +1,5 @@
|
|||||||
### Description of Changes
|
### Description of Changes
|
||||||
Closes # <!-- Issue number this PR addresses. If none, remove this line. -->
|
Closes # <!-- Enter the issue number this PR addresses. If none, remove this line. -->
|
||||||
|
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -13,4 +13,10 @@ Closes # <!-- Issue number this PR addresses. If none, remove this line. -->
|
|||||||
- [ ] Update [CHANGELOG.md](https://github.com/scrooloose/nerdtree/blob/master/CHANGELOG.md), following the established pattern.
|
- [ ] Update [CHANGELOG.md](https://github.com/scrooloose/nerdtree/blob/master/CHANGELOG.md), following the established pattern.
|
||||||
#### Collaborator's Instructions
|
#### Collaborator's Instructions
|
||||||
- [ ] Review [CHANGELOG.md](https://github.com/scrooloose/nerdtree/blob/master/CHANGELOG.md), suggesting a different version number if necessary.
|
- [ ] Review [CHANGELOG.md](https://github.com/scrooloose/nerdtree/blob/master/CHANGELOG.md), suggesting a different version number if necessary.
|
||||||
- [ ] After merge, tag the merge commit, e.g. `git tag -a 3.1.4 -m "v3.1.4" && git push origin --tags`
|
- [ ] After merging, tag the commit using these (Mac-compatible) bash commands:
|
||||||
|
```bash
|
||||||
|
git checkout master
|
||||||
|
git pull
|
||||||
|
sed -n "$(grep -n -m2 '####' CHANGELOG.md | cut -f1 -d: | sed 'N;s/\n/,/')p" CHANGELOG.md | sed '$d'
|
||||||
|
git tag -a $(read -p "Tag Name: " tag;echo $tag) -m"$(git show --quiet --pretty=%s)";git push origin --tags
|
||||||
|
```
|
||||||
|
|||||||
45
CHANGELOG.md
45
CHANGELOG.md
@@ -1,13 +1,46 @@
|
|||||||
# NERDTree Change Log
|
# NERDTree Change Log
|
||||||
|
<!-- Introduce a new MAJOR or MINOR version with a 4-hash header.
|
||||||
<!--
|
PATCH versions are listed from newest to oldest under their respective MAJOR.MINOR
|
||||||
Introduce a new MAJOR.MINOR version with a 4-hash header.
|
version in an unordered list. The format is:
|
||||||
|
|
||||||
PATCH versions are listed from newest to oldest under their respective MAJOR.MINOR 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.9
|
||||||
|
- **.6**: Don't use silent when raising User events (PhilRunninger) [#1164](https://github.com/preservim/nerdtree/pull/1164)
|
||||||
|
- **.5**: Fix highlight for file node. (pirey) [#1157](https://github.com/preservim/nerdtree/pull/1157)
|
||||||
|
- **.4**: Make sure symbolic links' flags are highlighted correctly. (PhilRunninger) [#1156](https://github.com/preservim/nerdtree/pull/1156)
|
||||||
|
- **.3**: Fix new NERDTrees' width when previous one was in the only window. (PhilRunninger) [#1153](https://github.com/preservim/nerdtree/pull/1153)
|
||||||
|
- **.2**: Fix the scope of several key mappings (lifecrisis, PhilRunninger) [#1151](https://github.com/preservim/nerdtree/pull/1151)
|
||||||
|
- **.1**: Respect user's `&shellslash` setting in CopyNode and RemoveNode functions (PhilRunninger) [#1150](https://github.com/preservim/nerdtree/pull/1150)
|
||||||
|
- **.0**: Enable opening bookmarks in split windows. (PhilRunninger) [#1144](https://github.com/preservim/nerdtree/pull/1144)
|
||||||
|
#### 6.8
|
||||||
|
- **.0**: Allow concealed characters to show another character. (PhilRunninger) [#1138](https://github.com/preservim/nerdtree/pull/1138)
|
||||||
|
#### 6.7
|
||||||
|
- **.15**: Add curly braces to the list of characters to be escaped. (PhilRunninger) [#1128](https://github.com/preservim/nerdtree/pull/1128)
|
||||||
|
- **.14**: Use backward-compatible `nerdtree#and()` in one place that was missed. (PhilRunninger) [#1134](https://github.com/preservim/nerdtree/pull/1134)
|
||||||
|
- **.13**: `cmd.exe /c start "" <filename>` for windows default viewer support. (J. Altayó) [#1130](https://github.com/preservim/nerdtree/pull/1130)
|
||||||
|
- **.12**: Fixed a bug that caused the file-tree construction to slow down significantly. (Eugenij-W) [#1126](https://github.com/preservim/nerdtree/pull/1126)
|
||||||
|
- **.11**: Fix exception in NERDTreeFind (on windows OS and If the file is located in the root directory of the disk) (Eugenij-W) [#1122](https://github.com/preservim/nerdtree/pull/1122)
|
||||||
|
- **.10**: Do not consider the tree root to be "cascadable". (lifecrisis) [#1120](https://github.com/preservim/nerdtree/pull/1120)
|
||||||
|
- **.9**: Force `:NERDTreeFocus` to allow events to be fired when switching windows. (PhilRunninger) [#1118](https://github.com/preservim/nerdtree/pull/1118)
|
||||||
|
- **.8**: Fix example code for the `NERDTreeAddKeyMap()` function. (PhilRunninger) [#1116](https://github.com/preservim/nerdtree/pull/1116)
|
||||||
|
- **.7**: Put `'%'` argument in `bufname()` for backwards compatibility. (PhilRunninger) [#1105](https://github.com/preservim/nerdtree/pull/1105)
|
||||||
|
- **.6**: If a file's already open in the window, don't edit it again. (PhilRunninger) [#1103](https://github.com/preservim/nerdtree/pull/1103)
|
||||||
|
- **.5**: Prevent unneeded tree creation in `:NERDTreeToggle[VCS] <path>` (PhilRunninger) [#1101](https://github.com/preservim/nerdtree/pull/1101)
|
||||||
|
- **.4**: Add missing calls to the `shellescape()` function (lifecrisis) [#1099](https://github.com/preservim/nerdtree/pull/1099)
|
||||||
|
- **.3**: Fix vsplit to not open empty buffers when opening previously closed file (AwkwardKore) [#1098](https://github.com/preservim/nerdtree/pull/1098)
|
||||||
|
- **.2**: Fix infinity loop (on winvim) in FindParentVCSRoot (Eugenij-W) [#1095](https://github.com/preservim/nerdtree/pull/1095)
|
||||||
|
- **.1**: File Move: Escape existing directory name when looking for open files. (PhilRunninger) [#1094](https://github.com/preservim/nerdtree/pull/1094)
|
||||||
|
- **.0**: Open the parent directory when revealing a non-existent file with :NERDTreeFind (bouk) [#1090](https://github.com/preservim/nerdtree/pull/1090)
|
||||||
|
#### 6.6
|
||||||
|
- **.1**: [add] How to install using dein.vim (kazukazuinaina) [#1087](https://github.com/preservim/nerdtree/pull/1087)
|
||||||
|
- **.0**: Add the ability to turn off directory arrows (PhilRunninger) [#1085](https://github.com/preservim/nerdtree/pull/1085)
|
||||||
|
#### 6.5
|
||||||
|
- **.0**: `NERDTreeToggle <start-directory>` always sets NERDTree root. (PhilRunninger) [#1083](https://github.com/preservim/nerdtree/pull/1083)
|
||||||
#### 6.4
|
#### 6.4
|
||||||
|
- **.6**: NERDTreeFind shows expected message if file doesn't exist e.g. with vim-startify (andys8). [#1081](https://github.com/preservim/nerdtree/pull/1081)
|
||||||
|
- **.5**: Ensure events are (or aren't) being ignored correctly. (PhilRunninger) [#1080](https://github.com/preservim/nerdtree/pull/1080)
|
||||||
|
- **.4**: Prevent overwriting existing files/dirs on node move. (PhilRunninger) [#1079](https://github.com/preservim/nerdtree/pull/1079)
|
||||||
|
- **.3**: Fix regex that finds keyword for minimal menu. (PhilRunninger) [#1075](https://github.com/preservim/nerdtree/pull/1075)
|
||||||
- **.2**: Lint vimscript, fix errors and warnings, add CI job to review PRs (Caleb Maclennan) [#1071](https://github.com/preservim/nerdtree/pull/1071)
|
- **.2**: Lint vimscript, fix errors and warnings, add CI job to review PRs (Caleb Maclennan) [#1071](https://github.com/preservim/nerdtree/pull/1071)
|
||||||
- **.1**: Ensure backward compatibility. v:t_func is not available before Vim 8.0 (Phil Runninger)
|
- **.1**: Ensure backward compatibility. v:t_func is not available before Vim 8.0 (Phil Runninger)
|
||||||
- **.0**: Allow use of function references as callbacks (HiPhish) [#1067](https://github.com/preservim/nerdtree/pull/1067)
|
- **.0**: Allow use of function references as callbacks (HiPhish) [#1067](https://github.com/preservim/nerdtree/pull/1067)
|
||||||
|
|||||||
@@ -59,6 +59,13 @@ Plug 'preservim/nerdtree'
|
|||||||
call plug#end()
|
call plug#end()
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### [dein.vim](https://github.com/Shougo/dein.vim)
|
||||||
|
```vim
|
||||||
|
call dein#begin()
|
||||||
|
call dein#add('preservim/nerdtree')
|
||||||
|
call dein#end()
|
||||||
|
```
|
||||||
|
|
||||||
#### [apt-vim](https://github.com/egalpin/apt-vim)
|
#### [apt-vim](https://github.com/egalpin/apt-vim)
|
||||||
```bash
|
```bash
|
||||||
apt-vim install -y https://github.com/preservim/nerdtree.git
|
apt-vim install -y https://github.com/preservim/nerdtree.git
|
||||||
@@ -143,3 +150,8 @@ Use these variables in your vimrc. Note that below are default arrow symbols
|
|||||||
let g:NERDTreeDirArrowExpandable = '▸'
|
let g:NERDTreeDirArrowExpandable = '▸'
|
||||||
let g:NERDTreeDirArrowCollapsible = '▾'
|
let g:NERDTreeDirArrowCollapsible = '▾'
|
||||||
```
|
```
|
||||||
|
You can remove the arrows altogether by setting these variables to empty strings, as shown below. This will remove not only the arrows, but a single space following them, shifting the whole tree two character positions to the left.
|
||||||
|
```vim
|
||||||
|
let g:NERDTreeDirArrowExpandable = ''
|
||||||
|
let g:NERDTreeDirArrowCollapsible = ''
|
||||||
|
```
|
||||||
|
|||||||
@@ -30,9 +30,11 @@ endfunction
|
|||||||
" SECTION: General Functions {{{1
|
" SECTION: General Functions {{{1
|
||||||
"============================================================
|
"============================================================
|
||||||
|
|
||||||
"FUNCTION: nerdtree#slash() {{{2
|
" FUNCTION: nerdtree#slash() {{{2
|
||||||
|
" Return the path separator used by the underlying file system. Special
|
||||||
|
" consideration is taken for the use of the 'shellslash' option on Windows
|
||||||
|
" systems.
|
||||||
function! nerdtree#slash() abort
|
function! nerdtree#slash() abort
|
||||||
|
|
||||||
if nerdtree#runningWindows()
|
if nerdtree#runningWindows()
|
||||||
if exists('+shellslash') && &shellslash
|
if exists('+shellslash') && &shellslash
|
||||||
return '/'
|
return '/'
|
||||||
@@ -45,7 +47,7 @@ function! nerdtree#slash() abort
|
|||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: nerdtree#and(x,y) {{{2
|
"FUNCTION: nerdtree#and(x,y) {{{2
|
||||||
" Implements and() function for Vim <= 7.2
|
" Implements and() function for Vim <= 7.4
|
||||||
function! nerdtree#and(x,y) abort
|
function! nerdtree#and(x,y) abort
|
||||||
if exists('*and')
|
if exists('*and')
|
||||||
return and(a:x, a:y)
|
return and(a:x, a:y)
|
||||||
@@ -169,8 +171,11 @@ function! nerdtree#exec(cmd, ignoreAll) abort
|
|||||||
if a:ignoreAll
|
if a:ignoreAll
|
||||||
set eventignore=all
|
set eventignore=all
|
||||||
endif
|
endif
|
||||||
exec a:cmd
|
try
|
||||||
let &eventignore = old_ei
|
exec a:cmd
|
||||||
|
finally
|
||||||
|
let &eventignore = old_ei
|
||||||
|
endtry
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" FUNCTION: nerdtree#has_opt(options, name) {{{2
|
" FUNCTION: nerdtree#has_opt(options, name) {{{2
|
||||||
|
|||||||
@@ -25,12 +25,16 @@ function! nerdtree#ui_glue#createDefaultBindings() abort
|
|||||||
call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapPreview, 'scope': 'Bookmark', 'callback': s.'previewBookmark' })
|
call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapPreview, 'scope': 'Bookmark', 'callback': s.'previewBookmark' })
|
||||||
call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapActivateNode, 'scope': 'all', 'callback': s.'activateAll' })
|
call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapActivateNode, 'scope': 'all', 'callback': s.'activateAll' })
|
||||||
|
|
||||||
call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapOpenSplit, 'scope': 'Node', 'callback': s.'openHSplit' })
|
call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapOpenSplit, 'scope': 'FileNode', 'callback': s.'openHSplit' })
|
||||||
call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapOpenVSplit, 'scope': 'Node', 'callback': s.'openVSplit' })
|
call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapOpenSplit, 'scope': 'Bookmark', 'callback': s.'openHSplitBookmark' })
|
||||||
|
call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapOpenVSplit, 'scope': 'FileNode', 'callback': s.'openVSplit' })
|
||||||
|
call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapOpenVSplit, 'scope': 'Bookmark', 'callback': s.'openVSplitBookmark' })
|
||||||
|
|
||||||
call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapPreview, 'scope': 'Node', 'callback': s.'previewNodeCurrent' })
|
call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapPreview, 'scope': 'FileNode', 'callback': s.'previewNodeCurrent' })
|
||||||
call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapPreviewVSplit, 'scope': 'Node', 'callback': s.'previewNodeVSplit' })
|
call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapPreviewSplit, 'scope': 'FileNode', 'callback': s.'previewNodeHSplit' })
|
||||||
call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapPreviewSplit, 'scope': 'Node', 'callback': s.'previewNodeHSplit' })
|
call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapPreviewSplit, 'scope': 'Bookmark', 'callback': s.'previewNodeHSplitBookmark' })
|
||||||
|
call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapPreviewVSplit, 'scope': 'FileNode', 'callback': s.'previewNodeVSplit' })
|
||||||
|
call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapPreviewVSplit, 'scope': 'Bookmark', 'callback': s.'previewNodeVSplitBookmark' })
|
||||||
|
|
||||||
call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapOpenRecursively, 'scope': 'DirNode', 'callback': s.'openNodeRecursively' })
|
call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapOpenRecursively, 'scope': 'DirNode', 'callback': s.'openNodeRecursively' })
|
||||||
|
|
||||||
@@ -284,15 +288,18 @@ endfunction
|
|||||||
" FUNCTION: s:findAndRevealPath(pathStr) {{{1
|
" FUNCTION: s:findAndRevealPath(pathStr) {{{1
|
||||||
function! s:findAndRevealPath(pathStr) abort
|
function! s:findAndRevealPath(pathStr) abort
|
||||||
let l:pathStr = !empty(a:pathStr) ? a:pathStr : expand('%:p')
|
let l:pathStr = !empty(a:pathStr) ? a:pathStr : expand('%:p')
|
||||||
if !filereadable(l:pathStr)
|
let l:revealOpts = {}
|
||||||
let l:pathStr = fnamemodify(l:pathStr, ':h')
|
|
||||||
endif
|
|
||||||
|
|
||||||
if empty(l:pathStr)
|
if empty(l:pathStr)
|
||||||
call nerdtree#echoWarning('no file for the current buffer')
|
call nerdtree#echoWarning('no file for the current buffer')
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if !filereadable(l:pathStr)
|
||||||
|
let l:pathStr = fnamemodify(l:pathStr, ':h')
|
||||||
|
let l:revealOpts['open'] = 1
|
||||||
|
endif
|
||||||
|
|
||||||
try
|
try
|
||||||
let l:pathStr = g:NERDTreePath.Resolve(l:pathStr)
|
let l:pathStr = g:NERDTreePath.Resolve(l:pathStr)
|
||||||
let l:pathObj = g:NERDTreePath.New(l:pathStr)
|
let l:pathObj = g:NERDTreePath.New(l:pathStr)
|
||||||
@@ -326,7 +333,7 @@ function! s:findAndRevealPath(pathStr) abort
|
|||||||
call b:NERDTree.ui.setShowHidden(1)
|
call b:NERDTree.ui.setShowHidden(1)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let l:node = b:NERDTree.root.reveal(l:pathObj)
|
let l:node = b:NERDTree.root.reveal(l:pathObj, l:revealOpts)
|
||||||
call b:NERDTree.render()
|
call b:NERDTree.render()
|
||||||
call l:node.putCursorHere(1, 0)
|
call l:node.putCursorHere(1, 0)
|
||||||
endfunction
|
endfunction
|
||||||
@@ -508,6 +515,28 @@ function! s:openVSplit(target) abort
|
|||||||
call a:target.activate({'where': 'v'})
|
call a:target.activate({'where': 'v'})
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
"FUNCTION: s:openHSplitBookmark(bookmark) {{{1
|
||||||
|
"handle the user activating a bookmark
|
||||||
|
function! s:openHSplitBookmark(bm) abort
|
||||||
|
call a:bm.activate(b:NERDTree, !a:bm.path.isDirectory ? {'where': 'h'} : {})
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
"FUNCTION: s:openVSplitBookmark(bookmark) {{{1
|
||||||
|
"handle the user activating a bookmark
|
||||||
|
function! s:openVSplitBookmark(bm) abort
|
||||||
|
call a:bm.activate(b:NERDTree, !a:bm.path.isDirectory ? {'where': 'v'} : {})
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" FUNCTION: s:previewHSplitBookmark(bookmark) {{{1
|
||||||
|
function! s:previewNodeHSplitBookmark(bookmark) abort
|
||||||
|
call a:bookmark.activate(b:NERDTree, !a:bookmark.path.isDirectory ? {'stay': 1, 'where': 'h', 'keepopen': 1} : {})
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" FUNCTION: s:previewVSplitBookmark(bookmark) {{{1
|
||||||
|
function! s:previewNodeVSplitBookmark(bookmark) abort
|
||||||
|
call a:bookmark.activate(b:NERDTree, !a:bookmark.path.isDirectory ? {'stay': 1, 'where': 'v', 'keepopen': 1} : {})
|
||||||
|
endfunction
|
||||||
|
|
||||||
" FUNCTION: s:openExplorer(node) {{{1
|
" FUNCTION: s:openExplorer(node) {{{1
|
||||||
function! s:openExplorer(node) abort
|
function! s:openExplorer(node) abort
|
||||||
call a:node.openExplorer()
|
call a:node.openExplorer()
|
||||||
@@ -535,11 +564,7 @@ endfunction
|
|||||||
|
|
||||||
" FUNCTION: s:previewBookmark(bookmark) {{{1
|
" FUNCTION: s:previewBookmark(bookmark) {{{1
|
||||||
function! s:previewBookmark(bookmark) abort
|
function! s:previewBookmark(bookmark) abort
|
||||||
if a:bookmark.path.isDirectory
|
call a:bookmark.activate(b:NERDTree, !a:bookmark.path.isDirectory ? {'stay': 1, 'where': 'h', 'keepopen': 1} : {})
|
||||||
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
|
||||||
|
|||||||
@@ -122,8 +122,9 @@ The following features and functionality are provided by the NERDTree:
|
|||||||
|
|
||||||
:NERDTreeToggle [<start-directory> | <bookmark>] *:NERDTreeToggle*
|
:NERDTreeToggle [<start-directory> | <bookmark>] *:NERDTreeToggle*
|
||||||
If a NERDTree already exists for this tab, it is reopened and rendered
|
If a NERDTree already exists for this tab, it is reopened and rendered
|
||||||
again. If no NERDTree exists for this tab then this command acts the
|
again. If <start-directory> or <bookmark> is given, the root of NERDTree
|
||||||
same as the |:NERDTree| command.
|
is set to that path. If no NERDTree exists for this tab then this 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
|
||||||
@@ -317,9 +318,8 @@ Applies to: files.
|
|||||||
If a file node or a bookmark that links to a file is selected, it is opened in
|
If a file node or a bookmark that links to a file is selected, it is opened in
|
||||||
the previous window, but the cursor does not move.
|
the previous window, but the cursor does not move.
|
||||||
|
|
||||||
If a bookmark that links to a directory is selected, that directory is found
|
If a bookmark that links to a directory is selected then that directory
|
||||||
in the current NERDTree. If the directory couldn't be found, a new NERDTree is
|
becomes the new root.
|
||||||
created.
|
|
||||||
|
|
||||||
The default key combo for this mapping is "g" + NERDTreeMapActivateNode (see
|
The default key combo for this mapping is "g" + NERDTreeMapActivateNode (see
|
||||||
|NERDTree-o|).
|
|NERDTree-o|).
|
||||||
@@ -349,7 +349,7 @@ The same as |NERDTree-t| except that the focus is kept in the current tab.
|
|||||||
*NERDTree-i*
|
*NERDTree-i*
|
||||||
Default key: i
|
Default key: i
|
||||||
Map setting: *NERDTreeMapOpenSplit*
|
Map setting: *NERDTreeMapOpenSplit*
|
||||||
Applies to: files.
|
Applies to: files, and bookmarks pointing to files.
|
||||||
|
|
||||||
Opens the selected file in a new split window and puts the cursor in the new
|
Opens the selected file in a new split window and puts the cursor in the new
|
||||||
window.
|
window.
|
||||||
@@ -358,7 +358,7 @@ window.
|
|||||||
*NERDTree-gi*
|
*NERDTree-gi*
|
||||||
Default key: gi
|
Default key: gi
|
||||||
Map setting: *NERDTreeMapPreviewSplit*
|
Map setting: *NERDTreeMapPreviewSplit*
|
||||||
Applies to: files.
|
Applies to: files, and bookmarks pointing to files.
|
||||||
|
|
||||||
The same as |NERDTree-i| except that the cursor is not moved.
|
The same as |NERDTree-i| except that the cursor is not moved.
|
||||||
|
|
||||||
@@ -369,7 +369,7 @@ The default key combo for this mapping is "g" + NERDTreeMapOpenSplit (see
|
|||||||
*NERDTree-s*
|
*NERDTree-s*
|
||||||
Default key: s
|
Default key: s
|
||||||
Map setting: *NERDTreeMapOpenVSplit*
|
Map setting: *NERDTreeMapOpenVSplit*
|
||||||
Applies to: files.
|
Applies to: files, and bookmarks pointing to files.
|
||||||
|
|
||||||
Opens the selected file in a new vertically split window and puts the cursor
|
Opens the selected file in a new vertically split window and puts the cursor
|
||||||
in the new window.
|
in the new window.
|
||||||
@@ -378,7 +378,7 @@ in the new window.
|
|||||||
*NERDTree-gs*
|
*NERDTree-gs*
|
||||||
Default key: gs
|
Default key: gs
|
||||||
Map setting: *NERDTreeMapPreviewVSplit*
|
Map setting: *NERDTreeMapPreviewVSplit*
|
||||||
Applies to: files.
|
Applies to: files, and bookmarks pointing to files.
|
||||||
|
|
||||||
The same as |NERDTree-s| except that the cursor is not moved.
|
The same as |NERDTree-s| except that the cursor is not moved.
|
||||||
|
|
||||||
@@ -1222,13 +1222,19 @@ Values: Any single character.
|
|||||||
Defaults: Windows: ~ and + Others: ▾ and ▸
|
Defaults: Windows: ~ and + Others: ▾ and ▸
|
||||||
|
|
||||||
These characters indicate whether a directory is collapsible or expandable.
|
These characters indicate whether a directory is collapsible or expandable.
|
||||||
|
Example: >
|
||||||
They can be set to "\u00a0" to hide the arrows, but if you do this you may
|
|
||||||
need to change the node delimiter. See |NERDTreeNodeDelimiter|. You cannot use
|
|
||||||
the same character for both the arrows and the delimiter. Example: >
|
|
||||||
let NERDTreeDirArrowExpandable=">"
|
let NERDTreeDirArrowExpandable=">"
|
||||||
let NERDTreeDirArrowCollapsible="v"
|
let NERDTreeDirArrowCollapsible="v"
|
||||||
<
|
<
|
||||||
|
They can be set to "\u00a0" to replace the arrows with a non-breaking space.
|
||||||
|
If you do this you may need to change the node delimiter. See
|
||||||
|
|NERDTreeNodeDelimiter|. You cannot use the same character for both the arrows
|
||||||
|
and the delimiter.
|
||||||
|
|
||||||
|
Alternatively, they can be set to '' (an empty string). This removes the
|
||||||
|
arrows and the single space that follows them, shifting the entire tree two
|
||||||
|
character positions to the left.
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
*NERDTreeNodeDelimiter*
|
*NERDTreeNodeDelimiter*
|
||||||
Values: Any single character.
|
Values: Any single character.
|
||||||
@@ -1346,12 +1352,12 @@ NERDTreeAddKeyMap({options}) *NERDTreeAddKeyMap()*
|
|||||||
Example: >
|
Example: >
|
||||||
call NERDTreeAddKeyMap({
|
call NERDTreeAddKeyMap({
|
||||||
\ 'key': 'foo',
|
\ 'key': 'foo',
|
||||||
\ 'callback': 'NERDTreeCDHandler',
|
\ 'callback': 'NERDTreeEchoPathHandler',
|
||||||
\ 'quickhelpText': 'echo full path of current node',
|
\ 'quickhelpText': 'echo full path of current node',
|
||||||
\ 'scope': 'DirNode' })
|
\ 'scope': 'DirNode' })
|
||||||
|
|
||||||
function! NERDTreeCDHandler(dirnode)
|
function! NERDTreeEchoPathHandler(dirnode)
|
||||||
call a:dirnode.changeToDir()
|
echo a:dirnode.path.str()
|
||||||
endfunction
|
endfunction
|
||||||
<
|
<
|
||||||
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.
|
||||||
|
|||||||
@@ -28,7 +28,9 @@ endfunction
|
|||||||
|
|
||||||
" FUNCTION: s:Creator._broadcastInitEvent() {{{1
|
" FUNCTION: s:Creator._broadcastInitEvent() {{{1
|
||||||
function! s:Creator._broadcastInitEvent()
|
function! s:Creator._broadcastInitEvent()
|
||||||
silent doautocmd User NERDTreeInit
|
if exists('#NERDTreeInit')
|
||||||
|
doautocmd User NERDTreeInit
|
||||||
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" FUNCTION: s:Creator.BufNamePrefix() {{{1
|
" FUNCTION: s:Creator.BufNamePrefix() {{{1
|
||||||
@@ -247,9 +249,13 @@ function! s:Creator._pathForString(str)
|
|||||||
|
|
||||||
"hack to get an absolute path if a relative path is given
|
"hack to get an absolute path if a relative path is given
|
||||||
if dir =~# '^\.'
|
if dir =~# '^\.'
|
||||||
let dir = getcwd() . g:NERDTreePath.Slash() . dir
|
let dir = getcwd() . nerdtree#slash() . dir
|
||||||
|
endif
|
||||||
|
|
||||||
|
"hack to prevent removing slash if dir is the root of the file system.
|
||||||
|
if dir !=# '/'
|
||||||
|
let dir = g:NERDTreePath.Resolve(dir)
|
||||||
endif
|
endif
|
||||||
let dir = g:NERDTreePath.Resolve(dir)
|
|
||||||
|
|
||||||
try
|
try
|
||||||
let path = g:NERDTreePath.New(dir)
|
let path = g:NERDTreePath.New(dir)
|
||||||
@@ -333,14 +339,17 @@ function! s:Creator._tabpagevar(tabnr, var)
|
|||||||
let old_ei = &eventignore
|
let old_ei = &eventignore
|
||||||
set eventignore=all
|
set eventignore=all
|
||||||
|
|
||||||
exec 'tabnext ' . a:tabnr
|
try
|
||||||
let v = -1
|
exec 'tabnext ' . a:tabnr
|
||||||
if exists('t:' . a:var)
|
let v = -1
|
||||||
exec 'let v = t:' . a:var
|
if exists('t:' . a:var)
|
||||||
endif
|
exec 'let v = t:' . a:var
|
||||||
exec 'tabnext ' . currentTab
|
endif
|
||||||
|
exec 'tabnext ' . currentTab
|
||||||
|
|
||||||
let &eventignore = old_ei
|
finally
|
||||||
|
let &eventignore = old_ei
|
||||||
|
endtry
|
||||||
|
|
||||||
return v
|
return v
|
||||||
endfunction
|
endfunction
|
||||||
@@ -352,17 +361,20 @@ function! s:Creator.ToggleTabTree(dir)
|
|||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" FUNCTION: s:Creator.toggleTabTree(dir) {{{1
|
" FUNCTION: s:Creator.toggleTabTree(dir) {{{1
|
||||||
" Toggles the NERD tree. I.e the NERD tree is open, it is closed, if it is
|
" Toggles the NERD tree. I.e if the NERD tree is open, it is closed. If it is
|
||||||
" closed it is restored or initialized (if it doesnt exist)
|
" closed, it is restored or initialized. If dir is not empty, it will be set
|
||||||
|
" as the new root.
|
||||||
"
|
"
|
||||||
" Args:
|
" Args:
|
||||||
" dir: the full path for the root node (is only used if the NERD tree is being
|
" dir: the full path for the root node (is used if the NERD tree is being
|
||||||
" initialized.
|
" initialized, or to change the root to a new dir.)
|
||||||
function! s:Creator.toggleTabTree(dir)
|
function! s:Creator.toggleTabTree(dir)
|
||||||
if g:NERDTree.ExistsForTab()
|
if g:NERDTree.ExistsForTab()
|
||||||
if !g:NERDTree.IsOpen()
|
if !g:NERDTree.IsOpen()
|
||||||
call self._createTreeWin()
|
call self._createTreeWin()
|
||||||
if !&hidden
|
if !empty(a:dir) && a:dir !=# b:NERDTree.root.path.str()
|
||||||
|
call self.createTabTree(a:dir)
|
||||||
|
elseif !&hidden
|
||||||
call b:NERDTree.render()
|
call b:NERDTree.render()
|
||||||
endif
|
endif
|
||||||
call b:NERDTree.ui.restoreScreenState()
|
call b:NERDTree.ui.restoreScreenState()
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ function! s:MenuController._echoPrompt()
|
|||||||
|
|
||||||
if self.isMinimal()
|
if self.isMinimal()
|
||||||
let selection = self.menuItems[self.selection].text
|
let selection = self.menuItems[self.selection].text
|
||||||
let keyword = matchstr(selection, '\([^ ]*')
|
let keyword = matchstr(selection, '[^ ]*([^ ]*')
|
||||||
|
|
||||||
let shortcuts = map(copy(self.menuItems), "v:val['shortcut']")
|
let shortcuts = map(copy(self.menuItems), "v:val['shortcut']")
|
||||||
let shortcuts[self.selection] = ' ' . keyword . ' '
|
let shortcuts[self.selection] = ' ' . keyword . ' '
|
||||||
|
|||||||
@@ -27,7 +27,9 @@ function! s:NERDTree.changeRoot(node)
|
|||||||
call self.render()
|
call self.render()
|
||||||
call self.root.putCursorHere(0, 0)
|
call self.root.putCursorHere(0, 0)
|
||||||
|
|
||||||
silent doautocmd User NERDTreeNewRoot
|
if exists('#NERDTreeNewRoot')
|
||||||
|
doautocmd User NERDTreeNewRoot
|
||||||
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: s:NERDTree.Close() {{{1
|
"FUNCTION: s:NERDTree.Close() {{{1
|
||||||
@@ -96,9 +98,9 @@ endfunction
|
|||||||
|
|
||||||
"FUNCTION: s:NERDTree.CursorToTreeWin(){{{1
|
"FUNCTION: s:NERDTree.CursorToTreeWin(){{{1
|
||||||
"Places the cursor in the nerd tree window
|
"Places the cursor in the nerd tree window
|
||||||
function! s:NERDTree.CursorToTreeWin()
|
function! s:NERDTree.CursorToTreeWin(...)
|
||||||
call g:NERDTree.MustBeOpen()
|
call g:NERDTree.MustBeOpen()
|
||||||
call nerdtree#exec(g:NERDTree.GetWinNum() . 'wincmd w', 1)
|
call nerdtree#exec(g:NERDTree.GetWinNum() . 'wincmd w', a:0 >0 ? a:1 : 1)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" Function: s:NERDTree.ExistsForBuffer() {{{1
|
" Function: s:NERDTree.ExistsForBuffer() {{{1
|
||||||
|
|||||||
@@ -195,7 +195,7 @@ function! s:Opener._newVSplit()
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
call nerdtree#exec('wincmd p', 1)
|
call nerdtree#exec('wincmd p', 1)
|
||||||
call nerdtree#exec('vnew', 1)
|
call nerdtree#exec('vsplit', 1)
|
||||||
|
|
||||||
let l:currentWindowNumber = winnr()
|
let l:currentWindowNumber = winnr()
|
||||||
|
|
||||||
@@ -219,7 +219,7 @@ endfunction
|
|||||||
|
|
||||||
" FUNCTION: Opener._openFile() {{{1
|
" FUNCTION: Opener._openFile() {{{1
|
||||||
function! s:Opener._openFile()
|
function! s:Opener._openFile()
|
||||||
if !self._stay && !and(g:NERDTreeQuitOnOpen,1) && exists('b:NERDTreeZoomed') && b:NERDTreeZoomed
|
if !self._stay && !nerdtree#and(g:NERDTreeQuitOnOpen,1) && exists('b:NERDTreeZoomed') && b:NERDTreeZoomed
|
||||||
call b:NERDTree.ui.toggleZoom()
|
call b:NERDTree.ui.toggleZoom()
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|||||||
@@ -25,10 +25,10 @@ function! s:Path.AbsolutePathFor(pathStr)
|
|||||||
if l:prependWorkingDir
|
if l:prependWorkingDir
|
||||||
let l:result = getcwd()
|
let l:result = getcwd()
|
||||||
|
|
||||||
if l:result[-1:] ==# s:Path.Slash()
|
if l:result[-1:] == nerdtree#slash()
|
||||||
let l:result = l:result . a:pathStr
|
let l:result = l:result . a:pathStr
|
||||||
else
|
else
|
||||||
let l:result = l:result . s:Path.Slash() . a:pathStr
|
let l:result = l:result . nerdtree#slash() . a:pathStr
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@@ -199,7 +199,7 @@ function! s:Path.copy(dest)
|
|||||||
let cmd_prefix = (self.isDirectory ? g:NERDTreeCopyDirCmd : g:NERDTreeCopyFileCmd)
|
let cmd_prefix = (self.isDirectory ? g:NERDTreeCopyDirCmd : g:NERDTreeCopyFileCmd)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let cmd = cmd_prefix . ' ' . escape(self.str(), self._escChars()) . ' ' . escape(a:dest, self._escChars())
|
let cmd = cmd_prefix . ' ' . shellescape(self.str()) . ' ' . shellescape(a:dest)
|
||||||
let success = system(cmd)
|
let success = system(cmd)
|
||||||
if v:shell_error !=# 0
|
if v:shell_error !=# 0
|
||||||
throw "NERDTree.CopyError: Could not copy '". self.str() ."' to: '" . a:dest . "'"
|
throw "NERDTree.CopyError: Could not copy '". self.str() ."' to: '" . a:dest . "'"
|
||||||
@@ -295,7 +295,10 @@ endfunction
|
|||||||
|
|
||||||
" FUNCTION: Path.edit() {{{1
|
" FUNCTION: Path.edit() {{{1
|
||||||
function! s:Path.edit()
|
function! s:Path.edit()
|
||||||
exec 'edit ' . self.str({'format': 'Edit'})
|
let l:bufname = self.str({'format': 'Edit'})
|
||||||
|
if bufname('%') !=# l:bufname
|
||||||
|
exec 'edit ' . l:bufname
|
||||||
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" FUNCTION: Path.extractDriveLetter(fullpath) {{{1
|
" FUNCTION: Path.extractDriveLetter(fullpath) {{{1
|
||||||
@@ -329,7 +332,7 @@ function! s:Path._escChars()
|
|||||||
return " `\|\"#%&,?()\*^<>$"
|
return " `\|\"#%&,?()\*^<>$"
|
||||||
endif
|
endif
|
||||||
|
|
||||||
return " \\`\|\"#%&,?()\*^<>[]$"
|
return " \\`\|\"#%&,?()\*^<>[]{}$"
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" FUNCTION: Path.getDir() {{{1
|
" FUNCTION: Path.getDir() {{{1
|
||||||
@@ -543,26 +546,36 @@ endfunction
|
|||||||
" return 1 if this path is somewhere above the given path in the filesystem.
|
" return 1 if this path is somewhere above the given path in the filesystem.
|
||||||
"
|
"
|
||||||
" a:path should be a dir
|
" a:path should be a dir
|
||||||
function! s:Path.isAncestor(path)
|
function! s:Path.isAncestor(child)
|
||||||
if !self.isDirectory
|
return a:child.isUnder(self)
|
||||||
return 0
|
|
||||||
endif
|
|
||||||
|
|
||||||
let this = self.str()
|
|
||||||
let that = a:path.str()
|
|
||||||
return stridx(that, this) ==# 0
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" FUNCTION: Path.isUnder(path) {{{1
|
" FUNCTION: Path.isUnder(path) {{{1
|
||||||
" return 1 if this path is somewhere under the given path in the filesystem.
|
" return 1 if this path is somewhere under the given path in the filesystem.
|
||||||
function! s:Path.isUnder(path)
|
function! s:Path.isUnder(parent)
|
||||||
if a:path.isDirectory ==# 0
|
if a:parent.isDirectory ==# 0
|
||||||
return 0
|
return 0
|
||||||
endif
|
endif
|
||||||
|
if nerdtree#runningWindows() && a:parent.drive !=# self.drive
|
||||||
let this = self.str()
|
return 0
|
||||||
let that = a:path.str()
|
endif
|
||||||
return stridx(this, that . s:Path.Slash()) ==# 0
|
let l:this_count = len(self.pathSegments)
|
||||||
|
if l:this_count ==# 0
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
let l:that_count = len(a:parent.pathSegments)
|
||||||
|
if l:that_count ==# 0
|
||||||
|
return 1
|
||||||
|
endif
|
||||||
|
if l:that_count >= l:this_count
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
for i in range(0, l:that_count-1)
|
||||||
|
if self.pathSegments[i] !=# a:parent.pathSegments[i]
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
return 1
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" FUNCTION: Path.JoinPathStrings(...) {{{1
|
" FUNCTION: Path.JoinPathStrings(...) {{{1
|
||||||
@@ -601,23 +614,6 @@ function! s:Path.New(pathStr)
|
|||||||
return l:newPath
|
return l:newPath
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" FUNCTION: Path.Slash() {{{1
|
|
||||||
" Return the path separator used by the underlying file system. Special
|
|
||||||
" consideration is taken for the use of the 'shellslash' option on Windows
|
|
||||||
" systems.
|
|
||||||
function! s:Path.Slash()
|
|
||||||
|
|
||||||
if nerdtree#runningWindows()
|
|
||||||
if exists('+shellslash') && &shellslash
|
|
||||||
return '/'
|
|
||||||
endif
|
|
||||||
|
|
||||||
return '\'
|
|
||||||
endif
|
|
||||||
|
|
||||||
return '/'
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" FUNCTION: Path.Resolve() {{{1
|
" FUNCTION: Path.Resolve() {{{1
|
||||||
" Invoke the vim resolve() function and return the result
|
" Invoke the vim resolve() function and return the result
|
||||||
" This is necessary because in some versions of vim resolve() removes trailing
|
" This is necessary because in some versions of vim resolve() removes trailing
|
||||||
@@ -802,7 +798,7 @@ function! s:Path._strForEdit()
|
|||||||
|
|
||||||
" On Windows, the drive letter may be removed by "fnamemodify()". Add it
|
" On Windows, the drive letter may be removed by "fnamemodify()". Add it
|
||||||
" back, if necessary.
|
" back, if necessary.
|
||||||
if nerdtree#runningWindows() && l:result[0] ==# s:Path.Slash()
|
if nerdtree#runningWindows() && l:result[0] == nerdtree#slash()
|
||||||
let l:result = self.drive . l:result
|
let l:result = self.drive . l:result
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@@ -817,14 +813,14 @@ endfunction
|
|||||||
|
|
||||||
" FUNCTION: Path._strForGlob() {{{1
|
" FUNCTION: Path._strForGlob() {{{1
|
||||||
function! s:Path._strForGlob()
|
function! s:Path._strForGlob()
|
||||||
let lead = s:Path.Slash()
|
let lead = nerdtree#slash()
|
||||||
|
|
||||||
"if we are running windows then slap a drive letter on the front
|
"if we are running windows then slap a drive letter on the front
|
||||||
if nerdtree#runningWindows()
|
if nerdtree#runningWindows()
|
||||||
let lead = self.drive . '\'
|
let lead = self.drive . '\'
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let toReturn = lead . join(self.pathSegments, s:Path.Slash())
|
let toReturn = lead . join(self.pathSegments, nerdtree#slash())
|
||||||
|
|
||||||
if !nerdtree#runningWindows()
|
if !nerdtree#runningWindows()
|
||||||
let toReturn = escape(toReturn, self._escChars())
|
let toReturn = escape(toReturn, self._escChars())
|
||||||
@@ -836,7 +832,7 @@ endfunction
|
|||||||
" Return the absolute pathname associated with this Path object. The pathname
|
" Return the absolute pathname associated with this Path object. The pathname
|
||||||
" returned is appropriate for the underlying file system.
|
" returned is appropriate for the underlying file system.
|
||||||
function! s:Path._str()
|
function! s:Path._str()
|
||||||
let l:separator = s:Path.Slash()
|
let l:separator = nerdtree#slash()
|
||||||
let l:leader = l:separator
|
let l:leader = l:separator
|
||||||
|
|
||||||
if nerdtree#runningWindows()
|
if nerdtree#runningWindows()
|
||||||
|
|||||||
@@ -104,16 +104,11 @@ function! s:TreeDirNode.displayString()
|
|||||||
endfor
|
endfor
|
||||||
|
|
||||||
" Select the appropriate open/closed status indicator symbol.
|
" Select the appropriate open/closed status indicator symbol.
|
||||||
if l:cascade[-1].isOpen
|
let l:symbol = (l:cascade[-1].isOpen ? g:NERDTreeDirArrowCollapsible : g:NERDTreeDirArrowExpandable )
|
||||||
let l:symbol = g:NERDTreeDirArrowCollapsible
|
let l:symbol .= (g:NERDTreeDirArrowExpandable ==# '' ? '' : ' ')
|
||||||
else
|
|
||||||
let l:symbol = g:NERDTreeDirArrowExpandable
|
|
||||||
endif
|
|
||||||
|
|
||||||
let l:flags = l:cascade[-1].path.flagSet.renderToString()
|
let l:flags = l:cascade[-1].path.flagSet.renderToString()
|
||||||
|
|
||||||
let l:result = l:symbol . ' ' . l:flags . l:label
|
return l:symbol . l:flags . l:label
|
||||||
return l:result
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" FUNCTION: TreeDirNode.findNode(path) {{{1
|
" FUNCTION: TreeDirNode.findNode(path) {{{1
|
||||||
@@ -283,8 +278,8 @@ function! s:TreeDirNode._glob(pattern, all)
|
|||||||
else
|
else
|
||||||
let l:pathSpec = escape(fnamemodify(self.path.str({'format': 'Glob'}), ':.'), ',')
|
let l:pathSpec = escape(fnamemodify(self.path.str({'format': 'Glob'}), ':.'), ',')
|
||||||
|
|
||||||
" On Windows, the drive letter may be removed by fnamemodify().
|
" On Windows, the drive letter may be removed by "fnamemodify()".
|
||||||
if nerdtree#runningWindows() && l:pathSpec[0] ==# g:NERDTreePath.Slash()
|
if nerdtree#runningWindows() && l:pathSpec[0] == nerdtree#slash()
|
||||||
let l:pathSpec = self.path.drive . l:pathSpec
|
let l:pathSpec = self.path.drive . l:pathSpec
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
@@ -382,11 +377,17 @@ endfunction
|
|||||||
" 1. If cascaded, we don't know which dir is bookmarked or is a symlink.
|
" 1. If cascaded, we don't know which dir is bookmarked or is a symlink.
|
||||||
" 2. If the parent is a symlink or is bookmarked, you end up with unparsable
|
" 2. If the parent is a symlink or is bookmarked, you end up with unparsable
|
||||||
" text, and NERDTree cannot get the path of any child node.
|
" text, and NERDTree cannot get the path of any child node.
|
||||||
|
" Also, return false if this directory is the tree root, which should never be
|
||||||
|
" part of a cascade.
|
||||||
function! s:TreeDirNode.isCascadable()
|
function! s:TreeDirNode.isCascadable()
|
||||||
if g:NERDTreeCascadeSingleChildDir ==# 0
|
if g:NERDTreeCascadeSingleChildDir ==# 0
|
||||||
return 0
|
return 0
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if self.isRoot()
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
|
||||||
if self.path.isSymLink
|
if self.path.isSymLink
|
||||||
return 0
|
return 0
|
||||||
endif
|
endif
|
||||||
@@ -430,6 +431,7 @@ function! s:TreeDirNode._initChildren(silent)
|
|||||||
endtry
|
endtry
|
||||||
endfor
|
endfor
|
||||||
|
|
||||||
|
let g:NERDTreeOldSortOrder = g:NERDTreeSortOrder
|
||||||
call self.sortChildren()
|
call self.sortChildren()
|
||||||
|
|
||||||
call nerdtree#echo('')
|
call nerdtree#echo('')
|
||||||
|
|||||||
@@ -321,13 +321,9 @@ function! s:TreeFileNode._renderToString(depth, drawText)
|
|||||||
if a:drawText ==# 1
|
if a:drawText ==# 1
|
||||||
|
|
||||||
let treeParts = repeat(' ', a:depth - 1)
|
let treeParts = repeat(' ', a:depth - 1)
|
||||||
|
let treeParts .= (self.path.isDirectory || g:NERDTreeDirArrowExpandable ==# '' ? '' : ' ')
|
||||||
if !self.path.isDirectory
|
|
||||||
let treeParts = treeParts . ' '
|
|
||||||
endif
|
|
||||||
|
|
||||||
let line = treeParts . self.displayString()
|
let line = treeParts . self.displayString()
|
||||||
|
|
||||||
let output = output . line . "\n"
|
let output = output . line . "\n"
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|||||||
@@ -67,6 +67,10 @@ function! s:UI._dumpHelp()
|
|||||||
let help .= '" '. g:NERDTreeMapPreview .": find dir in tree\n"
|
let help .= '" '. g:NERDTreeMapPreview .": find dir in tree\n"
|
||||||
let help .= '" '. g:NERDTreeMapOpenInTab.": open in new tab\n"
|
let help .= '" '. g:NERDTreeMapOpenInTab.": open in new tab\n"
|
||||||
let help .= '" '. g:NERDTreeMapOpenInTabSilent .": open in new tab silently\n"
|
let help .= '" '. g:NERDTreeMapOpenInTabSilent .": open in new tab silently\n"
|
||||||
|
let help .= '" '. g:NERDTreeMapOpenSplit .": open split\n"
|
||||||
|
let help .= '" '. g:NERDTreeMapPreviewSplit .": preview split\n"
|
||||||
|
let help .= '" '. g:NERDTreeMapOpenVSplit .": open vsplit\n"
|
||||||
|
let help .= '" '. g:NERDTreeMapPreviewVSplit .": preview vsplit\n"
|
||||||
let help .= '" '. g:NERDTreeMapCustomOpen .": custom open\n"
|
let help .= '" '. g:NERDTreeMapCustomOpen .": custom open\n"
|
||||||
let help .= '" '. g:NERDTreeMapDeleteBookmark .": delete bookmark\n"
|
let help .= '" '. g:NERDTreeMapDeleteBookmark .": delete bookmark\n"
|
||||||
|
|
||||||
@@ -284,7 +288,11 @@ endfunction
|
|||||||
function! s:UI._indentLevelFor(line)
|
function! s:UI._indentLevelFor(line)
|
||||||
" Replace multi-character DirArrows with a single space so the
|
" Replace multi-character DirArrows with a single space so the
|
||||||
" indentation calculation doesn't get messed up.
|
" indentation calculation doesn't get messed up.
|
||||||
let l:line = substitute(substitute(a:line, '\V'.g:NERDTreeDirArrowExpandable, ' ', ''), '\V'.g:NERDTreeDirArrowCollapsible, ' ', '')
|
if g:NERDTreeDirArrowExpandable ==# ''
|
||||||
|
let l:line = ' '.a:line
|
||||||
|
else
|
||||||
|
let l:line = substitute(substitute(a:line, '\V'.g:NERDTreeDirArrowExpandable, ' ', ''), '\V'.g:NERDTreeDirArrowCollapsible, ' ', '')
|
||||||
|
endif
|
||||||
let leadChars = match(l:line, '\M\[^ ]')
|
let leadChars = match(l:line, '\M\[^ ]')
|
||||||
return leadChars / s:UI.IndentWid()
|
return leadChars / s:UI.IndentWid()
|
||||||
endfunction
|
endfunction
|
||||||
@@ -360,7 +368,7 @@ function! s:UI.saveScreenState()
|
|||||||
call g:NERDTree.CursorToTreeWin()
|
call g:NERDTree.CursorToTreeWin()
|
||||||
let self._screenState['oldPos'] = getpos('.')
|
let self._screenState['oldPos'] = getpos('.')
|
||||||
let self._screenState['oldTopLine'] = line('w0')
|
let self._screenState['oldTopLine'] = line('w0')
|
||||||
let self._screenState['oldWindowSize']= winwidth('')
|
let self._screenState['oldWindowSize'] = winnr('$')==1 ? g:NERDTreeWinSize : winwidth('')
|
||||||
call nerdtree#exec(win . 'wincmd w', 1)
|
call nerdtree#exec(win . 'wincmd w', 1)
|
||||||
catch
|
catch
|
||||||
endtry
|
endtry
|
||||||
|
|||||||
@@ -34,6 +34,10 @@ if executable('xdg-open')
|
|||||||
call NERDTreeAddMenuItem({'text': '(o)pen the current node with system editor', 'shortcut': 'o', 'callback': 'NERDTreeExecuteFileLinux'})
|
call NERDTreeAddMenuItem({'text': '(o)pen the current node with system editor', 'shortcut': 'o', 'callback': 'NERDTreeExecuteFileLinux'})
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if nerdtree#runningWindows()
|
||||||
|
call NERDTreeAddMenuItem({'text': '(o)pen the current node with system editor', 'shortcut': 'o', 'callback': 'NERDTreeExecuteFileWindows'})
|
||||||
|
endif
|
||||||
|
|
||||||
if g:NERDTreePath.CopyingSupported()
|
if g:NERDTreePath.CopyingSupported()
|
||||||
call NERDTreeAddMenuItem({'text': '(c)opy the current node', 'shortcut': 'c', 'callback': 'NERDTreeCopyNode'})
|
call NERDTreeAddMenuItem({'text': '(c)opy the current node', 'shortcut': 'c', 'callback': 'NERDTreeCopyNode'})
|
||||||
endif
|
endif
|
||||||
@@ -141,12 +145,12 @@ function! s:renameBuffer(bufNum, newNodeName, isDirectory)
|
|||||||
let editStr = g:NERDTreePath.New(a:newNodeName).str({'format': 'Edit'})
|
let editStr = g:NERDTreePath.New(a:newNodeName).str({'format': 'Edit'})
|
||||||
endif
|
endif
|
||||||
" 1. ensure that a new buffer is loaded
|
" 1. ensure that a new buffer is loaded
|
||||||
call nerdtree#exec('badd ' . quotedFileName, 1)
|
call nerdtree#exec('badd ' . quotedFileName, 0)
|
||||||
" 2. ensure that all windows which display the just deleted filename
|
" 2. ensure that all windows which display the just deleted filename
|
||||||
" display a buffer for a new filename.
|
" display a buffer for a new filename.
|
||||||
let s:originalTabNumber = tabpagenr()
|
let s:originalTabNumber = tabpagenr()
|
||||||
let s:originalWindowNumber = winnr()
|
let s:originalWindowNumber = winnr()
|
||||||
call nerdtree#exec('tabdo windo if winbufnr(0) ==# ' . a:bufNum . " | exec ':e! " . editStr . "' | endif", 1)
|
call nerdtree#exec('tabdo windo if winbufnr(0) ==# ' . a:bufNum . " | exec ':e! " . editStr . "' | endif", 0)
|
||||||
call nerdtree#exec('tabnext ' . s:originalTabNumber, 1)
|
call nerdtree#exec('tabnext ' . s:originalTabNumber, 1)
|
||||||
call nerdtree#exec(s:originalWindowNumber . 'wincmd w', 1)
|
call nerdtree#exec(s:originalWindowNumber . 'wincmd w', 1)
|
||||||
" 3. We don't need a previous buffer anymore
|
" 3. We don't need a previous buffer anymore
|
||||||
@@ -161,7 +165,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() . g:NERDTreePath.Slash(), 'file')
|
let newNodeName = input(prompt, curDirNode.path.str() . nerdtree#slash(), 'file')
|
||||||
|
|
||||||
if newNodeName ==# ''
|
if newNodeName ==# ''
|
||||||
call nerdtree#echo('Node Creation Aborted.')
|
call nerdtree#echo('Node Creation Aborted.')
|
||||||
@@ -196,6 +200,11 @@ function! NERDTreeMoveNode()
|
|||||||
let curNode = g:NERDTreeFileNode.GetSelected()
|
let curNode = g:NERDTreeFileNode.GetSelected()
|
||||||
let prompt = s:inputPrompt('move')
|
let prompt = s:inputPrompt('move')
|
||||||
let newNodePath = input(prompt, curNode.path.str(), 'file')
|
let newNodePath = input(prompt, curNode.path.str(), 'file')
|
||||||
|
while filereadable(newNodePath)
|
||||||
|
call nerdtree#echoWarning('This destination already exists. Try again.')
|
||||||
|
let newNodePath = input(prompt, curNode.path.str(), 'file')
|
||||||
|
endwhile
|
||||||
|
|
||||||
|
|
||||||
if newNodePath ==# ''
|
if newNodePath ==# ''
|
||||||
call nerdtree#echo('Node Renaming Aborted.')
|
call nerdtree#echo('Node Renaming Aborted.')
|
||||||
@@ -204,7 +213,8 @@ function! NERDTreeMoveNode()
|
|||||||
|
|
||||||
try
|
try
|
||||||
if curNode.path.isDirectory
|
if curNode.path.isDirectory
|
||||||
let l:openBuffers = filter(range(1,bufnr('$')),'bufexists(v:val) && fnamemodify(bufname(v:val),":p") =~# curNode.path.str() . "/.*"')
|
let l:curPath = escape(curNode.path.str(),'\') . (nerdtree#runningWindows()?'\\':'/') . '.*'
|
||||||
|
let l:openBuffers = filter(range(1,bufnr('$')),'bufexists(v:val) && fnamemodify(bufname(v:val),":p") =~# "'.escape(l:curPath,'\').'"')
|
||||||
else
|
else
|
||||||
let l:openBuffers = filter(range(1,bufnr('$')),'bufexists(v:val) && fnamemodify(bufname(v:val),":p") ==# curNode.path.str()')
|
let l:openBuffers = filter(range(1,bufnr('$')),'bufexists(v:val) && fnamemodify(bufname(v:val),":p") ==# curNode.path.str()')
|
||||||
endif
|
endif
|
||||||
@@ -242,8 +252,6 @@ endfunction
|
|||||||
|
|
||||||
" FUNCTION: NERDTreeDeleteNode() {{{1
|
" FUNCTION: NERDTreeDeleteNode() {{{1
|
||||||
function! NERDTreeDeleteNode()
|
function! NERDTreeDeleteNode()
|
||||||
let l:shellslash = &shellslash
|
|
||||||
let &shellslash = 0
|
|
||||||
let currentNode = g:NERDTreeFileNode.GetSelected()
|
let currentNode = g:NERDTreeFileNode.GetSelected()
|
||||||
let confirmed = 0
|
let confirmed = 0
|
||||||
|
|
||||||
@@ -279,7 +287,6 @@ function! NERDTreeDeleteNode()
|
|||||||
else
|
else
|
||||||
call nerdtree#echo('delete aborted')
|
call nerdtree#echo('delete aborted')
|
||||||
endif
|
endif
|
||||||
let &shellslash = l:shellslash
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" FUNCTION: NERDTreeListNode() {{{1
|
" FUNCTION: NERDTreeListNode() {{{1
|
||||||
@@ -324,8 +331,6 @@ endfunction
|
|||||||
|
|
||||||
" FUNCTION: NERDTreeCopyNode() {{{1
|
" FUNCTION: NERDTreeCopyNode() {{{1
|
||||||
function! NERDTreeCopyNode()
|
function! NERDTreeCopyNode()
|
||||||
let l:shellslash = &shellslash
|
|
||||||
let &shellslash = 0
|
|
||||||
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 = input(prompt, currentNode.path.str(), 'file')
|
||||||
@@ -361,7 +366,6 @@ function! NERDTreeCopyNode()
|
|||||||
else
|
else
|
||||||
call nerdtree#echo('Copy aborted.')
|
call nerdtree#echo('Copy aborted.')
|
||||||
endif
|
endif
|
||||||
let &shellslash = l:shellslash
|
|
||||||
redraw!
|
redraw!
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
@@ -382,44 +386,78 @@ endfunction
|
|||||||
|
|
||||||
" FUNCTION: NERDTreeQuickLook() {{{1
|
" FUNCTION: NERDTreeQuickLook() {{{1
|
||||||
function! NERDTreeQuickLook()
|
function! NERDTreeQuickLook()
|
||||||
let treenode = g:NERDTreeFileNode.GetSelected()
|
let l:node = g:NERDTreeFileNode.GetSelected()
|
||||||
if treenode !=# {}
|
|
||||||
call system("qlmanage -p 2>/dev/null '" . treenode.path.str() . "'")
|
if empty(l:node)
|
||||||
|
return
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
call system('qlmanage -p 2>/dev/null ' . shellescape(l:node.path.str()))
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" FUNCTION: NERDTreeRevealInFinder() {{{1
|
" FUNCTION: NERDTreeRevealInFinder() {{{1
|
||||||
function! NERDTreeRevealInFinder()
|
function! NERDTreeRevealInFinder()
|
||||||
let treenode = g:NERDTreeFileNode.GetSelected()
|
let l:node = g:NERDTreeFileNode.GetSelected()
|
||||||
if treenode !=# {}
|
|
||||||
call system("open -R '" . treenode.path.str() . "'")
|
if empty(l:node)
|
||||||
|
return
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
call system('open -R ' . shellescape(l:node.path.str()))
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" FUNCTION: NERDTreeExecuteFile() {{{1
|
" FUNCTION: NERDTreeExecuteFile() {{{1
|
||||||
function! NERDTreeExecuteFile()
|
function! NERDTreeExecuteFile()
|
||||||
let treenode = g:NERDTreeFileNode.GetSelected()
|
let l:node = g:NERDTreeFileNode.GetSelected()
|
||||||
if treenode !=# {}
|
|
||||||
call system("open '" . treenode.path.str() . "'")
|
if empty(l:node)
|
||||||
|
return
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
call system('open ' . shellescape(l:node.path.str()))
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" FUNCTION: NERDTreeRevealFileLinux() {{{1
|
" FUNCTION: NERDTreeRevealFileLinux() {{{1
|
||||||
function! NERDTreeRevealFileLinux()
|
function! NERDTreeRevealFileLinux()
|
||||||
let treenode = g:NERDTreeFileNode.GetSelected()
|
let l:node = g:NERDTreeFileNode.GetSelected()
|
||||||
let parentnode = treenode.parent
|
|
||||||
if parentnode !=# {}
|
if empty(l:node)
|
||||||
call system("xdg-open '" . parentnode.path.str() . "' &")
|
return
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
" Handle the edge case of "/", which has no parent.
|
||||||
|
if l:node.path.str() ==# '/'
|
||||||
|
call system('xdg-open /')
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
if empty(l:node.parent)
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
call system('xdg-open ' . shellescape(l:node.parent.path.str()))
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" FUNCTION: NERDTreeExecuteFileLinux() {{{1
|
" FUNCTION: NERDTreeExecuteFileLinux() {{{1
|
||||||
function! NERDTreeExecuteFileLinux()
|
function! NERDTreeExecuteFileLinux()
|
||||||
let treenode = g:NERDTreeFileNode.GetSelected()
|
let l:node = g:NERDTreeFileNode.GetSelected()
|
||||||
if treenode !=# {}
|
|
||||||
call system("xdg-open '" . treenode.path.str() . "' &")
|
if empty(l:node)
|
||||||
|
return
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
call system('xdg-open ' . shellescape(l:node.path.str()))
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" FUNCTION: NERDTreeExecuteFileWindows() {{{1
|
||||||
|
function! NERDTreeExecuteFileWindows()
|
||||||
|
let l:node = g:NERDTreeFileNode.GetSelected()
|
||||||
|
|
||||||
|
if empty(l:node)
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
call system('cmd.exe /c start "" ' . shellescape(l:node.path.str()))
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" vim: set sw=4 sts=4 et fdm=marker:
|
" vim: set sw=4 sts=4 et fdm=marker:
|
||||||
|
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ endfunction
|
|||||||
function! s:FindParentVCSRoot(path)
|
function! s:FindParentVCSRoot(path)
|
||||||
let l:path = a:path
|
let l:path = a:path
|
||||||
while !empty(l:path) &&
|
while !empty(l:path) &&
|
||||||
\ l:path._str() !~# '^\(\a:\\\|\/\)$' &&
|
\ l:path._str() !~# '^\(\a:[\\\/]\|\/\)$' &&
|
||||||
\ !isdirectory(l:path._str() . '/.git') &&
|
\ !isdirectory(l:path._str() . '/.git') &&
|
||||||
\ !isdirectory(l:path._str() . '/.svn') &&
|
\ !isdirectory(l:path._str() . '/.svn') &&
|
||||||
\ !isdirectory(l:path._str() . '/.hg') &&
|
\ !isdirectory(l:path._str() . '/.hg') &&
|
||||||
@@ -42,6 +42,6 @@ function! s:FindParentVCSRoot(path)
|
|||||||
\ !isdirectory(l:path._str() . '/_darcs')
|
\ !isdirectory(l:path._str() . '/_darcs')
|
||||||
let l:path = l:path.getParent()
|
let l:path = l:path.getParent()
|
||||||
endwhile
|
endwhile
|
||||||
return (empty(l:path) || l:path._str() =~# '^\(\a:\\\|\/\)$') ? a:path : l:path
|
return (empty(l:path) || l:path._str() =~# '^\(\a:[\\\/]\|\/\)$') ? a:path : l:path
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
|||||||
@@ -217,7 +217,7 @@ endfunction
|
|||||||
|
|
||||||
function! NERDTreeFocus()
|
function! NERDTreeFocus()
|
||||||
if g:NERDTree.IsOpen()
|
if g:NERDTree.IsOpen()
|
||||||
call g:NERDTree.CursorToTreeWin()
|
call g:NERDTree.CursorToTreeWin(0)
|
||||||
else
|
else
|
||||||
call g:NERDTreeCreator.ToggleTabTree('')
|
call g:NERDTreeCreator.ToggleTabTree('')
|
||||||
endif
|
endif
|
||||||
|
|||||||
@@ -19,32 +19,36 @@ syn match NERDTreeLinkTarget #->.*# containedin=NERDTreeDir,NERDTreeFile
|
|||||||
syn match NERDTreeLinkFile #.* ->#me=e-3 containedin=NERDTreeFile
|
syn match NERDTreeLinkFile #.* ->#me=e-3 containedin=NERDTreeFile
|
||||||
syn match NERDTreeLinkDir #.*/ ->#me=e-3 containedin=NERDTreeDir
|
syn match NERDTreeLinkDir #.*/ ->#me=e-3 containedin=NERDTreeDir
|
||||||
|
|
||||||
"highlighing for directory nodes and file nodes
|
"highlighting to conceal the delimiter around the file/dir name
|
||||||
syn match NERDTreeDirSlash #/# containedin=NERDTreeDir
|
|
||||||
|
|
||||||
exec 'syn match NERDTreeClosable #' . escape(g:NERDTreeDirArrowCollapsible, '~') . '\ze .*/# containedin=NERDTreeDir,NERDTreeFile'
|
|
||||||
exec 'syn match NERDTreeOpenable #' . escape(g:NERDTreeDirArrowExpandable, '~') . '\ze .*/# containedin=NERDTreeDir,NERDTreeFile'
|
|
||||||
|
|
||||||
let s:dirArrows = escape(g:NERDTreeDirArrowCollapsible, '~]\-').escape(g:NERDTreeDirArrowExpandable, '~]\-')
|
|
||||||
exec 'syn match NERDTreeDir #[^'.s:dirArrows.' ].*/#'
|
|
||||||
syn match NERDTreeExecFile '^ .*\*\($\| \)' contains=NERDTreeRO,NERDTreeBookmark
|
|
||||||
exec 'syn match NERDTreeFile #^[^"\.'.s:dirArrows.'] *[^'.s:dirArrows.']*# contains=NERDTreeLink,NERDTreeRO,NERDTreeBookmark,NERDTreeExecFile'
|
|
||||||
|
|
||||||
"highlighting for readonly files
|
|
||||||
exec 'syn match NERDTreeRO # *\zs.*\ze \['.g:NERDTreeGlyphReadOnly.'\]# contains=NERDTreeIgnore,NERDTreeBookmark,NERDTreeFile'
|
|
||||||
|
|
||||||
syn match NERDTreeFlags #^ *\zs\[[^\]]*\]# containedin=NERDTreeFile,NERDTreeExecFile
|
|
||||||
syn match NERDTreeFlags #\[[^\]]*\]# containedin=NERDTreeDir
|
|
||||||
|
|
||||||
"highlighing to conceal the delimiter around the file/dir name
|
|
||||||
if has('conceal')
|
if has('conceal')
|
||||||
exec 'syn match NERDTreeNodeDelimiters #\%d' . char2nr(g:NERDTreeNodeDelimiter) . '# conceal containedin=ALL'
|
exec 'syn match NERDTreeNodeDelimiters #\%d' . char2nr(g:NERDTreeNodeDelimiter) . '# conceal containedin=ALL'
|
||||||
setlocal conceallevel=3 concealcursor=nvic
|
setlocal conceallevel=2 concealcursor=nvic
|
||||||
else
|
else
|
||||||
exec 'syn match NERDTreeNodeDelimiters #\%d' . char2nr(g:NERDTreeNodeDelimiter) . '# containedin=ALL'
|
exec 'syn match NERDTreeNodeDelimiters #\%d' . char2nr(g:NERDTreeNodeDelimiter) . '# containedin=ALL'
|
||||||
hi! link NERDTreeNodeDelimiters Ignore
|
hi! link NERDTreeNodeDelimiters Ignore
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
"highlighing for directory nodes and file nodes
|
||||||
|
syn match NERDTreeDirSlash #/# containedin=NERDTreeDir
|
||||||
|
|
||||||
|
if g:NERDTreeDirArrowExpandable !=# ''
|
||||||
|
exec 'syn match NERDTreeClosable #' . escape(g:NERDTreeDirArrowCollapsible, '~') . '\ze .*/# containedin=NERDTreeDir,NERDTreeFile'
|
||||||
|
exec 'syn match NERDTreeOpenable #' . escape(g:NERDTreeDirArrowExpandable, '~') . '\ze .*/# containedin=NERDTreeDir,NERDTreeFile'
|
||||||
|
let s:dirArrows = escape(g:NERDTreeDirArrowCollapsible, '~]\-').escape(g:NERDTreeDirArrowExpandable, '~]\-')
|
||||||
|
exec 'syn match NERDTreeDir #[^'.s:dirArrows.' ].*/#'
|
||||||
|
exec 'syn match NERDTreeExecFile #^.*'.g:NERDTreeNodeDelimiter.'\*\($\| \)# contains=NERDTreeRO,NERDTreeBookmark'
|
||||||
|
exec 'syn match NERDTreeFile #^[^"\.'.s:dirArrows.'] *[^'.s:dirArrows.']*# contains=NERDTreeLink,NERDTreeRO,NERDTreeBookmark,NERDTreeExecFile'
|
||||||
|
else
|
||||||
|
exec 'syn match NERDTreeDir #[^'.g:NERDTreeNodeDelimiter.']\{-}/\ze\($\|'.g:NERDTreeNodeDelimiter.'\)#'
|
||||||
|
exec 'syn match NERDTreeExecFile #[^'.g:NERDTreeNodeDelimiter.']\{-}'.g:NERDTreeNodeDelimiter.'\*\($\| \)# contains=NERDTreeRO,NERDTreeBookmark'
|
||||||
|
exec 'syn match NERDTreeFile #^.*'.g:NERDTreeNodeDelimiter.'.*[^\/]\($\|'.g:NERDTreeNodeDelimiter.'.*\)# contains=NERDTreeLink,NERDTreeRO,NERDTreeBookmark,NERDTreeExecFile'
|
||||||
|
endif
|
||||||
|
|
||||||
|
"highlighting for readonly files
|
||||||
|
exec 'syn match NERDTreeRO #.*'.g:NERDTreeNodeDelimiter.'\zs.*\ze'.g:NERDTreeNodeDelimiter.'.*\['.g:NERDTreeGlyphReadOnly.'\]# contains=NERDTreeIgnore,NERDTreeBookmark,NERDTreeFile'
|
||||||
|
|
||||||
|
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
|
||||||
@@ -89,3 +93,5 @@ hi def link NERDTreeBookmark Statement
|
|||||||
hi def link NERDTreeFlags Number
|
hi def link NERDTreeFlags Number
|
||||||
|
|
||||||
hi def link NERDTreeCurrentNode Search
|
hi def link NERDTreeCurrentNode Search
|
||||||
|
|
||||||
|
hi NERDTreeFile ctermbg=NONE guibg=NONE
|
||||||
|
|||||||
Reference in New Issue
Block a user