我正在寻找相当于:bufdo
Emacs 中的Vim命令.:bufdo
接受一个参数 - 另一个命令 - 并在所有打开的缓冲区上执行命令.我还没有在Emacs中找到类似的功能.
根据您的命令,您可以执行以下操作:
M-: (mapc (lambda (b) (set-buffer b) (*command*)) (buffer-list))
但是,我有一种感觉,你想要的东西不那么lispy.看看键盘宏.即,决定你想做什么:
C-x (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)))
注意:代码未经测试
您也可以签出ibuffer,它允许您标记您喜欢的缓冲区m
,然后您可以使用它执行某些操作E
.其他常见的操作也可以,例如query-replace
上Q
.只需查看菜单或模式说明(C-h m
)即可.
顺便说一句,类似的东西也可以来自dired,虽然它似乎没有给你一个eval
命令.