2013-01-12 60 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))))) 
相关问题