2013-01-12 58 views
6

有沒有辦法在多個緩衝區上執行emacs命令,而無需單獨選擇它們並在每個單獨的緩衝區上執行它。在多個emacs緩衝區執行特定命令

我通常會打開多個匹配特定正則表達式的文件,例如~/*.py並且希望啓用特定的模式,例如hs-minor-modeglasses-mode,或者對每個模式執行C-c @ C-M-h。目前我必須選擇其中的每一個,並單獨進行。那麼是否存在黑客或循環來自動執行任務。

比方說,我從緩衝區列表標記緩衝區,然後運行所有標記的命令。

我試圖thiseval-expression執行命令後,我完全失去了進入我的小緩衝區,這意味着每當我輸入M-x迷你緩衝區返回此

無法訪問迷你緩衝區Emacs的錯誤「過程菜單模式沒有按」 t支持Hideshow小模式「

我被迫實際上殺死了整個emacs進程,因爲C-x C-s沒有工作,也沒有結束任務。

PS:我在elisp的

回答

10

沒有經驗,您可以使用ibuffer此模式(這是默認的Emacs發行的一部分)。

(global-set-key "\C-x\C-b" 'ibuffer) ;; make ibuffer the default 

*Ibuffer*您可以標記與m所需要的緩衝區,然後 每執行一個形式E

通常,ibuffer比通常的緩衝區列表更靈活,我認爲ibuffer應該是Emacs中默認的緩衝區列表。

如果你這樣做的時候,你可能想通過將其附加至模式掛鉤接通每次進入蟒蛇模式,那些特殊的模式:

(add-hook 'python-mode-hook 'hs-minor-mode) 
(add-hook 'python-mode-hook 'glasses-mode) 
+0

我同意,可能鉤是最好的方法。如果你不想要它們,關閉某些單獨緩衝區的模式會更容易! – PascalVKooten

2

我不知道ibuffer有這樣的功能! 無論如何,對於那些更熟悉dired的人來說,這裏是一個相同的命令。用m或其他更強大的方法選擇文件。然後,M-xdired-do-command並寫入一個表格或命令,就像在M-x中一樣。

(defun dired-do-command (command) 
    "Run COMMAND on marked files. Any files not already open will be opened. 
After this command has been run, any buffers it's modified will remain 
open and unsaved." 
    (interactive 
    (list 
    (let ((print-level nil) 
      (minibuffer-history-position 0) 
      (minibuffer-history-sexp-flag (1+ (minibuffer-depth)))) 
     (unwind-protect 
      (read-from-minibuffer 
      "Command: " (prin1-to-string (nth 0 command-history)) 
      read-expression-map t 
      (cons 'command-history 0)) 

     ;; If command was added to command-history as a 
     ;; string, get rid of that. We want only 
     ;; evaluable expressions there. 
     (if (stringp (car command-history)) 
      (setq command-history (cdr command-history))))))) 
    (dolist (filename (dired-get-marked-files)) 
    (with-current-buffer (find-file-noselect filename) 
     (if (symbolp command) 
      (call-interactively command) 
     (eval command))))) 
相關問題