我想在Dired中显示一个目录,其中一些子目录是递归打开的(就好像我为它们传递了"R"选项).是否可以在Emacs中执行此操作?如何在Elisp中轻松实现这一点?
在Windows资源管理器中,我会在文件夹窗口中按"*"以递归方式打开目录(当然只有子目录可见,而不是文件).我想在Emacs中做同样的事情,但那些文件也是可见的.
在Mac OS上我可以使用终端,写"cd",然后将文件夹从Finder拖放到终端.然后我获得类似"cd/Users/..."的东西,这允许我快速更改到相应的目录.如果我打开带有Mx shell的emacs shell并将文件夹拖放到它,emacs会以dired模式更改并显示我删除的文件夹的内容.如何"退出"或"退出"直接模式并获取一个目录更改为我删除的文件夹的shell?这会给我一些类似上面的东西,这将是非常有用的.
我经常想将文件从一半(Cx 2)复制到另一半emacs,两半都有不同的dired缓冲区.
显而易见的方法是在一个窗口中标记文件,转到另一个窗口,移动到目录名称,标记开始,转到结束,复制到环,返回到上半部分,最后在粘贴名称时启动副本来自戒指的缓冲区.
是否有更短的方法从一个dired缓冲区复制到另一个?
编辑
谢谢,BRPocock.在dired-dwim定制下,我只看到:

我将以下内容放在我的.emacs文件中:
(require 'dired-x)
(add-hook 'dired-load-hook '(lambda () (require 'dired-x)))
(setq dired-omit-files-p t)
(setq dired-omit-files
(concat dired-omit-files "\\|^\\..+$\\|-t\\.tex$\\|-t\\.pdf$"))
Run Code Online (Sandbox Code Playgroud)
但C-x d仍然显示.pdf和.tex文件.我在最后一行中的语法错了吗?
奖金问题:有没有办法让Dired隐藏隐藏的目录,比如.git文件夹?
在 Emacs dired 缓冲区中,如果我在文件名上导航并点击ofor dired-find-file-other-window, dired 会成功产生所需的行为:在辅助窗口中打开文件。
但是,如果我然后导航指向第二个文件名并再次点击o,则 dired再次拆分框架并在第三个窗口中打开文件。
如何指示直接重用第二个窗口,以便在一个框架中始终最多有两个窗口?
我正在寻找一些建议来创建一个自定义函数来dired-mode关联复制和移动文件,以便在目录尚不存在的情况下创建目录.默认行为是,如果目录尚不存在,则只生成错误消息.
STICKING POINT:我脑海中的关键点在于处理错误的创建多个目录的尝试.例如,让我们说,我们想从主目录中的文件复制~/到 /tmp/test/one/-该目录/tmp/test/已经存在,但/tmp/test/one/并没有尚未存在.相反打字/tmp/test/one/,我错误地输入/tmp/tesst/one-在这种情况下,应该有一个错误消息,说明类似- 嘿,你不能这样做,因为/tmp/tesst/首先必须存在之前,你可以创建/tmp/tesst/one. 当然,如果我输入正确,事情就会顺利进行,/tmp/test/one因为/tmp/test/在这个例子中已经存在了.
而且,最后,我假设我应该创建一个基于的新函数dired-do-create-files- 修改以下代码部分:
(if (not (or dired-one-file into-dir))
(error "Marked %s: target must be a directory: %s" operation target))
Run Code Online (Sandbox Code Playgroud)
任何超越贴切点的指导,或任何其他我未曾想到的危险,都将不胜感激.
我使用以下代码.emacs:
(require 'dired+)
(toggle-diredp-find-file-reuse-dir 1)
Run Code Online (Sandbox Code Playgroud)
所以它不会为我访问的每个目录创建一个缓冲区.然后我决定添加一些人体工程学:
(add-hook 'dired-mode-hook
(lambda ()
(define-key dired-mode-map (kbd "C-<up>") 'dired-up-directory)))
Run Code Online (Sandbox Code Playgroud)
所以当我点击Ctrl-<up>它时会移动到父目录.但它在新缓冲区中打开父目录.
如何在同一个缓冲区中打开它?
我想标记当前未标记的所有文件,同时取消标记所有标记的文件.我该怎么做?
假设我有一个*.png和其他格式的目录.我想只过滤PNG.说,我做了:% d.png现在想选择其余的,但不是PNG?
有没有办法快速浏览Emacs(24.3)中的大量文件?进一步来说:
我们假设Emacs帧被分成两个窗口.假设焦点位于左侧窗口中,该窗口具有打开的"dired"缓冲区,其中包含大量文本文件(或代码).我想在文件列表中上下移动(例如使用光标键),同时当前文件显示在右侧窗口中.更好的是,只有当我将dired缓冲区移动到下一个文件时,文件才会被查看和关闭.这将非常有用,特别是与一些"省略"模式一起使用.
这可以在'dired'中完成吗?我也无法在dired-x或者日出指挥官中找到这个功能.可能吗?
我试过的最好的候选人(以及为什么他们没有解决问题):
'v'显示当前文件,但也引起注意
'Co'显示当前文件,但在向上或向下移动之后,我必须再次按Co,它也会生成大量缓冲区
非常感谢你的帮助!
我使用一个名为dired-details和dired-details +的库来简化dired的显示,这样就像这样一行:
-rw-r--r--@ 1 peter staff 22571 Apr 15 16:05 foo.txt
Run Code Online (Sandbox Code Playgroud)
显示如下:
foo.txt
Run Code Online (Sandbox Code Playgroud)
但是,我有另一个函数,它将所有目录放在列表的顶部:
(defun mydired-sort ()
"Sort dired listings with directories first."
(save-excursion
(let (buffer-read-only)
(forward-line 2) ;; beyond dir. header
(sort-regexp-fields t "^.*$" "[ ]*." (point) (point-max)))
(set-buffer-modified-p nil)))
(defadvice dired-readin
(after dired-after-updating-hook first () activate)
"Sort dired listings with directories first before adding marks."
(mydired-sort))
Run Code Online (Sandbox Code Playgroud)
并且这第二个函数干扰了dired-details,这样当我C-x d打开一个dired缓冲区时,初始显示会显示完整的无关细节.只需按下g以revert-buffer刷新显示,目录详细信息就会隐藏.
如何在所有直接显示中默认启用隐藏详细信息?