在所有打开的缓冲区上执行命令

时间:2013-12-12 11:34:20

标签: emacs elisp

我使用C-x C-f /path/to/files/*.txt在emacs中打开了大量文件 我还创建并保存了一个名为my-macro

的键盘宏

现在我想在所有打开的缓冲区上运行这个宏。我怎么能在emacs中这样做?

我想提一下,我是emacs的新手,也不了解emacs lisp代码,但可以用C ++编写代码。 因此,如果有人建议或提供一些lisp代码,请通过撰写评论来支持我,以便我可以根据需要对其进行修改。

编辑1: 我试过通过 m 标记所有打开的缓冲区然后 E 然后Eval(form): my-macro 但得到以下错误

  

符号作为变量的值为void:my-macro

1 个答案:

答案 0 :(得分:1)

错误给你一个线索:“符号的值作为变量是无效的”

my-macro不是包含值的变量。您需要引用宏:'my-macro(或等效的(quote my-macro)

如果你真的想在所有缓冲区中执行宏(注意像*Messages*这样的缓冲区),这将是一个编程的替代方案

(defun execute-my-macro-in-all-buffers ()
  (interactive)
  (dolist (buffer (buffer-list))
    (with-current-buffer buffer
      (if (and buffer-file-name
               (y-or-n-p (format "Execute macro in %s? " buffer-file-name)))
          (execute-kbd-macro 'my-macro)))))