2012-07-05 57 views
1

我经常看着dired结构,递归地显示整个目录,通过:(dired dir "-lR")。这在大多数情况下都很有效。递归地从emacs中删除subdir

然而,有些时候,有很大的子目录结构,我不想看。有没有办法递归杀死一个完整的树在一个直接缓冲区中的子目录?

回答

2

我使用find-dired出于同样的目的。要排除一个子目录,我在Run find (with args):提示符下输入如下内容:-path ./exclude_me -prune -o true,这会给我一个不包括一个目录exclude_me的目录的递归列表。这只适用于如果使用类似Unix的功能版本的查找功能。

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

+0

嗯,intercesting。那么显示的所有.hg目录哪些dired忽略,并与-prune它似乎排除一切.. – 2012-07-05 21:12:12

+0

当使用'-prune'这种方式实际需要至少一个其他条件。我更新了我的答案,使用'-path ./exclude_me -prune -o -true'。 '-o -true'表示如果在exclude_me中不是*,则包含它。 – ataylor 2012-07-05 22:02:28

+0

有趣。这可以用于多个目录吗?如果我想排除.hg和exclude_me? – 2012-07-06 15:50:18

1

好吧,我只是写了下面的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的东西,那么可能会发生坏事。但是,你必须疯狂才能做到这一点,不是吗?

0

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

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

你也可以调用这个命令通过以下两种方式,把一个子目录列表中的与后点:

  • 点击mouse-3和选择项目删除了这个插入的子目录和下
  • 选择菜单栏菜单(称为香草的Emacs 立即),项目删除该插入的子目录和下