如何在 emacs 中的所有缓冲区中"M-x replace-string"?



如何在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)))))

相关内容

  • 没有找到相关文章