mirror of
https://github.com/preservim/nerdtree.git
synced 2025-11-09 03:43:50 -05:00
Compare commits
13 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9ec27d45a8 | ||
|
|
50a394b2bf | ||
|
|
0cb04e9245 | ||
|
|
4c588f1820 | ||
|
|
ff002d2132 | ||
|
|
79f6f912f4 | ||
|
|
edc9460859 | ||
|
|
334542c361 | ||
|
|
9184ec05bd | ||
|
|
ea4833da8a | ||
|
|
c99395a323 | ||
|
|
d69b68bf31 | ||
|
|
3a66272486 |
15
.github/PULL_REQUEST_TEMPLATE.md
vendored
15
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -5,18 +5,3 @@ Closes # <!-- Enter the issue number this PR addresses. If none, remove this
|
||||
---
|
||||
### New Version Info
|
||||
|
||||
#### Author's Instructions
|
||||
- [ ] Derive a new `MAJOR.MINOR.PATCH` version number. Increment the:
|
||||
- `MAJOR` version when you make incompatible API changes
|
||||
- `MINOR` version when you add functionality in a backwards-compatible manner
|
||||
- `PATCH` version when you make backwards-compatible bug fixes
|
||||
- [ ] Update [CHANGELOG.md](https://github.com/scrooloose/nerdtree/blob/master/CHANGELOG.md), following the established pattern.
|
||||
#### Collaborator's Instructions
|
||||
- [ ] Review [CHANGELOG.md](https://github.com/scrooloose/nerdtree/blob/master/CHANGELOG.md), suggesting a different version number if necessary.
|
||||
- [ ] 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
|
||||
```
|
||||
|
||||
11
CHANGELOG.md
11
CHANGELOG.md
@@ -13,6 +13,17 @@
|
||||
- Pull Request Title n (PR Author) [PR Number](Link to PR)
|
||||
-->
|
||||
#### 7.0
|
||||
- **.1**:
|
||||
- Fix NERDTreeFind to handle directory case sensitivity. (dangibson) [#1387](https://github.com/preservim/nerdtree/pull/1387)
|
||||
- New Show file lines toggle. (hsnks100) [#1384](https://github.com/preservim/nerdtree/pull/1384)
|
||||
- Add case sensitivity for refreshing nodes. (rzvxa) [#1382](https://github.com/preservim/nerdtree/pull/1382)
|
||||
- Clarified the NERDTreeChangePermissions prompt. (rzvxa) [#1381](https://github.com/preservim/nerdtree/pull/1381)
|
||||
- New reveal functionality for Windows. (rzvxa) [#1366](https://github.com/preservim/nerdtree/pull/1366)
|
||||
- Fix bracket escaping in path names. (kai-patel) [#1359](https://github.com/preservim/nerdtree/pull/1359)
|
||||
- Fix Case Sensitive Move Operation. (rzvxa) [#1375](https://github.com/preservim/nerdtree/pull/1375)
|
||||
- New menu command for changing selected node permissions. (mjkloeckner) [#1348](https://github.com/preservim/nerdtree/pull/1348)
|
||||
- Fix documentation errors. (BubuDavid) [#1372](https://github.com/preservim/nerdtree/pull/1372)
|
||||
- Fix typo in nerdtree.vim file. (SandeshPyakurel) [#1380](https://github.com/preservim/nerdtree/pull/1380)
|
||||
- **.0**:
|
||||
- Now we warn about invalid files instead of ignoring them silently. (rmonico) [#1365](https://github.com/preservim/nerdtree/pull/1365)
|
||||
- New g:NERDTreeWinPos options for top and bottom. (rzvxa) [#1363](https://github.com/preservim/nerdtree/pull/1363)
|
||||
|
||||
@@ -1,9 +1,3 @@
|
||||

|
||||
|
||||
**NERDTree** is on the lookout for a new maintainer. See [issue #1280](https://github.com/preservim/nerdtree/issues/1280) to submit your name for consideration.
|
||||
|
||||
---
|
||||
|
||||
# The NERDTree [](https://github.com/preservim/nerdtree/actions?workflow=Vint)
|
||||
|
||||
## Introduction
|
||||
@@ -170,7 +164,7 @@ autocmd BufEnter * if winnr('$') == 1 && exists('b:NERDTree') && b:NERDTree.isTa
|
||||
|
||||
```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 |
|
||||
autocmd BufEnter * if winnr() == winnr('h') && bufname('#') =~ 'NERD_tree_\d\+' && bufname('%') !~ 'NERD_tree_\d\+' && winnr('$') > 1 |
|
||||
\ let buf=bufnr() | buffer# | execute "normal! \<C-W>w" | execute 'buffer'.buf | endif
|
||||
```
|
||||
|
||||
@@ -194,6 +188,28 @@ 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.
|
||||
|
||||
### How can I show lines of files?
|
||||
|
||||
```vim
|
||||
let g:NERDTreeFileLines = 1
|
||||
```
|
||||
|
||||
Lines in the file are displayed as shown below.
|
||||
```
|
||||
</pack/packer/start/nerdtree/
|
||||
▸ autoload/
|
||||
▸ doc/
|
||||
▸ lib/
|
||||
▸ nerdtree_plugin/
|
||||
▸ plugin/
|
||||
▸ syntax/
|
||||
_config.yml (1)
|
||||
CHANGELOG.md (307)
|
||||
LICENCE (13)
|
||||
README.markdown (234)
|
||||
screenshot.png (219)
|
||||
```
|
||||
|
||||
### 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.
|
||||
|
||||
@@ -198,16 +198,42 @@ function! nerdtree#postSourceActions() abort
|
||||
runtime! nerdtree_plugin/**/*.vim
|
||||
endfunction
|
||||
|
||||
"FUNCTION: nerdtree#runningWindows(dir) {{{2
|
||||
"FUNCTION: nerdtree#runningWindows() {{{2
|
||||
function! nerdtree#runningWindows() abort
|
||||
return has('win16') || has('win32') || has('win64')
|
||||
endfunction
|
||||
|
||||
"FUNCTION: nerdtree#runningCygwin(dir) {{{2
|
||||
"FUNCTION: nerdtree#runningCygwin() {{{2
|
||||
function! nerdtree#runningCygwin() abort
|
||||
return has('win32unix')
|
||||
endfunction
|
||||
|
||||
"FUNCTION: nerdtree#runningMac() {{{2
|
||||
function! nerdtree#runningMac() abort
|
||||
return has('gui_mac') || has('gui_macvim') || has('mac') || has('osx')
|
||||
endfunction
|
||||
|
||||
" FUNCTION: nerdtree#osDefaultCaseSensitiveFS() {{{2
|
||||
function! nerdtree#osDefaultCaseSensitiveFS() abort
|
||||
return s:osDefaultCaseSensitiveFS
|
||||
endfunction
|
||||
|
||||
" FUNCTION: nerdtree#caseSensitiveFS() {{{2
|
||||
function! nerdtree#caseSensitiveFS() abort
|
||||
return g:NERDTreeCaseSensitiveFS == 1 ||
|
||||
\((g:NERDTreeCaseSensitiveFS == 2 || g:NERDTreeCaseSensitiveFS == 3) &&
|
||||
\nerdtree#osDefaultCaseSensitiveFS())
|
||||
endfunction
|
||||
|
||||
"FUNCTION: nerdtree#pathEquals(lhs, rhs) {{{2
|
||||
function! nerdtree#pathEquals(lhs, rhs) abort
|
||||
if nerdtree#caseSensitiveFS()
|
||||
return a:lhs ==# a:rhs
|
||||
else
|
||||
return a:lhs ==? a:rhs
|
||||
endif
|
||||
endfunction
|
||||
|
||||
" SECTION: View Functions {{{1
|
||||
"============================================================
|
||||
|
||||
@@ -246,4 +272,12 @@ function! nerdtree#renderView() abort
|
||||
call b:NERDTree.render()
|
||||
endfunction
|
||||
|
||||
if nerdtree#runningWindows()
|
||||
let s:osDefaultCaseSensitiveFS = 0
|
||||
elseif nerdtree#runningMac()
|
||||
let s:osDefaultCaseSensitiveFS = 0
|
||||
else
|
||||
let s:osDefaultCaseSensitiveFS = 1
|
||||
endif
|
||||
|
||||
" vim: set sw=4 sts=4 et fdm=marker:
|
||||
|
||||
@@ -57,6 +57,7 @@ function! nerdtree#ui_glue#createDefaultBindings() abort
|
||||
call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapToggleFilters, 'scope': 'all', 'callback': s.'toggleIgnoreFilter' })
|
||||
call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapToggleFiles, 'scope': 'all', 'callback': s.'toggleShowFiles' })
|
||||
call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapToggleBookmarks, 'scope': 'all', 'callback': s.'toggleShowBookmarks' })
|
||||
call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapToggleFileLines, 'scope': 'all', 'callback': s.'toggleShowFileLines' })
|
||||
|
||||
call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapCloseDir, 'scope': 'Node', 'callback': s.'closeCurrentDir' })
|
||||
call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapCloseChildren, 'scope': 'DirNode', 'callback': s.'closeChildren' })
|
||||
@@ -685,6 +686,12 @@ function! s:toggleShowHidden() abort
|
||||
call b:NERDTree.ui.toggleShowHidden()
|
||||
endfunction
|
||||
|
||||
" FUNCTION: s:toggleShowFileLines() {{{1
|
||||
" toggles the display of hidden files
|
||||
function! s:toggleShowFileLines() abort
|
||||
call b:NERDTree.ui.toggleShowFileLines()
|
||||
endfunction
|
||||
|
||||
" FUNCTION: s:toggleZoom() {{{1
|
||||
function! s:toggleZoom() abort
|
||||
call b:NERDTree.ui.toggleZoom()
|
||||
|
||||
@@ -287,6 +287,7 @@ I........Toggle whether hidden files displayed......................|NERDTree-I|
|
||||
f........Toggle whether the file filters are used...................|NERDTree-f|
|
||||
F........Toggle whether files are displayed.........................|NERDTree-F|
|
||||
B........Toggle whether the bookmark table is displayed.............|NERDTree-B|
|
||||
L........Toggle whether the bookmark table is displayed.............|NERDTree-L|
|
||||
|
||||
q........Close the NERDTree window..................................|NERDTree-q|
|
||||
A........Zoom (maximize/minimize) the NERDTree window...............|NERDTree-A|
|
||||
@@ -601,6 +602,14 @@ Applies to: no restrictions.
|
||||
|
||||
Toggles whether the bookmarks table is displayed.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
*NERDTree-L*
|
||||
Default key: L
|
||||
Map setting: *NERDTreeMapToggleFileLiness*
|
||||
Applies to: no restrictions.
|
||||
|
||||
Toggles whether the number of lines in files is displayed.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
*NERDTree-q*
|
||||
Default key: q
|
||||
@@ -673,6 +682,9 @@ the NERDTree. These settings should be set in your vimrc, using `:let`.
|
||||
|
||||
|NERDTreeAutoCenterThreshold| Controls the sensitivity of autocentering.
|
||||
|
||||
|NERDTreeCaseSensitiveFS| Tells the NERDTree whether or not it is
|
||||
running in on a case sensitive file system.
|
||||
|
||||
|NERDTreeCaseSensitiveSort| Tells the NERDTree whether to be case
|
||||
sensitive or not when sorting nodes.
|
||||
|
||||
@@ -808,6 +820,26 @@ Default: 3
|
||||
This setting controls the "sensitivity" of the NERDTree auto centering. See
|
||||
|NERDTreeAutoCenter| for details.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
*NERDTreeCaseSensitiveFS*
|
||||
Values: 0, 1, 2 or 3.
|
||||
Default: 2.
|
||||
|
||||
If set to 0, the NERDTree will interact with the file system without case
|
||||
sensitivity.
|
||||
|
||||
If set to 1, the NERDTree will interact with the file system in a case-sensitive
|
||||
manner.
|
||||
|
||||
If set to 2, the NERDTree assumes its case sensitivity from the OS it is
|
||||
running on. It Will default to case-insensitive on Windows and macOS
|
||||
machines and case-sensitive on everything else. Since it's not a foolproof
|
||||
way of detection, NERDTree won't proceed with any write actions when
|
||||
the destination is ambiguous.
|
||||
|
||||
Setting it to 3 will perform just like 2, but without suppressing write
|
||||
actions.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
*NERDTreeCaseSensitiveSort*
|
||||
Values: 0 or 1.
|
||||
@@ -1040,6 +1072,20 @@ This setting can be toggled dynamically, per tree, with the |NERDTree-F|
|
||||
mapping and is useful for drastically shrinking the tree when you are
|
||||
navigating to a different part of the tree.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
*NERDTreeShowFilesLines*
|
||||
Values: 0 or 1.
|
||||
Default: 0.
|
||||
|
||||
If this setting is set to 1 then the NERDTree shows number of lines for each
|
||||
file.
|
||||
|
||||
This setting can be toggled dynamically, per tree, with the |NERDTree-L|
|
||||
mapping.
|
||||
Use one of the follow lines for this setting: >
|
||||
let NERDTreeShowFilesLines=0
|
||||
let NERDTreeShowFilesLines=1
|
||||
<
|
||||
------------------------------------------------------------------------------
|
||||
*NERDTreeShowHidden*
|
||||
Values: 0 or 1.
|
||||
|
||||
@@ -65,6 +65,25 @@ function! s:Path.cacheDisplayString() abort
|
||||
let self.cachedDisplayString = self.addDelimiter(self.cachedDisplayString) . ' -> ' . self.symLinkDest
|
||||
endif
|
||||
|
||||
if !self.isDirectory && b:NERDTree.ui.getShowFileLines() != 0
|
||||
let l:bufname = self.str({'format': 'Edit'})
|
||||
let l:lines = 0
|
||||
if executable('wc')
|
||||
let l:lines = split(system('wc -l "'.l:bufname.'"'))[0]
|
||||
elseif nerdtree#runningWindows()
|
||||
let l:lines = substitute(system('type "'.l:bufname.'" | find /c /v ""'), '\n', '', 'g')
|
||||
else
|
||||
let s:lines = readfile(l:bufname)
|
||||
let l:lines = 0
|
||||
for s:line in s:lines
|
||||
let l:lines += 1
|
||||
if l:lines >= 20000
|
||||
break
|
||||
endif
|
||||
endfor
|
||||
endif
|
||||
let self.cachedDisplayString = self.addDelimiter(self.cachedDisplayString) . ' ('.l:lines.')'
|
||||
endif
|
||||
if self.isReadOnly
|
||||
let self.cachedDisplayString = self.addDelimiter(self.cachedDisplayString) . ' ['.g:NERDTreeGlyphReadOnly.']'
|
||||
endif
|
||||
@@ -530,7 +549,7 @@ function! s:Path.isUnder(parent)
|
||||
return 0
|
||||
endif
|
||||
for i in range(0, l:that_count-1)
|
||||
if self.pathSegments[i] !=# a:parent.pathSegments[i]
|
||||
if !nerdtree#pathEquals(self.pathSegments[i], a:parent.pathSegments[i])
|
||||
return 0
|
||||
endif
|
||||
endfor
|
||||
@@ -554,11 +573,7 @@ endfunction
|
||||
" Args:
|
||||
" path: the other path obj to compare this with
|
||||
function! s:Path.equals(path)
|
||||
if nerdtree#runningWindows()
|
||||
return self.str() ==? a:path.str()
|
||||
else
|
||||
return self.str() ==# a:path.str()
|
||||
endif
|
||||
return nerdtree#pathEquals(self.str(), a:path.str())
|
||||
endfunction
|
||||
|
||||
" FUNCTION: Path.New(pathStr) {{{1
|
||||
|
||||
@@ -121,8 +121,14 @@ function! s:TreeDirNode.findNode(path)
|
||||
if a:path.equals(self.path)
|
||||
return self
|
||||
endif
|
||||
if stridx(a:path.str(), self.path.str(), 0) ==# -1
|
||||
return {}
|
||||
if nerdtree#caseSensitiveFS()
|
||||
if stridx(a:path.str(), self.path.str(), 0) ==# -1
|
||||
return {}
|
||||
endif
|
||||
else
|
||||
if stridx(tolower(a:path.str()), tolower(self.path.str()), 0) ==# -1
|
||||
return {}
|
||||
endif
|
||||
endif
|
||||
|
||||
if self.path.isDirectory
|
||||
@@ -278,6 +284,10 @@ function! s:TreeDirNode._glob(pattern, all)
|
||||
else
|
||||
let l:pathSpec = escape(fnamemodify(self.path.str({'format': 'Glob'}), ':.'), ',')
|
||||
|
||||
if nerdtree#runningWindows()
|
||||
let l:pathSpec = substitute(l:pathSpec, "\\[\\(.*\\]\\)", "[[]\\1", "g")
|
||||
endif
|
||||
|
||||
" On Windows, the drive letter may be removed by "fnamemodify()".
|
||||
if nerdtree#runningWindows() && l:pathSpec[0] == nerdtree#slash()
|
||||
let l:pathSpec = self.path.drive . l:pathSpec
|
||||
@@ -572,7 +582,7 @@ function! s:TreeDirNode.refresh()
|
||||
"create a new path and see if it exists in this nodes children
|
||||
let path = g:NERDTreePath.New(i)
|
||||
let newNode = self.getChild(path)
|
||||
if newNode !=# {}
|
||||
if newNode !=# {} && path.str() ==# newNode.path.str()
|
||||
call newNode.refresh()
|
||||
call add(newChildNodes, newNode)
|
||||
|
||||
|
||||
@@ -103,6 +103,7 @@ function! s:UI._dumpHelp()
|
||||
let help .= '" '. g:NERDTreeMapToggleFilters .': file filters (' . (self.isIgnoreFilterEnabled() ? 'on' : 'off') . ")\n"
|
||||
let help .= '" '. g:NERDTreeMapToggleFiles .': files (' . (self.getShowFiles() ? 'on' : 'off') . ")\n"
|
||||
let help .= '" '. g:NERDTreeMapToggleBookmarks .': bookmarks (' . (self.getShowBookmarks() ? 'on' : 'off') . ")\n"
|
||||
let help .= '" '. g:NERDTreeMapToggleFileLines .': files lines (' . (self.getShowFileLines() ? 'on' : 'off') . ")\n"
|
||||
|
||||
" add quickhelp entries for each custom key map
|
||||
let help .= "\"\n\" ----------------------------\n"
|
||||
@@ -147,6 +148,7 @@ function! s:UI.New(nerdtree)
|
||||
let newObj._showFiles = g:NERDTreeShowFiles
|
||||
let newObj._showHidden = g:NERDTreeShowHidden
|
||||
let newObj._showBookmarks = g:NERDTreeShowBookmarks
|
||||
let newObj._showFileLines = g:NERDTreeFileLines
|
||||
|
||||
return newObj
|
||||
endfunction
|
||||
@@ -284,6 +286,11 @@ function! s:UI.getShowHidden()
|
||||
return self._showHidden
|
||||
endfunction
|
||||
|
||||
" FUNCTION: s:UI.getShowFileLines() {{{1
|
||||
function! s:UI.getShowFileLines()
|
||||
return self._showFileLines
|
||||
endfunction
|
||||
|
||||
" FUNCTION: s:UI._indentLevelFor(line) {{{1
|
||||
function! s:UI._indentLevelFor(line)
|
||||
" Replace multi-character DirArrows with a single space so the
|
||||
@@ -512,6 +519,15 @@ function! s:UI.toggleShowHidden()
|
||||
call self.centerView()
|
||||
endfunction
|
||||
|
||||
" FUNCTION: s:UI.toggleShowFileLines() {{{1
|
||||
" toggles the display of file lines
|
||||
function! s:UI.toggleShowFileLines()
|
||||
let self._showFileLines = !self._showFileLines
|
||||
call self.nerdtree.root.refresh()
|
||||
call self.renderViewSavingPosition()
|
||||
call self.centerView()
|
||||
endfunction
|
||||
|
||||
" FUNCTION: s:UI.toggleZoom() {{{1
|
||||
" zoom (maximize/minimize) the NERDTree window
|
||||
function! s:UI.toggleZoom()
|
||||
|
||||
@@ -23,8 +23,8 @@ call NERDTreeAddMenuItem({'text': '(a)dd a childnode', 'shortcut': 'a', 'callbac
|
||||
call NERDTreeAddMenuItem({'text': '(m)ove the current node', 'shortcut': 'm', 'callback': 'NERDTreeMoveNode'})
|
||||
call NERDTreeAddMenuItem({'text': '(d)elete the current node', 'shortcut': 'd', 'callback': 'NERDTreeDeleteNode'})
|
||||
|
||||
if has('gui_mac') || has('gui_macvim') || has('mac')
|
||||
call NERDTreeAddMenuItem({'text': '(r)eveal in Finder the current node', 'shortcut': 'r', 'callback': 'NERDTreeRevealInFinder'})
|
||||
if nerdtree#runningMac()
|
||||
call NERDTreeAddMenuItem({'text': '(r)eveal the current node in the Finder', 'shortcut': 'r', 'callback': 'NERDTreeRevealInFinder'})
|
||||
call NERDTreeAddMenuItem({'text': '(o)pen the current node with system editor', 'shortcut': 'o', 'callback': 'NERDTreeExecuteFile'})
|
||||
call NERDTreeAddMenuItem({'text': '(q)uicklook the current node', 'shortcut': 'q', 'callback': 'NERDTreeQuickLook'})
|
||||
endif
|
||||
@@ -35,6 +35,7 @@ if executable('xdg-open')
|
||||
endif
|
||||
|
||||
if nerdtree#runningWindows()
|
||||
call NERDTreeAddMenuItem({'text': '(r)eveal the current node in the Explorer', 'shortcut': 'r', 'callback': 'NERDTreeRevealInExplorer'})
|
||||
call NERDTreeAddMenuItem({'text': '(o)pen the current node with system editor', 'shortcut': 'o', 'callback': 'NERDTreeExecuteFileWindows'})
|
||||
endif
|
||||
|
||||
@@ -45,6 +46,7 @@ call NERDTreeAddMenuItem({'text': (has('clipboard')?'copy (p)ath to clipboard':'
|
||||
|
||||
if has('unix') || has('osx')
|
||||
call NERDTreeAddMenuItem({'text': '(l)ist the current node', 'shortcut': 'l', 'callback': 'NERDTreeListNode'})
|
||||
call NERDTreeAddMenuItem({'text': '(C)hange node permissions', 'shortcut':'C', 'callback': 'NERDTreeChangePermissions'})
|
||||
else
|
||||
call NERDTreeAddMenuItem({'text': '(l)ist the current node', 'shortcut': 'l', 'callback': 'NERDTreeListNodeWin32'})
|
||||
endif
|
||||
@@ -148,21 +150,41 @@ function! s:renameBuffer(bufNum, newNodeName, isDirectory)
|
||||
let quotedFileName = fnameescape(a:newNodeName)
|
||||
let editStr = g:NERDTreePath.New(a:newNodeName).str({'format': 'Edit'})
|
||||
endif
|
||||
" 1. ensure that a new buffer is loaded
|
||||
call nerdtree#exec('badd ' . quotedFileName, 0)
|
||||
" 2. ensure that all windows which display the just deleted filename
|
||||
" display a buffer for a new filename.
|
||||
let s:originalTabNumber = tabpagenr()
|
||||
let s:originalWindowNumber = winnr()
|
||||
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(s:originalWindowNumber . 'wincmd w', 1)
|
||||
" 3. We don't need a previous buffer anymore
|
||||
let l:tempBufferName = 'NERDTreeRenameTempBuffer'
|
||||
|
||||
" 1. swap deleted file buffer with a temporary one
|
||||
" this step is needed to compensate for case insensitive filesystems
|
||||
|
||||
" 1.1. create an intermediate(temporary) buffer
|
||||
call nerdtree#exec('badd ' . l:tempBufferName, 0)
|
||||
let l:tempBufNum = bufnr(l:tempBufferName)
|
||||
" 1.2. ensure that all windows which display the just deleted filename
|
||||
" display the new temp buffer.
|
||||
call nerdtree#exec('tabdo windo if winbufnr(0) ==# ' . a:bufNum . " | exec ':e! " . l:tempBufferName . "' | endif", 0)
|
||||
" 1.3. We don't need the deleted file buffer anymore
|
||||
try
|
||||
call nerdtree#exec('confirm bwipeout ' . a:bufNum, 0)
|
||||
catch
|
||||
" This happens when answering Cancel if confirmation is needed. Do nothing.
|
||||
endtry
|
||||
|
||||
" 2. swap temporary buffer with the new filename buffer
|
||||
" 2.1. create the actual new file buffer
|
||||
call nerdtree#exec('badd ' . quotedFileName, 0)
|
||||
|
||||
" 2.2. ensure that all windows which display the temporary buffer
|
||||
" display a buffer for the new filename.
|
||||
call nerdtree#exec('tabdo windo if winbufnr(0) ==# ' . l:tempBufNum . " | exec ':e! " . editStr . "' | endif", 0)
|
||||
call nerdtree#exec('tabnext ' . s:originalTabNumber, 1)
|
||||
call nerdtree#exec(s:originalWindowNumber . 'wincmd w', 1)
|
||||
" 2.3. We don't need the temporary buffer anymore
|
||||
try
|
||||
call nerdtree#exec('confirm bwipeout ' . l:tempBufNum, 0)
|
||||
catch
|
||||
" This happens when answering Cancel if confirmation is needed. Do nothing.
|
||||
endtry
|
||||
endfunction
|
||||
|
||||
"FUNCTION: NERDTreeAddNode(){{{1
|
||||
@@ -205,7 +227,24 @@ function! NERDTreeMoveNode()
|
||||
let prompt = s:inputPrompt('move')
|
||||
let newNodePath = input(prompt, curNode.path.str(), 'file')
|
||||
while filereadable(newNodePath)
|
||||
call nerdtree#echoWarning('This destination already exists. Try again.')
|
||||
" allow renames with different casing when g:NERDTreeCaseSensitiveFS
|
||||
" is set to either 0 or 3 and the 2 paths are equal
|
||||
if (g:NERDTreeCaseSensitiveFS == 0 || g:NERDTreeCaseSensitiveFS == 3) &&
|
||||
\nerdtree#pathEquals(curNode.path.str(), newNodePath)
|
||||
break
|
||||
endif
|
||||
|
||||
call nerdtree#echoWarning('This destination already exists, Try again.')
|
||||
|
||||
" inform the user about the flag if we think it is a false positive
|
||||
" when g:NERDTreeCaseSensitiveFS is set to 2
|
||||
if g:NERDTreeCaseSensitiveFS == 2 &&
|
||||
\!nerdtree#osDefaultCaseSensitiveFS() &&
|
||||
\nerdtree#pathEquals(curNode.path.str(), newNodePath)
|
||||
echon "\n(If it is a false positive please consider assigning NERDTreeCaseSensitiveFS's value)"
|
||||
endif
|
||||
|
||||
" prompt the user again
|
||||
let newNodePath = substitute(input(prompt, curNode.path.str(), 'file'), '\(^\s*\|\s*$\)', '', 'g')
|
||||
endwhile
|
||||
|
||||
@@ -333,6 +372,29 @@ function! NERDTreeListNodeWin32()
|
||||
call nerdtree#echo('node not recognized')
|
||||
endfunction
|
||||
|
||||
" FUNCTION: NERDTreeChangePermissions() {{{1
|
||||
function! NERDTreeChangePermissions()
|
||||
let l:node = g:NERDTreeFileNode.GetSelected()
|
||||
let l:prompt = "change node permissions (chmod args): "
|
||||
let l:newNodePerm = input(l:prompt)
|
||||
|
||||
if !empty(l:node)
|
||||
let l:path = l:node.path.str()
|
||||
let l:cmd = 'chmod ' .. newNodePerm .. ' ' .. path
|
||||
let l:error = split(system(l:cmd), '\n')
|
||||
|
||||
if !empty(l:error)
|
||||
call nerdtree#echo(l:error[0])
|
||||
endif
|
||||
|
||||
call b:NERDTree.root.refresh()
|
||||
call b:NERDTree.render()
|
||||
return
|
||||
endif
|
||||
|
||||
call nerdtree#echo('node not recognized')
|
||||
endfunction
|
||||
|
||||
" FUNCTION: NERDTreeCopyNode() {{{1
|
||||
function! NERDTreeCopyNode()
|
||||
let currentNode = g:NERDTreeFileNode.GetSelected()
|
||||
@@ -453,6 +515,17 @@ function! NERDTreeExecuteFileLinux()
|
||||
call system('xdg-open ' . shellescape(l:node.path.str()))
|
||||
endfunction
|
||||
|
||||
" FUNCTION: NERDTreeRevealInExplorer() {{{1
|
||||
function! NERDTreeRevealInExplorer()
|
||||
let l:node = g:NERDTreeFileNode.GetSelected()
|
||||
|
||||
if empty(l:node)
|
||||
return
|
||||
endif
|
||||
|
||||
call system('cmd.exe /c explorer /select, ' . shellescape(l:node.path.str()))
|
||||
endfunction
|
||||
|
||||
" FUNCTION: NERDTreeExecuteFileWindows() {{{1
|
||||
function! NERDTreeExecuteFileWindows()
|
||||
let l:node = g:NERDTreeFileNode.GetSelected()
|
||||
|
||||
@@ -29,6 +29,7 @@ set cpoptions&vim
|
||||
"SECTION: Initialize variable calls and other random constants {{{2
|
||||
let g:NERDTreeAutoCenter = get(g:, 'NERDTreeAutoCenter', 1)
|
||||
let g:NERDTreeAutoCenterThreshold = get(g:, 'NERDTreeAutoCenterThreshold', 3)
|
||||
let g:NERDTreeCaseSensitiveFS = get(g:, 'NERDTreeCaseSensitiveFS', 2)
|
||||
let g:NERDTreeCaseSensitiveSort = get(g:, 'NERDTreeCaseSensitiveSort', 0)
|
||||
let g:NERDTreeNaturalSort = get(g:, 'NERDTreeNaturalSort', 0)
|
||||
let g:NERDTreeSortHiddenFirst = get(g:, 'NERDTreeSortHiddenFirst', 1)
|
||||
@@ -52,6 +53,8 @@ let g:NERDTreeShowFiles = get(g:, 'NERDTreeShowFiles', 1
|
||||
let g:NERDTreeShowHidden = get(g:, 'NERDTreeShowHidden', 0)
|
||||
let g:NERDTreeShowLineNumbers = get(g:, 'NERDTreeShowLineNumbers', 0)
|
||||
let g:NERDTreeSortDirs = get(g:, 'NERDTreeSortDirs', 1)
|
||||
let g:NERDTreeFileLines = get(g:, 'NERDTreeFileLines', 0)
|
||||
|
||||
|
||||
if !nerdtree#runningWindows() && !nerdtree#runningCygwin()
|
||||
let g:NERDTreeDirArrowExpandable = get(g:, 'NERDTreeDirArrowExpandable', '▸')
|
||||
@@ -128,6 +131,7 @@ let g:NERDTreeMapToggleBookmarks = get(g:, 'NERDTreeMapToggleBookmarks', 'B')
|
||||
let g:NERDTreeMapToggleFiles = get(g:, 'NERDTreeMapToggleFiles', 'F')
|
||||
let g:NERDTreeMapToggleFilters = get(g:, 'NERDTreeMapToggleFilters', 'f')
|
||||
let g:NERDTreeMapToggleHidden = get(g:, 'NERDTreeMapToggleHidden', 'I')
|
||||
let g:NERDTreeMapToggleFileLines = get(g:, 'NERDTreeMapToggleFileLines', 'L')
|
||||
let g:NERDTreeMapToggleZoom = get(g:, 'NERDTreeMapToggleZoom', 'A')
|
||||
let g:NERDTreeMapUpdir = get(g:, 'NERDTreeMapUpdir', 'u')
|
||||
let g:NERDTreeMapUpdirKeepOpen = get(g:, 'NERDTreeMapUpdirKeepOpen', 'U')
|
||||
@@ -142,6 +146,7 @@ call nerdtree#loadClassFiles()
|
||||
"============================================================
|
||||
call nerdtree#ui_glue#setupCommands()
|
||||
|
||||
|
||||
" SECTION: Auto commands {{{1
|
||||
"============================================================
|
||||
augroup NERDTree
|
||||
|
||||
@@ -28,7 +28,7 @@ else
|
||||
hi! link NERDTreeNodeDelimiters Ignore
|
||||
endif
|
||||
|
||||
"highlighing for directory nodes and file nodes
|
||||
"highlighting for directory nodes and file nodes
|
||||
syn match NERDTreeDirSlash #/# containedin=NERDTreeDir
|
||||
|
||||
if g:NERDTreeDirArrowExpandable !=# ''
|
||||
|
||||
Reference in New Issue
Block a user