如何在emacs的所有缓冲区中"M-x替换字符串"?
m x ibuffer
RET t U
但是你可能想要更严格一点,因为如果它不能做替换,它将中止——例如,遇到一个包含匹配文件名的只读磁盘缓冲区。
C-h m在ibuffer中读取模式帮助,并学习如何轻松地标记您感兴趣的缓冲区。
编辑: ibuffer-do-replace-regexp
的非regexp版本可以很容易地通过修改原始定义来编写:
;; defines ibuffer-do-replace-string
(define-ibuffer-op replace-string (from-str to-str)
"Perform a `replace-string' in marked buffers."
(:interactive
(let* ((from-str (read-from-minibuffer "Replace string: "))
(to-str (read-from-minibuffer (concat "Replace " from-str
" with: "))))
(list from-str to-str))
:opstring "replaced in"
:complex t
:modifier-p :maybe)
(save-window-excursion
(switch-to-buffer buf)
(save-excursion
(goto-char (point-min))
(let ((case-fold-search ibuffer-case-fold-search))
(while (search-forward from-str nil t)
(replace-match to-str nil t))))
t))
有很多不同的选择,这取决于你想怎么做。
查看Emacs Wiki中的SearchBuffers。我感兴趣的是moccu -edit和icicles
感谢Trey在这方面提到Icicles缓冲区搜索。
我还要提一下Dired中的Q (dired-do-query-replace
)。非常方便。请注意,您可以使用如下键(还有更多)轻松地在Dired中标记文件集:
-
% m (
dired-mark-files-regexp
)—标记文件名匹配regexp 的文件 - % g (
dired-mark-files-containing-regexp
)——标记文本(内容)匹配regexp 的文件 - * . (
dired-mark-extension
)——标记具有相同扩展名的文件(例如,.el
)
请确保加载标准库dired-x.el
(或者dired-aux.el
)。
我很久以前在一个网站上发现了这个,抱歉我不记得出处了。如果您发现一个只读缓冲区,它将停止,所以要小心。
把它放在你的。emacs
(defun query-replace-in-open-buffers (arg1 arg2)
"query-replace in open files"
(interactive "sQuery Replace in open Buffers: nsquery with: ")
(mapcar
(lambda (x)
(find-file x)
(save-excursion
(beginning-of-buffer)
(query-replace arg1 arg2)))
(delq
nil
(mapcar
(lambda (x)
(buffer-file-name x))
(buffer-list)))))