1

我经常查看 dired 结构,通过递归显示整个目录:(dired dir "-lR"). 这在大多数情况下都很有效。

但是,有时,我不想查看巨大的子目录结构。有没有办法递归地杀死一个包含完整树的dired缓冲区中的子目录?

4

3 回答 3

2

好的,我刚刚写了以下省略号:

(defun bp-kill-directory-rec()
  (interactive )
  (let (
    (i (point))
        (cur-dir (dired-current-directory)))
    (beginning-of-buffer)
    (while (search-forward cur-dir nil t)
      (dired-kill-subdir))
    (goto-char i)))

从要杀死的目录中的光标开始,它将杀死该目录的所有子目录。诀窍是(dired-current-directory)给出整个路径,所以搜索它应该只给出你想要杀死的目录。如果你有一个目录结构,你有类似的东西/home/a/b/home/c/d/home/a/b然后可能会发生不好的事情。但你必须有点疯狂才能做到这一点,不是吗?

于 2012-07-06T19:21:04.293 回答
2

find-dired用于相同的目的。Run find (with args):要排除子目录,我在提示符处输入类似这样的内容: -path ./exclude_me -prune -o true,这将给我一个目录的递归列表,不包括一个目录exclude_me。这仅在您使用带有 find 函数版本的类 Unix 时才有效。

编辑:删除树的另一种方法是简单地将 dired 缓冲区切换为可读 ( C-x C-q) 并编辑缓冲区。

于 2012-07-05T20:53:12.293 回答
1

使用Dired+, command diredp-kill-this-tree

只需将光标放在要从列表中删除的子目录中,然后调用命令。该插入的子目录及其所有也插入(列出)的后代都将被删除。

在将 point 放入子目录列表之后,您也可以通过以下任何一种方式调用此命令:

  • 单击mouse-3并选择项目Remove This Inserted Subdir 和 Lower
  • 选择菜单栏菜单Single (在 vanilla Emacs 中称为Immediate ),项目Remove This Inserted Subdir 和 Lower
于 2014-09-27T18:30:39.640 回答