我在emacs
个缓冲区中打开了很多文件。现在我想在所有这个打开的缓冲区上运行keep-lines
命令。
这样做的步骤是什么?
我正在使用emacs版本24.3。
答案 0 :(得分:1)
迭代所有打开的缓冲区:使用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)))))
然后您可能想要考虑是否还要保存修改后的缓冲区等。
答案 1 :(得分:1)
对于更加手动控制的方法,您可以使用ibuffer
:
ibuffer
RET (keep-lines "pattern")
RET 或者,根据Drew的建议,(progn (goto-char (point-min)) (keep-lines "pattern"))
您可以在ibuffer中使用许多不同的标准来标记缓冲区。浏览“标记”菜单,查看 C-h m 了解详情。