Emacs 递归 search/replace on Windows 没有 Cygwin

Emacs recursive search/replace on Windows without Cygwin

为了回答 "where did I also use this identifier?" 问题,我 运行 在 macOS 和 linux 上

dired-maybe-insert-subdir
dired-mark-files-regexp

其次是:

dired-do-find-regexp
dired-do-find-regexp-and-replace

在 Windows 我可以通过使用 Emacs 作为我的 IDE 没有 Cygwin,except 用于 dired递归 search/replace.

Projectile 提供将 search/replace 标识符递归地 而无需 需要 Cygwin?

的命令

在没有 Cygwin 的情况下,任何 其他包是否可以在 Windows 上实现递归 search/replace?

我不关心速度,因为即使在安装 Cygwin 之后,从 Emacs 中递归调用 Cygwin 的 grep 也非常慢。

更新:

递归 search/replace 似乎在两者中都可用 HelmProjectile.

如果为真,那么我的问题是:

  1. 在没有 Cygwin 的情况下 Windows 上是否可以使用此功能?
  2. 我的 .emacs 中的 require 列表已经太多了。什么是递归 search/replace 的轻量级包(在 Windows 上没有 Cygwin)?

澄清:

好的。成功。 [感谢 Drew] 使用 .emacs 只包含 (require 'dired+),我可以在 Windows 上使用 M-+ Q 在标记的文件中搜索和替换 而无需 安装了 Cygwin。我猜这也适用于 linux/macOS,尽管可能不如委派给 grep 快。 ("Act on ALL files [] in and UNDER this dir?" 确认消息将开始变得乏味,但这是一个单独的问题。)

对于本题,有一个问题需要澄清。 dired+ 扩充了内置的 dired 命令系列。有没有办法让它接管普通的dired-do-find-regexp-and-replace?那是因为使用一行 .emacs,并且在目录列表中有一些标记的文件,我得到

File not found - GREP
File not found - -I
...
File not found - NUL
File not found - ;

表示grep仍在被调用。如何判断 dired+ "I'm on Windows and I won't install Cygwin; please take over A and Q?"(默认映射 dired-do-find-regexp 和上述命令)。

社论dired+ 似乎有点不知所措,但如果它解决了这个问题(消除了 Windows 上对 Cygwin 的需求),它将很值得弄清楚如何从通常的 dired 命令移动到 dired+.

我认为您正在寻找一种方法来搜索文件并获取与正则表达式匹配的文件列表。如果 tags-query-replace 在 MS Windows(没有 Cygwin)上适合你,我认为它应该,那么你可以使用命令 diredp-do-query-replace-regexp-recursive,默认绑定到 M-+ Q,可从Dired+.

这会递归地作用于当前 Dired 缓冲区中所有标记的文件,以及缓冲区所有标记子目录中的所有标记文件,依此类推。

使用非负前缀arg,它递归地作用于当前缓冲区中的所有文件和所有子目录中的所有文件,依此类推。 (即忽略任何标记,效果就像所有内容都被标记一样。)


如果您想搜索文件而不是 查找 匹配正则表达式的文件,那么您可以使用命令 diredp-do-isearch-regexp-recursive,绑定到 M-+ M-s a C-M-默认情况下,也可从 Dired+ 获得。要访问的文件的定义相似(所有 Dired+ dired[p]-do...-recursive 命令的行为都相似,而文件被识别为要作用于哪些文件)。这绝对不需要任何 Cygwin 等命令 - 它只是 Isearch。