我正在寻找与:bufdo中的Emacs命令等效的命令。:bufdo接受一个参数-另一个命令-并在所有打开的缓冲区上执行该命令。我还没有在Emacs中找到类似的功能。
发布于 2009-05-08 05:26:22
根据您的命令,您可以执行以下操作:
M-: (mapc (lambda (b) (set-buffer b) (*command*)) (buffer-list))但是,我有种感觉你想要一些不那么松软的东西。看看keyboard macros吧。也就是说,决定你想做什么:
C-x ( <do-your-command> C-x )
M-: (mapc (lambda (b) (set-buffer b) (kmacro-end-and-call-macro)) (buffer-list))如果您经常使用最后一个部分,您可能希望将其定义为一个函数:
(defun bufdo ()
"execute last macro on all buffers, ala bufdo from vi"
(interactive)
(mapc (lambda (b)
(with-current-buffer b
(kmacro-end-and-call-macro)))
(buffer-list)))注意:代码是未经测试的
发布于 2009-05-08 07:37:37
你也可以签出ibuffer,它允许你用m标记你想要操作的缓冲区,然后你可以用E在它上面执行一些东西。其他常见操作也可用,例如Q上的query-replace。只需查看菜单或模式描述(C-h m)。
顺便说一句,尽管dired似乎没有提供eval命令,但它也可以实现类似的功能。
发布于 2009-05-08 05:29:37
看一看buffer-list (function)。它返回所有打开的缓冲区(BUFFER对象)的列表。有关将其与mapcar一起使用的简单示例,请参阅the manual (它对列表中的每个元素进行操作,并累加结果)。您可能还会发现set-buffer很有用,它以编程方式设置Emacs Lisp中的当前缓冲区。
https://stackoverflow.com/questions/838258
复制相似问题