VIM noob here, so code might not be optimal.
My setup is as follows.
NVIM v0.5.0-95-g2e14dffbb, Linux Mint 19.2.
I have this in init.vim
```vim
set clipboard=unnamedplus
```
This enables me to share clipboard between VIM and X clipboard.
The problem is that the menu option in NERDTree copies the file path to the "* register.
This means I can't access the value in the X clipboard.
* Add an optional parameter to neredtree#exec to suppress all events.
The value doesn't matter, but 1 is a good choice. Its presence is an
indicator that tells NERDTree to tell Vim to ignore all events. I'm not
yet sure if there needs to be an else section to that if block. It may
be OK to allow all events to fire in the right situations.
* Supress events in all intermediate nerdtree#exec calls.
Finding all the right function calls is the key here.
* Make ignoreAll a required parameter to nerdtree#exec().
* Put required ignoreAll argument (==0) in where it's now needed.
* Ignore events when creating a new vertical split.
* Ignore events when closing NERDTree. This may need to be reverted.
* Remove debugging statment and commented-out code.
* Wrap remaining buffer/window-switching commands in nerdtree#exec().
* Update version number.
* Add a space between arguments in nerdtree#exec() calls.
* Revert "Use :mode only in neovim. MacVim still needs to use :redraw! (#1019)"
This reverts commit 4ac07f52a3.
* If not Neovim, use `:redraw!` as was done before.
* Update version number.
* Fix punctuation in NERDTree Menu instructions.
* Use :mode only in neovim. MacVim still needs to use :redraw!
* Make nerdtree#redraw do both redraw and redraw! based on a parameter.
* Make bang a required parameter.
* Replace all redraw statments with call nerdtree#redraw function calls.
* Update version in change log.
* Add menu item to copy the node's path to the clipboard.
It works on Mac. Check Windows later.
* Handle case where clipboard is not a compiled feature of Vim.
* Change menu text if clipboard is unavailable.
* Extract the menu action prompts to a function
* Add a NERDTreeMinimalMenu configuration option
If this option is set, Vim’s command line displays
a single-line version of the menu:
Which action? (a*/m/d/r/o/q/c/l):
Pressing ‘a’ will call the ‘add child node’ menu
item as that is its shortcut.
The * denotes the position of the currently
selected menu item which can be changed with
NERDTreeMenuDown and Up in the usual way.
The user may wish to set these to <left>, <right>
or h, l if they prefer.
* Minimise the text once a menu item is chosen
If NERDTreeMinimalMenu is set, then echo a single
line prompt after the menu item is chosen. This
reduces noise for users who are already familiar
with how the menu works and prevents Vim scrolling
down to accommodate the menu text.
If the directory is non-empty we display
‘Delete directory?’ instead of ‘Delete?’ and the
user must still type ‘yes’ to confirm, rather than
just pressing ‘y’.
* Document the new NERDTreeMinimalMenu feature
* Tweak the format for the minimal menu prompt
As per @PhilRunninger’s suggestions:
- The menu now shows the ‘j/k/enter’ help text
- The first word of the selected item is shown*
- Use commas between menu items so that it’s
visually distinct from the ‘j/k/enter’ text
* I tried displaying the full menuItem text, but
this can be quite long, e.g.
> (o)pen the current node with system editor
This causes the menu to jump around a lot. We
could add another minimal versions of these, but
I think the first word seems ok for now.
* Add new command to open NERDTree in the root of a VCS repository.
* Add another example to the help file.
* Refactor and make NERDTreeVCS work on Windows.
* Don't crash when NERDTreeVCS is given a nonexistent folder.
* Move VCS code to a plugin script.
* Add some documentation to the top of vcs.vim.
* WIP: Wow! That's an ugly diff. I'm not done yet, though.
* Fix the ugliness of the previous commit, and finish the work.
If the node being renamed is a directory, get a list of all open buffers
whose file lives in the old directory. If that list is not empty, ask
the user if he wants to replace the old buffers with the new files. The
logic to handle renaming a file node stays the same, although the code
has been refactored a bit.
* Force sort to recalculate the cached sortKey.
The problem in issue #880 was caused by the sort using the old sortKey.
For example, given nodes A, B, and C, if B were renamed to D, the sort
was still using B as its sortKey, thus not moving it.
It's a bit of a hack, but if we set g:NERDTreeOldSortOrder to an empty
list, the cached sortKey will be recalculated. I did the same thing for
both the Copy and Add functions as well.
* Add a comment to explain the let ... = [] statement.
* Use a better arg for FINDSTR when using the m,l command in Windows.
* Remove trailing spaces.
* Use vim getf...() functions in place of DOS commands.
* Remove unnecessary variable.
* Put labels in the text of the file/dir listing.
Fixes#821. If a node isn't opened in NERDTree, it's children aren't
known yet, so when deleting the node (with `m`, `d`), the user isn't
properly asked to confirm the delete. It was going to the less strict
`Y`/`n` confirmation, instead of the `yes` confirmation for non-empty
directories.
This change checks to see if the node is opened already. If it is, the
existing getChildCount() function is used; otherwise, the disk is read
to get the number of children there.
This change will display the file size (printed with the "ml"
command) in an easy-to-read format, while still displaying its
precise value. It uses the "stat" command (with the correct
switches for Unix and OSX) to get the file size, "sed" to add the
commas, and "sed" again to replace the original size with the
modified number.
Previously, deleting a file in the NERDTree with "md" would cause
a new buffer to be created to fill the window(s) occupied by
a buffer on the file. This pull request makes it so that a new
buffer is not created. Instead, the next buffer in the buffer list
fills the window.
Fixes#755.
This small change reverts to the previous method of breaking shell
output into lines. The reason for this is to avoid the printing of
trailing carriage return characters on Windows.
The (l) menu command breaks on Windows systems when 'shellslash' is
set. This is due to the fact that the menu item uses a hard coded
shell command, thus relying on the use of the default Windows shell
without the 'shellslash' setting.
The pattern used for the fix is localized to the problem function.
However, this technique could easily be abstracted into its own
function to execute Windows shell commands with the default shell
throughout the NERDTree codebase.