Emacs 风格的文件操作和项目文件管理是啥样的?

dired-aux在dired有两个窗口时,在一个窗口中的文件操作的target directory智能设置为另一个dired窗口的目录。我觉得比sidebar中一步步展开更高效。

这种 side-by-side 的操作逻辑对于习惯 total-commander 或者 vifm 这类文件管理器的人可能比较好用,但我一直习惯不了。更具体地说,它这个「高效」的条件极其苛刻。如果我恰好开着两个 dired 窗口,而且另一个窗口正好是那个靶子,那确实一步到位。可是我实际使用时几乎不会开两个 dired 窗口,更不用说这种其中一个窗口只是单纯作为一个靶子。dired dwim target 这套范式搞得我很痛苦,我全程都是先射箭再画靶子。

我觉得比sidebar中一步步展开更高效

这要分情况。如果那些目录本身就已经展开了,那就很快。重点在于,在原生dired 下有两个限制: 1. dired 只读取当前buffer 的 marks。2. dired 没有比较好的快速浏览历史目录的方式。我觉得 dired-dwim-target 更像是这些限制之下不得已的办法。不然一个窗口能解决的事情我为什么要开两个呢?

所以 dirvish 借鉴了 ranger 和 lf 里的文件操作,并且使 marks 全局共享,你可以在一个 buffer 标记文件,然后切到另一个 dired buffer, 按 yy 粘贴。完全免去管理窗口的麻烦。

历史目录我写了一个命令,

我指的不是这种。是不通过 minibuffer 的,储存在当前会话内的「本地」历史记录。就类似现代文件管理器里的前进后退键。这个和quick-access 组合到一起,是心智负担最小的方式。

我视频里从项目目录到 HOME, 和从 fd 的搜索结果切换回来,就是用的这些命令。dirvish-history-go-forward/backward 和 dirvish-quick-access

见代码中的my-dired-directory-history,我没实现前进后退,但dired的历史记录存储在该变量里。

你这个命令我也提供了一个,但我自己用的很少。因为我发现我是能不打字就不想打字。懒 :sweat_smile: