“我该怎么做?”;M-x替换字符串“;跨emacs中的所有缓冲区?

“我该怎么做?”;M-x替换字符串“;跨emacs中的所有缓冲区?,emacs,Emacs,如何跨emacs中的所有缓冲区“M-x替换字符串”?M-xibufferRET t U 但您可能希望限制性更强一点,因为如果无法进行替换,它将中止—例如,遇到包含匹配文件名的只读dired缓冲区 ibuffer中的C-hm阅读模式帮助,并学习如何轻松标记您感兴趣的缓冲区 编辑:通过修改原始定义,可以轻松编写非regexp版本的ibuffer do replace regexp: ;;定义ibuffer do replace字符串 (定义ibuffer op替换字符串(从str到str) “在标记

如何跨emacs中的所有缓冲区“M-x替换字符串”?

M-x
ibuffer
RET t U

但您可能希望限制性更强一点,因为如果无法进行替换,它将中止—例如,遇到包含匹配文件名的只读dired缓冲区

ibuffer中的C-hm阅读模式帮助,并学习如何轻松标记您感兴趣的缓冲区

编辑:通过修改原始定义,可以轻松编写非regexp版本的
ibuffer do replace regexp

;;定义ibuffer do replace字符串
(定义ibuffer op替换字符串(从str到str)
“在标记的缓冲区中执行‘替换字符串’。”
(:互动
(let*((从str(从微型缓冲区“替换字符串:”)读取)
(至str)(从微缓冲区读取(从str“替换”concat
“带:”)
(从str到str的列表)
:opstring“在中替换”
:复数t
:修饰语-p:可能)
(保存窗口漫游)
(切换到缓冲区buf)
(省去远足
(转到字符(最小点))
(let((案例折叠搜索ibuffer案例折叠搜索))
(while(从str nil t向前搜索)
(将匹配项替换为str nil t)))
t) )

有很多不同的选择,这取决于你想怎么做


查看Emacs Wiki了解更多信息。感兴趣的是moccur编辑和冰柱。

感谢Trey在这方面的提及

我还要提到dired中的Q(
dired do query replace
)。非常方便。请注意,您可以使用以下键(还有更多键)轻松地在Dired中标记文件集:

  • %m(
    dired mark files regexp
    )--标记名称与regexp匹配的文件
  • %g(
    dired mark files containment 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)))))

谢谢,但这似乎并不完全等同于替换字符串。r-s读取\字面上,U为regexp-syntax。非常正确,它是一个regexp替换函数,并且没有内置字符串变量,因此您需要处理regexp,或者可以定义类似函数。我将在答案中添加一个。另外,
M-x ibuffer RET t Q
将以交互方式执行相同操作,让您有机会确认每个替换。