我經常看着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