如何阻止 emacs dired 模式打开这么多缓冲区?

Posted

技术标签:

【中文标题】如何阻止 emacs dired 模式打开这么多缓冲区?【英文标题】:How do I stop emacs dired mode from opening so many buffers? 【发布时间】:2010-12-22 19:08:24 【问题描述】:

当我使用dired mode 浏览并找到我想在 Emacs 中打开的文件时,dired 为我每次使用 选择目录时查找文件时访问的每个目录打开一个新缓冲区输入,这意味着我可以得到很多我不想要的缓冲区:

. * newer                    0  Fundamental       c:/work/***/batch/mydir/newer
 %  mydir                  302  Dired by name     c:/work/***/batch/mydir/
 %  batch                  616  Dired by name     c:/work/***/batch/
 %  ***         1017  Dired by name     c:/work/***/
 %  work                  2545  Dired by name     c:/work/
  * *scratch*              190  Lisp Interaction
 %  *Completions*          162  Completion List
  * *Messages*            2163  Fundamental

有没有办法让dired 重复使用单个缓冲区?我为dired 组尝试了M-x customize-group,但没有看到任何有希望的内容。

或者,有没有人有一个宏来关闭所有打开的dired 缓冲区?

【问题讨论】:

【参考方案1】:

在 Emacs 28 中,您可以只使用 (setf dired-kill-when-opening-new-dired-buffer t)。这适用于dired-find-file (RET) 或dired-up-directory (^)。

【讨论】:

【参考方案2】:

来自 Xah Lee,http://ergoemacs.org/emacs/emacs_dired_tips.html

;; Make dired open in the same window when using RET or ^
(put 'dired-find-alternate-file 'disabled nil) ; disables warning
(define-key dired-mode-map (kbd "RET") 'dired-find-alternate-file) ; was dired-advertised-find-file
(define-key dired-mode-map (kbd "^") (lambda () (interactive) (find-alternate-file "..")))  ; was dired-up-directory

【讨论】:

【参考方案3】:

当在 dired 中浏览而不是按回车键查看目录时,使用 i 然后将该目录添加到当前缓冲区。

【讨论】:

+1 这确实有帮助,但我不确定我是否喜欢在一个缓冲区中有很多目录。 为此 +1 以及在i 之后点击^ DW​​IM。【参考方案4】:

Dired+ 让您有选择地执行此操作,并且可以随时打开/关闭它。

另见http://www.emacswiki.org/emacs/DiredReuseDirectoryBuffer。

【讨论】:

【参考方案5】:

我从来没有设法让 toggle-dired-find-file-reuse-dir 可靠地工作 - 我最终仍然打开了各种 dired 缓冲区,而且我不太确定如何。

最近我发现了 dired-single (http://www.emacswiki.org/cgi-bin/wiki/dired-single.el),它似乎对我更有效。如果你想要它保证一个单独的 dired 缓冲区,并且还有一个很好的命令 dired-single-magic-buffer,如果你有一个,它将带你到打开的 dired 缓冲区,如果你没有,则打开一个。

如果不是多个 dired 缓冲区 per se 烦人,还有其他一些选择,就像它们污染缓冲区列表的方式一样。例如,elscreen.el 有一个 dired 插件,可以将 dired 缓冲区保存在自己的选项卡中,出色的 ibuffer 模式允许您在列出缓冲区时将 dired 缓冲区分组在一起。

希望有帮助!

西蒙

【讨论】:

【参考方案6】:

使用 a (dired-find-alternate-file) 而不是 Enter

另外,请参阅此页面:

http://www.emacswiki.org/emacs/DiredReuseDirectoryBuffer

【讨论】:

正是我想要的。如果用a 打开文件,甚至可以完全摆脱dired 缓冲区! 回到父目录怎么样?我使用 ^ 上一个目录,但这样做会创建一个新的 dired 缓冲区。 @avendael 请参阅the DiredReuseDirectoryBuffer wiki page 以获得解决方案。

以上是关于如何阻止 emacs dired 模式打开这么多缓冲区?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 emacs 中创建一个空文件?

Emacs:dired文件管理

Git 将 Emacs 减慢到死亡 - 如何解决这个问题?

在Windows 7的Emacs 24.3.1中,如何在dired中首先对目录进行分组?

emacs中,怎么样将文件列表中的文件在另一个窗口打开?

在 Emacs 的 dired 和 tramp 中异步运行 rsync | Linux 中国