我需要替换目录中所有文件中的某个字符串,该目录中包含需要替换文件的子目录。有没有办法在Emacs中实现这一目标?
答案 0 :(得分:3)
我通常按照@lawlist建议的方式这样做。这是一步一步:
从Melpa或其他方式安装wgrep
。我也推荐
如果您使用The Silver Searcher,则wgrep-ag
和ag
。
使用M-x rgrep
(或M-x ag
)搜索文件并获取列表
可能发生变化的行。
在*grep*
缓冲区中,运行M-x wgrep-change-to-wgrep-mode
。一世
将其绑定到C-x C-q
中的grep-mode-map
。
使用query-replace-regexp
(C-M-%
),或在中进行任何其他编辑
*grep*
缓冲区。
使用*grep*
保存C-x C-s
缓冲区。使用C-c C-k
中止。在您保存更改之前,更改仅存在于*grep*
缓冲区中。您可以多次重新启用wgrep
模式。
grep搜索中的所有文件现在都有开放缓冲区
如果您保存了*grep*
缓冲区,则对它们进行修改。做C-x s
将所有这些保存到磁盘。
答案 1 :(得分:2)
以交互方式执行此操作的方法是获取所有文件的目录列表,标记您感兴趣的文件(可能是整个文件),然后对所有文件运行查询替换。
这样的事情:
find-dired
,使用参数-type f
来获取文件而不是目录(您可以按类型-type f -name "*.txt"
进一步按类型过滤)。这将为您提供所有文件的直接列表。query-replace-regexp
。如果查询替换进展顺利,您可以通过输入!来加速,而无需询问。
答案 2 :(得分:0)
我为此写了一个包。看到: http://ergoemacs.org/emacs/elisp-xah-find-text.html 经过5年的试验,我到达了它的所有方法的错误。
它完全在emacs lisp中实现,不依赖于shell find / grep / sed等。所以在Windows中工作正常。此外,它确实找到/替换一个镜头,彩色报告。所以它很快,让你快速检查结果以防万一。可选择备份。
如果您只想使用普通的emacs,那么: