我经常查看 dired 结构,通过递归显示整个目录:(dired dir "-lR")
. 这在大多数情况下都很有效。
但是,有时,我不想查看巨大的子目录结构。有没有办法递归地杀死一个包含完整树的dired缓冲区中的子目录?
好的,我刚刚写了以下省略号:
(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
然后可能会发生不好的事情。但你必须有点疯狂才能做到这一点,不是吗?
我find-dired
用于相同的目的。Run find (with args):
要排除子目录,我在提示符处输入类似这样的内容: -path ./exclude_me -prune -o true
,这将给我一个目录的递归列表,不包括一个目录exclude_me
。这仅在您使用带有 find 函数版本的类 Unix 时才有效。
编辑:删除树的另一种方法是简单地将 dired 缓冲区切换为可读 ( C-x C-q) 并编辑缓冲区。
使用Dired+, command diredp-kill-this-tree
。
只需将光标放在要从列表中删除的子目录中,然后调用命令。该插入的子目录及其所有也插入(列出)的后代都将被删除。
在将 point 放入子目录列表之后,您也可以通过以下任何一种方式调用此命令:
mouse-3
并选择项目Remove This Inserted Subdir 和 Lower。