我在emacs
缓冲区中打开了许多文件。现在我想在所有打开的缓冲区上运行keep-lines
命令。在emacs中的所有打开的缓冲区上运行keep-lines命令
这样做的步骤是什么?
我使用的是emacs版本24.3。
我在emacs
缓冲区中打开了许多文件。现在我想在所有打开的缓冲区上运行keep-lines
命令。在emacs中的所有打开的缓冲区上运行keep-lines命令
这样做的步骤是什么?
我使用的是emacs版本24.3。
迭代所有打开的缓冲区:使用dolist
来遍历buffer-list
(或您喜欢的任何合适的子集)。对于当前迭代的缓冲区使用with-current-buffer
,并在其中调用keep-lines
。
你可以调整它有更多的灵活性(例如,在keep-lines
电话):
(defun foo (regexp)
(interactive (list (read-regexp "Regexp: ")))
(dolist (buf (buffer-list))
(goto-char (point-min)) ; Is this what you want, to start at bob?
(with-current-buffer buf (keep-lines regexp))))
然而,buffer-list
的回报,你可能不希望这样做,以多个缓冲区。根据需要过滤它,例如使用remove-if
(在cl-lib.el
)或其他。
如果您只处理文件缓冲区,那么您可能需要使用find-file-noselect
。有多种可能性,取决于你真正需要什么。
你可以用这样的做法:
(defun foo (regexp)
(interactive (list (read-regexp "Regexp: ")))
(dolist (buf (buffer-list))
(with-current-buffer buf
(when (y-or-n-p (format "Do it to `%s'? " buf))
(goto-char (point-min))
(keep-lines regexp)))))
然后你可能要想想你是否也想保存修改缓冲区等
对于更多手动控制的方法,您可以使用ibuffer
:
ibuffer
RET(keep-lines "pattern")
RET或者,按德鲁的建议,(progn (goto-char (point-min)) (keep-lines "pattern"))
您可以标记使用大量的ibuffer不同的标准缓冲液。浏览“标记”菜单,并参见C-hm了解详情。
我很好奇为什么有人低估了这个答案。有什么不正确的吗? – Drew
别担心,我的选票也是低调的。我们是Stack Overflow的受害者,等同于使用水枪进行驱动式拍摄:) – phils