2015-09-28 22 views
2

如何在特定位置使用緩衝區文件清除所有緩衝區?如何在特定位置使用緩衝區文件清除所有緩衝區?

例如,我要殺死緩衝文件在C的所有緩衝區:... \ dev的所有dired緩衝子目錄到c:\ dev的

,還是別人的話,如何去雖然emacs中所有緩衝區的文件或目錄?

謝謝@David @phils。我結合elisp的代碼和功能ibuffer

(mapc (lambda (buffer) 
    (let ((file-name 
      (or (buffer-file-name buffer) 
       (with-current-buffer buffer 
       (and 
        (boundp 'dired-directory) 
        (stringp dired-directory) 
        dired-directory)) 
       ))) 
     (when (and file-name 
       (string-match "^c:.*?\\\\dev" file-name)) 
     (kill-buffer buffer)))) 
    (buffer-list)) 
+2

如果它是一個偶然的要求,我會使用'ibuffer'與模式匹配的文件路徑標記所有緩衝區,並殺死標記的緩衝區。 – phils

+0

它的工作原理。但我想定期做。 – Shuguang

回答

3

從elisp的使用:

(mapc (lambda (buffer) 
     (let ((file-name 
       (or (buffer-file-name buffer) 
        ;; In dired-mode we need `dired-directory' which 
        ;; might be a list and may not be fully expanded. 
        (with-current-buffer buffer 
        (and (eq major-mode 'dired-mode) 
          (expand-file-name 
          (if (consp dired-directory) 
           (car dired-directory) 
          dired-directory))))))) 
      (when (and file-name 
        (string-match "^c:\\\\.*\\\\dev" file-name)) 
      (kill-buffer buffer)))) 
     (buffer-list)) 
+0

我想你想把'file-name'作爲參數傳遞給'string-match',不是嗎? – tripleee

+0

謝謝,修復它。 – David

+0

如何使用緩衝區文件名無法評估的dired緩衝區? – Shuguang