各位好。Dirvish 刚刚发布了1.0 版,欢迎大家尝尝看。如果使用中遇到问题或者有相关建议,可以直接在本贴回复或者提 issue。我也会在本贴更新这个项目的进展。
Dirvish: 基于 Dired 的极简、一站式文件管理器 | 文件管理方案
项目地址: GitHub - alexluigit/dirvish: A polished Dired with batteries included.
这个包缘起于我在使用 Dired 过程中遇到的几个问题:
-
使用
dired-next/previous-file
或者beginning/end-of-buffer
这类命令时,光标会被移动到两个基本没什么意义的位置。这个行为在普通的文本 buffer 里是合理的。可是在 Dired 里,这一行又没文件,给我把光标移过来干嘛呢? 搞的我还非要移回去。
-
对于 Dired 这类 buffer 来说,绝大部分时候行是最基本的操作单位,所以行高亮可以说是必需品。可是 Dired 却不负责行高亮,于是大家只能无奈选择通用的
hl-line-mode
,可是hl-line-mode
是基于 overlay 实现的,所以理论上它有可能与所有使用 overlay 的第三方 Dired 包冲突。一个明显的例子来自hl-line-mode
+all-the-icons-dired-mode
. -
在窗口中展示文件名(左) + 文件大小(右) 是一个常见到不能再常见的功能。然而 Dired 只有
dired-hide-details-mode
,要么开要么关,你说我就要左文件名右文件大小,很蓝的啦。 -
Buffer 管理。默认状态下,每个与目录相关的 Dired 命令都会新开一个 buffer. 你随便前进后退几次就多了一堆 buffer。Emacs 28 加入了
dired-kill-when-opening-new-dired-buffer
选项,意思是每新开一个 Dired buffer,旧的 buffer 就会被删掉,于是 Dired 永远就一个 buffer。可是实际使用下来会发现这个方案带来的问题更大。一方面,杀掉旧 buffer 的同时也把 buffer 里携带的诸如 marks, 文件夹折叠/展开状态这些信息去掉了,重新打开就没了。另一方面,如果是一个有很多文件的大目录,反复的读写操作会带来可感知的延迟。 -
文件预览。这个最重要却也最不值得说。太基本的功能了。老实说让一个 Emacs 用户开终端用 ranger 我觉得挺离谱的。
Dirvish 并不希望像 ranger.el 一样把 Ranger 搬进 Emacs,它最初的出现是想解决 Emacs/Dired 中的这几个问题。可是由于这些问题并不是哪一个包或者 Dired 本身造成的 (毕竟 Dired 本身就不是为这些设计的,它只是一个 “DIRectory EDitor”),再加上考虑要兼顾 Dired 丰富的生态,使得我在解决这些问题的过程中必须创造一些必要的抽象,让 Dirvish 更多地发挥一些框架性的作用,最终成为了现在的样子。
极简是指什么?
- 低门槛,会用 Dired 就行,不绑定任何按键。
- 非核心功能 (例如图标) 全在 extensions/ 目录,不想用可以不开,想删掉也不是不行。
- 核心代码 1,500 行左右 (ranger.el: 3,100; neotree: 2200),无第三方依赖。
一站式是指什么?
如果你不需要太多 Dired/project.el 之外的文件/项目管理功能,Dirvish 完全可以成为你的 Dired + ranger + neotree, 不仅看起来统一,用起来也一样。
具体功能,命令或者配置请参见项目 README 以及 Configuration.org.
最后,感谢大家的使用和反馈!