以递归方式从emacs dired中删除subdir

时间:2012-07-05 20:35:36

标签: emacs dired

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

然而,有时候,我不想看到巨大的子目录结构。有没有办法递归杀死一个带有完整树的dired缓冲区中的子目录?

3 个答案:

答案 0 :(得分:2)

我将find-dired用于同一目的。要排除子目录,我在Run find (with args):提示符下输入类似的内容:-path ./exclude_me -prune -o true,这将为我提供一个目录的递归列表,不包括一个目录exclude_me。这只适用于你使用类似Unix的函数版本的find。

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

答案 1 :(得分:2)

好的,我刚写了以下的elisp:

(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之类的东西,那么可能会发生不好的事情。但是你必须有点疯狂,不是吗?

答案 2 :(得分:1)

使用Dired+,命令 diredp-kill-this-tree

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

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

  • 点击mouse-3,然后选择项删除此插入的子目录并降低
  • 选择菜单栏菜单单个(在香草Emacs中名为立即),项目删除此插入的子目录并降低