2012-07-05 97 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 立即),項目刪除該插入的子目錄和下