如何同时操作更多 Emacs 缓冲区?

发布于 2024-07-18 21:17:16 字数 133 浏览 3 评论 0原文

我正在寻找 Emacs 中与 :bufdo Vim 命令等效的命令。 :bufdo 接受一个参数 - 另一个命令 - 并在所有打开的缓冲区上执行该命令。 我还没有在 Emacs 中找到类似的功能。

I am looking for an equivalent of the :bufdo Vim command in Emacs. :bufdo takes an argument - another command - and executes the command on all open buffers. I have not yet found a similar feature in Emacs.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

简单爱 2024-07-25 21:17:16

根据你的命令是什么,你可以这样做:

M-: (mapc (lambda (b) (set-buffer b) (*command*)) (buffer-list))

但是,我有一种感觉,你想要一些不那么口齿不清的东西。 查看键盘宏。 也就是说,决定您想要做什么:

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)))

注意:代码未经测试

Depending on what your command is, you can do:

M-: (mapc (lambda (b) (set-buffer b) (*command*)) (buffer-list))

But, I have a feeling you want something not so lispy. Take a look at keyboard macros. Namely, decide what you want to do:

C-x ( <do-your-command> C-x )
M-: (mapc (lambda (b) (set-buffer b) (kmacro-end-and-call-macro)) (buffer-list))

You'd probably want to define that last part as a function if you use it much:

(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)))

Note: code is untested

岁吢 2024-07-25 21:17:16

您还可以查看 ibuffer,它允许您使用 m 然后你可以用 E 对其执行一些操作。 还可以使用其他常见操作,例如Q 上的query-replace。 只需查看菜单或模式说明 (Ch m)。

顺便说一句,类似的事情也可以从 dired 中实现,尽管它似乎没有给你一个eval 命令。

You can also checkout ibuffer, it allows you to mark buffers you like to operate on with m and then you can execute something on it with E. Other common operations are also available, e.g. query-replace on Q. Just check out the menu or the mode description (C-h m).

BTW, similar things are also possible from dired, although it doesn't seem to give you an eval command.

如何视而不见 2024-07-25 21:17:16

看一下缓冲区列表(函数)。 它返回所有打开的缓冲区(BUFFER 对象)的列表。 有关简单示例,请参阅手册将其与 mapcar 一起使用(它对列表的每个元素进行操作,并累积结果)。 您可能还会发现 set-buffer 很有用,它可以通过 Emacs Lisp 以编程方式设置当前缓冲区。

Take a look at buffer-list (function). It returns a list of all the open buffers (BUFFER objects). See the manual for a simple example of using it with mapcar (which operates on every element of the list, and accumulates the results). You would probably also find set-buffer, which programatically sets the current buffer from Emacs Lisp, useful.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文