我经常看着dired结构,递归地显示整个目录,通过:(dired dir "-lR")
。这在大多数情况下都很有效。递归地从emacs中删除subdir
然而,有些时候,有很大的子目录结构,我不想看。有没有办法递归杀死一个完整的树在一个直接缓冲区中的子目录?
我经常看着dired结构,递归地显示整个目录,通过:(dired dir "-lR")
。这在大多数情况下都很有效。递归地从emacs中删除subdir
然而,有些时候,有很大的子目录结构,我不想看。有没有办法递归杀死一个完整的树在一个直接缓冲区中的子目录?
我使用find-dired
出于同样的目的。要排除一个子目录,我在Run find (with args):
提示符下输入如下内容:-path ./exclude_me -prune -o true
,这会给我一个不包括一个目录exclude_me
的目录的递归列表。这只适用于如果使用类似Unix的功能版本的查找功能。
编辑:删除树的另一种方法是简单地将dired缓冲区切换为可读(C-x C-q)并编辑缓冲区。
好吧,我只是写了下面的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
的东西,那么可能会发生坏事。但是,你必须疯狂才能做到这一点,不是吗?
使用Dired+,命令diredp-kill-this-tree
。
只需将光标置于您想要从列表中删除的子目录中,然后调用该命令。插入的子目录及其所有也插入(列出)的后代都将被删除。
你也可以调用这个命令通过以下两种方式,把一个子目录列表中的与后点:
mouse-3
和选择项目删除了这个插入的子目录和下。
嗯,intercesting。那么显示的所有.hg目录哪些dired忽略,并与-prune它似乎排除一切.. – 2012-07-05 21:12:12
当使用'-prune'这种方式实际需要至少一个其他条件。我更新了我的答案,使用'-path ./exclude_me -prune -o -true'。 '-o -true'表示如果在exclude_me中不是*,则包含它。 – ataylor 2012-07-05 22:02:28
有趣。这可以用于多个目录吗?如果我想排除.hg和exclude_me? – 2012-07-06 15:50:18