2013-11-21 60 views

回答

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

然后你可能要想想你是否也想保存修改缓冲区等

+0

我很好奇为什么有人低估了这个答案。有什么不正确的吗? – Drew

+0

别担心,我的选票也是低调的。我们是Stack Overflow的受害者,等同于使用水枪进行驱动式拍摄:) – phils

1

对于更多手动控制的方法,您可以使用ibuffer

  • 的MxibufferRET
  • 马克一些缓冲
  • Ë(keep-lines "pattern")RET

或者,按德鲁的建议,(progn (goto-char (point-min)) (keep-lines "pattern"))

您可以标记使用大量的ibuffer不同的标准缓冲液。浏览“标记”菜单,并参见C-hm了解详情。

相关问题