首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何同时操作更多的Emacs buffers?

如何同时操作更多的Emacs buffers?
EN

Stack Overflow用户
提问于 2009-05-08 04:36:39
回答 3查看 435关注 0票数 5

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

EN

回答 3

Stack Overflow用户

发布于 2009-05-08 05:26:22

根据您的命令,您可以执行以下操作:

代码语言:javascript
复制
M-: (mapc (lambda (b) (set-buffer b) (*command*)) (buffer-list))

但是,我有种感觉你想要一些不那么松软的东西。看看keyboard macros吧。也就是说,决定你想做什么:

代码语言:javascript
复制
C-x ( <do-your-command> C-x )
M-: (mapc (lambda (b) (set-buffer b) (kmacro-end-and-call-macro)) (buffer-list))

如果您经常使用最后一个部分,您可能希望将其定义为一个函数:

代码语言:javascript
复制
(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)))

注意:代码是未经测试的

票数 9
EN

Stack Overflow用户

发布于 2009-05-08 07:37:37

你也可以签出ibuffer,它允许你用m标记你想要操作的缓冲区,然后你可以用E在它上面执行一些东西。其他常见操作也可用,例如Q上的query-replace。只需查看菜单或模式描述(C-h m)。

顺便说一句,尽管dired似乎没有提供eval命令,但它也可以实现类似的功能。

票数 6
EN

Stack Overflow用户

发布于 2009-05-08 05:29:37

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/838258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档