preservim / nerdtree

A tree explorer plugin for vim.
Do What The F*ck You Want To Public License
19.56k stars 1.44k forks source link

Add user choice to follow symlinks or keep them #1404

Open terminatorul opened 8 months ago

terminatorul commented 8 months ago

Add new option so users can choose to resolve symlinks or not.

Automatically resolving symlinks is not always the right choice, and is different from what Vim does, and can cause some issues for users when their directory changes unexpectedly.

Attached a (rather naive) patch that simply skips the call to Vim resolve() function if the option g:NERDTreeResolveSymLinks is disabled (v:false). The default option is v:true, to keep the original behavior of NERDTree, though I do not recommend it.

symlinks.zip

rzvxa commented 8 months ago

Hi, Thanks for bringing this up. The reason behind resolving the symlinks in NERDTree was to show the symlink destination in the tree with the [name] -> [dest] format and provide the ability to follow the node in the tree on expanding it. There was PR #1367 for toggling the destination preview on or off. We can extend it so it can disable the whole symlink resolving. To make it easier on ourselves we can replace the toggle with a global variable to prevent it from changing constantly by the user in mid-session.

Until now there was no good reason for using #1367, But if we use it to keep symlinks unresolved it can be useful. Feel free to fork and modify that PR or create your own if you want to do it fresh.

terminatorul commented 8 months ago

I think showing the symlinks (and junctions on Windows) is fine, as it will not cause problems to users, But replacing the symlink with the target, when changing directory (or loading a directory) or opening a file, is a different option.

I noticed somehow my simple patch obove does not affect how symlinks are displayed, but still prevents changing the original directory. So luckily it did exactly what I wanted.

rzvxa commented 8 months ago

Maybe I'm wrong since I didn't use the patch I just read it, As far as I've seen NERDTree needs to resolve the path to knowing if a file is a symlink or not so I don't know how bypassing it wouldn't break the symlink destination. I need to run it to make sure, But I highly encourage you to create a PR for it.

rzvxa commented 8 months ago

A PR addressing this issue may also resolve or help with #1339 and #1352.