我在 doom-emacs 测试过没问题。从报错来看我唯一能想到的可能性是你把 dirvish-enabled-features-on-remote
这个选项设成了 t . 这个选项是一个list, 比如 (setq dirvish-enabled-features-on-remote '(extras))
, 具体的 docstring 有写。如果不是这个原因我就不知道了。
确实是这个原因,我看了一下,我这个值的设置形式有问题。修改之后就好了。 最后还想请教下,:vs %时的时候没有创建新的dirvish buffer,是因为dirvish中对buffer 类型做了什么限定是么?
没有特殊处理,就 emacs 固有的分屏机制。反而这个 %
属于 evil + doom 里的特殊情况,我不用这两个, 所以平常遇不到这个问题。更新一下,现在 :vs %
或者 :sp %
应该会开一个新会话,不需要设置。
我测试了,在 ubuntu20.04上面会出现这中情况,emacs 是手动编译的 28.1版本。
你说的这种方法,不会出现这个问题,但是 显示太多信息了。
这不是解决方案,只是排查。
我现在可以确认这是 dired-subtree 引入的, 也就是说在 dired 里也会出错,和 dirvish 没有关系。确保你的 --time-style
不包含中文可以避免这个问题。
;; 比如这样就会出错
(setq dired-listing-switches "-l --time-style=+%m月%d日")
;; 这样就没问题
(setq dired-listing-switches "-l --time-style=iso")
要彻底解决这个问题,你可以去给 dired-subtree 报 bug。
好的,感谢。
当在dired buffer打开文件时,所有的dired buffer都被关闭掉了,好像是dirvish-find-file
调用了dirvish-kill
, 怎么禁用这个特性。
说下详细步骤? 按了什么键或者用了什么命令,期待什么结果? 正常情况下不同会话不会相互打扰的。
在dirvish buffer中文件行按Enter (dired-find-file
)打开文件,文件打开了,但dirvish buffer全都被关闭了,我希望这些dirvish buffer不要关闭,不知道是不是我设置的问题,但我找不到原因。
就是这样设计的,随用随开。免去管理 dired buffers 的麻烦。如果你想要一个随时能呼出的会话, 试试 dirvish-side
命令。它会在创建/显示/隐藏之间循环,逻辑和 treemacs 一样。不过我最近有在考虑加个允许非全屏的会话不杀buffer 的选项,不确定。
尝试增加dirvish的配制,右上角突然出现类似modelline的东西,怎么也关不掉。dirvish相关配置如下:
(use-package! dirvish
;; :init
;; (run-with-timer 10 nil #'dirvish-override-dired-mode)
:custom
(dirvish-attributes '(
;; all-the-icons
;; dirvish-extras
;; dirvish-vc
;; dirvish-yank
;; dirvish-subtree
file-size))
(dirvish-bookmarks-alist
'(("h" "~/" "Home")
("d" "~/Downloads/" "Downloads")
("t" "~/.local/share/Trash/files/" "TrashCan")))
;; (dirvish-mode-line-format
;; '(:left
;; (sort file-time " " file-size symlink) ; it's ok to place string inside
;; :right
;; ;; For `dired-filter' users, replace `omit' with `filter' segment defined below
;; (omit yank index)))
;; List directories that has over 10000 files asynchronously
;; This feature is disabled by default
;; (dirvish-async-listing-threshold 10000)
;; :commands (dirvish dirvish-dired)
:config
;; (dirvish-peek-mode)
;; (dirvish-override-dired-mode)
(setq dirvish-hide-details nil)
;; In case you want the details at startup like `dired'
;; :hook
;; (dirvish-mode . (lambda () (dired-hide-details-mode -1)))
:bind
(("C-x f" . dirvish-fd)
:map dired-mode-map
("TAB" . dirvish-toggle-subtree)
("SPC" . dirvish-show-history)
("*" . dirvish-mark-menu)
("r" . dirvish-roam)
("b" . dirvish-goto-bookmark)
("f" . dirvish-file-info-menu)
;; ("M-n" . dirvish-go-forward-history)
;; ("M-p" . dirvish-go-backward-history)
("M-s" . dirvish-setup-menu)
("M-f" . dirvish-toggle-fullscreen)
([remap dired-sort-toggle-or-edit] . dirvish-quicksort)
([remap dired-do-redisplay] . dirvish-ls-switches-menu)
([remap dired-summary] . dirvish-dispatch)
([remap dired-do-copy] . dirvish-yank-menu)
([remap mode-line-other-buffer] . dirvish-other-buffer)))
有时候要在dired buffer 打开文件,这种情况下就需要重复打开dired buffer,dired-find-file
好像被dirvish-find-file
覆盖了,也不能自己增加一个快捷键,打开文件但不关闭dired buffer。
我估计是你 dirvish-attributes 里面的名字没写对, 你先
(prog1 (mapc #'require dirvish-extra-libs) (describe-variable 'dirvish--available-attrs))
看看正确的名称。重启一下 Emacs 先吧。
我举例说明哈。 你 dirvish-dired 打开 ~/foo 假如现在是:
~/foo
a.py
b.py
c.py
你打开了 a.py,此时又想开 b.py. 那你就再 dirvish-dired,打开 b 不就可以了? 或者你也可以用 dired-other-window。那个buffer 被杀或者不被杀 又怎样呢?
你的意思是原来是好的,你加了一些配置变成了这样,那你就从没问题的部分开始二分定位一下呗,我看你上面发的是没问题的。除了图片缓存,没有往硬盘里写什么东西。
dirvish-override-dired-mode
放到:init
上就没有问题,放到:config
上或者:init
上延迟执行也会出现这种问题,这句话拖慢我1s多的启动时间,我想延迟执行。
那你直接
(use-package! dirvish
:defer 0.5
;; 或者
;; :after-call pre-command-hook
)
:defer
好像没用,我试了, :defer
能 defer :init
的执行吗。
:defer 你就加 dirvish-override-… 到 :config 。