Generally speaking, Dirvish should be able to handle most of the file exploring/managing tasks, after all it is backed by the superb Dired. Besides, choose Dirvish over packages listed below gives you:
- An unified user interface in all your file managing scenarios.
- File preview at your disposal.
- Less package configs to maintain or worry about.
neotree
works pretty well as a simple project explorer. But sadly, compare to
dirvish[-side]
, this package is not built on top of Dired, which means you have
to learn or configure a different set of commands, meanwhile, it is way less
powerful as Dired/Dirvish in terms of file managing.
Same as neotree
, but treemacs
is a much more mature yet complex package. It can
even be used as a general rendering backend of any tree-like structures, you may
find this package useful when you have related needs. It might be an overkill
for simple project exploring tasks due to its complexity and huge codebase.
dired-sidebar
, which is also a file explorer at side window that leveraging the
power of Dired, is a promising alternative to dirvish-side
. The problem with
dired-sidebar
is that all the niceities this package provided are only applied
to the side Dired instance, one needs to do some extra works to make the regular
Dired and dired-sidebar
look consistent.
See this discussion.
I’d advise against using this package (all-the-icons-dired) along with Dirvish. The reason is that it trys to retrive icons for all the files in a directory eagerly, which hangs up Emacs on large directories. Dirvish, on the contrary, renders UI elements (including icons of course) lazily whenever applicable.
Apart from similar concerns mentioned in the above all-the-icons-dired.el
section, this package (treemacs-icons-dired) also introduces duplicate icon
columns in Dirvish on spacemacs
. A workaround can be found here.
The dirvish-yank/move
command can do similar things as dired-ranger-move/paste
,
meanwhile, it has serveral benefits over dired-do-copy
or dired-ranger
:
- It paste/move files using external processes, hence heavy I/O tasks won’t block the main process of Emacs.
- It’s much simpler than
dired-ranger
because you mark files using inbuilt Dired commands such asdired-mark
,dired-mark-extension
, to name a few.
Comparing with dired-subtree
, dirvish-subtree
has several advantages:
- Small code base: only 300+ lines
- Way Faster: expands a directory with 50000+ entries almost instantly
- Provides the
subtree-state
attribute - Consistency: respects
dired-actual-switches
dired-filter
extends the filtering system of Dired on two aspects:
- Introduces the “filter-stack” concept after
ibuffer
Dirvish has no plan on implementing the
ibuffer
like “filter-stack” because IMO the Dired marking system plus differentdired-listing-switches
covers almost all the possible file filtering needs. In terms of filtering files matching multiple criterias, you can always mark files using variousdired-mark-*
commands and kill the rest lines. This also makesdirvish-emerge.el
a relatively small codebase. - Allows users to group files via various criteria
Dirvish implements the second feature as
dirvish-emerge-mode
. It works in a similar way asdired-filter-group-mode
along with several improvements:- File line indexing and reordering happened in one pass (~ 3x faster)
- Manage groups using transient menu (
dirvish-emerge-menu
) - Respect configurations in
dir-locals.el
dirvish-narrow
has (optional)orderless
integrationdirvish-narrow
does not show results from subtrees because it can be confusion sometimes
Other than these, dired-narrow
and dirvish-narrow
works pretty much the same.
In short, the collapse
attribute in Dirvish does it much faster and less invasive.
Let’s say you have a file ~/foo/bar/baz
. After you enter the ~/
directory and
enable dired-collapse-mode
, the line previously displaying the directory foo
not
only reads as foo/bar/baz
, but also points to the file ~/foo/bar/baz
, because
dired-collapse
replace the old file names with the collapsed ones by modifying
the buffer content. This behavior is quite invasive because it deprives user’s
ability to access the original file foo
. Namely, when you call dired-do-delete
on that line, the file being deleted is ~/foo/bar/baz
instead of ~/foo
. This
file name replace approach also leads to this weird behavior.
The collapse
attribute in Dirvish never touch the buffer content, it only act as
a visual indicator for files that has unique nested paths.
Dirvish has no plan to support find-dired
or fd-dired
since we have the far
better option dirvish-fd
. The advantages of using dirvish-fd
over find/fd-dired
including but not limited to:
- File preview works for
dirvish-fd
as well. dirvish-fd-switches-menu
allows us to change thefd
flags interactively.dirvish-quicksort
anddirvish-ls-switches-menu
also works in the result buffer ofdirvish-fd
.- The result buffer of
dirvish-fd
is added to Dirvish’s local history, which means commands likedirvish-history-go-forward/backward
works seamlessly withdirvish-fd
.…
The vc-state
and git-msg
attributes in Dirvish can achieve the same
functionality without sacrificing performance. Meanwhile, these packages doesn’t
mesh well with dirvish-subtree
nor dired-subtree
.
dirvish-rsync
command has feature parity of dired-rsync
. A exclusive feature in
dirvish-rsync
is that it can collect all marked files across different Dired
buffers as the source files.