用Emacs批量替换文本文件中的一组字符串

用Emacs批量替换文本文件中的一组字符串,emacs,Emacs,要用其他字符串替换文本文件中出现的所有“foo”,通常的Emacs命令是M-x replace string 下班晚了,我不得不在我的文本文件中替换几个这样的字符串。做 M-x replace string对于我要替换的每个表达式来说都很累人。是否有任何Emacs命令可以“批量替换”一组字符串及其替代项 这可能看起来像 M-x批量替换字符串RET foo1、foo2、foo3、RET bar1、bar2、bar3 RET 其中RET代表按下返回键 现在foo1已经被bar1替换,foo2被bar

要用其他字符串替换文本文件中出现的所有“foo”,通常的Emacs命令是
M-x replace string

下班晚了,我不得不在我的文本文件中替换几个这样的字符串。做
M-x replace string
对于我要替换的每个表达式来说都很累人。是否有任何Emacs命令可以“批量替换”一组字符串及其替代项

这可能看起来像

M-x批量替换字符串RET foo1、foo2、foo3、RET bar1、bar2、bar3 RET
其中RET代表按下返回键


现在foo1已经被bar1替换,foo2被bar2替换,foo3被bar3替换

此代码执行您所需的操作,提示按对输入字符串:

(defun batch-replace-strings (replacement-alist)
  "Prompt user for pairs of strings to search/replace, then do so in the current buffer"
  (interactive (list (batch-replace-strings-prompt)))
  (dolist (pair replacement-alist)
    (save-excursion
      (replace-string (car pair) (cdr pair)))))

(defun batch-replace-strings-prompt ()
  "prompt for string pairs and return as an association list"
  (let (from-string
        ret-alist)
    (while (not (string-equal "" (setq from-string (read-string "String to search (RET to stop): "))))
      (setq ret-alist
            (cons (cons from-string (read-string (format "Replace %s with: " from-string)))
                  ret-alist)))
    ret-alist))
的解决方案是适用的,前提是输入稍微重新排列如下:M-x并行替换RET foo1 bar1 foo2 bar2 foo3 bar3