Dirvish: 基于 Dired 的极简、一站式文件管理器

各位好。Dirvish 刚刚发布了1.0 版,欢迎大家尝尝看。如果使用中遇到问题或者有相关建议,可以直接在本贴回复或者提 issue。我也会在本贴更新这个项目的进展。

Dirvish: 基于 Dired 的极简、一站式文件管理器 | 文件管理方案

项目地址: GitHub - alexluigit/dirvish: A polished Dired with batteries included.

这个包缘起于我在使用 Dired 过程中遇到的几个问题:

  1. 使用 dired-next/previous-file 或者 beginning/end-of-buffer 这类命令时,光标会被移动到两个基本没什么意义的位置。

    这个行为在普通的文本 buffer 里是合理的。可是在 Dired 里,这一行又没文件,给我把光标移过来干嘛呢? 搞的我还非要移回去。

  2. 对于 Dired 这类 buffer 来说,绝大部分时候行是最基本的操作单位,所以行高亮可以说是必需品。可是 Dired 却不负责行高亮,于是大家只能无奈选择通用的 hl-line-mode,可是 hl-line-mode 是基于 overlay 实现的,所以理论上它有可能与所有使用 overlay 的第三方 Dired 包冲突。一个明显的例子来自 hl-line-mode + all-the-icons-dired-mode.

    line-comparison

  3. 在窗口中展示文件名(左) + 文件大小(右) 是一个常见到不能再常见的功能。然而 Dired 只有 dired-hide-details-mode,要么开要么关,你说我就要左文件名右文件大小,很蓝的啦。

  4. Buffer 管理。默认状态下,每个与目录相关的 Dired 命令都会新开一个 buffer. 你随便前进后退几次就多了一堆 buffer。Emacs 28 加入了 dired-kill-when-opening-new-dired-buffer 选项,意思是每新开一个 Dired buffer,旧的 buffer 就会被删掉,于是 Dired 永远就一个 buffer。可是实际使用下来会发现这个方案带来的问题更大。一方面,杀掉旧 buffer 的同时也把 buffer 里携带的诸如 marks, 文件夹折叠/展开状态这些信息去掉了,重新打开就没了。另一方面,如果是一个有很多文件的大目录,反复的读写操作会带来可感知的延迟。

  5. 文件预览。这个最重要却也最不值得说。太基本的功能了。老实说让一个 Emacs 用户开终端用 ranger 我觉得挺离谱的。

Dirvish 并不希望像 ranger.el 一样把 Ranger 搬进 Emacs,它最初的出现是想解决 Emacs/Dired 中的这几个问题。可是由于这些问题并不是哪一个包或者 Dired 本身造成的 (毕竟 Dired 本身就不是为这些设计的,它只是一个 “DIRectory EDitor”),再加上考虑要兼顾 Dired 丰富的生态,使得我在解决这些问题的过程中必须创造一些必要的抽象,让 Dirvish 更多地发挥一些框架性的作用,最终成为了现在的样子。

极简是指什么?

  1. 低门槛,会用 Dired 就行,不绑定任何按键。
  2. 非核心功能 (例如图标) 全在 extensions/ 目录,不想用可以不开,想删掉也不是不行。
  3. 核心代码 1,500 行左右 (ranger.el: 3,100; neotree: 2200),无第三方依赖。

一站式是指什么?

如果你不需要太多 Dired/project.el 之外的文件/项目管理功能,Dirvish 完全可以成为你的 Dired + ranger + neotree, 不仅看起来统一,用起来也一样。

具体功能,命令或者配置请参见项目 README 以及 Configuration.org.

最后,感谢大家的使用和反馈!

45 个赞

好用。

顺便:妹子不错!

4 个赞

支持一下,早上刚在 Reddit 看到

我发现世界上的计算文化,中国的最妙。不但最多宅男,这些家伙对妹子没什么不好意思。

感谢!不过妹子我不晓得是谁 :sweat_smile:

感谢! Reddit 上都嫌弃我那个视频没录好。

试用了一下,png 预览第一张后,后面的不能预览了,卡住了。

文本预览没问题。pdf 文件只能预览第一页。

左上和左下角有块块。

不好意思没太看懂,用个壁纸和好不好意思有什么联系吗?

你好像用了什么跟 窗口/buffer 管理有关的包是吗? 正常显示不应该是这样,看样子显示 header 和 footer 的 buffer 被杀掉了。

报错信息有吗? 预览窗口里有任何显示吗? 那个 png 文件多大? 如果图片比较大需要 imagemagick 生成缓存。 pdf 预览是 如果你安装了 pdf-tools, 就自动调用 pdf-tools 预览, 不然就只生成一张缩略图。因为自带的 DocView 太慢了。

分屏后如何打开两个dirvish窗口,比如我希望在两个dired buffer之间拷贝文件

我没用什么窗口管理的包,使用的也就是内置的 display-buffer-alist ,和centaur-tabs有关吗?

上图是 emacs -q 打开dirvish 后的图。还是有左上下光标。

-q 打开直接没有预览是什么回事?

你指的是两个像 dired 窗口那样的 dirvish 窗口并排吗? 没有提供这样的命令,因为这种应该挺容易写的吧 就类似这样是吗?

(split-window-right)
(dirvish-dired)
(other-window)
(dirvish-dired)

我们在西方没有彩虹屁的等效概念。我们也不会设置辣妹当我们的资料图片。

https://saekiraku.github.io/vscode-rainbow-fart/#/zh/

https://repo.or.cz/emacs-rainbow-fart.git

不是这个意思,是dirvish窗口会相互覆盖layout,无法并排展示

哦 我大概明白了,你是说两个 dirvish 在两个窗口里,那目前还做不到,只能同时展示一个 dirvish 或者多个 dirvish-dired. 不过你可以用 tab-bar-new-tab 开个新 tab 放另一个 dirvish

@在下萝莉控ii cos 鬼刀里的海琴烟(

咦 这个差不多是正常的,就是光标没被隐藏。你这是什么 Emacs 版本?

27.2.。。。。。。