信息来源:1
适用于 Emacs 专业用户:
- 调用 dired 列出目录中的文件,或者如果需要列出所有子目录,则调用 find-dired。
- 标记您想要的文件。可以通过输入【% m】进行正则表达式标记。
- 按 Q 调用 dired-do-query-replace-regexp。
- 输入您的查找正则表达式和替换字符串。〔☛ 常见的 Elisp 正则表达式模式〕
- 对于每个出现位置,键入 y 进行替换,键入 n 跳过。键入 【Ctrl+g】 以中止整个操作。
- 键入 ! 在当前文件中替换所有匹配项而不询问,键入 N 跳过当前文件的所有可能替换。(N 仅适用于 Emacs 23)
- 键入 Y 替换所有文件而无需再询问。(仅适用于 Emacs 23)
- 调用 ibuffer 列出所有打开的文件。键入【* u】标记所有未保存的文件,键入 S 保存所有标记的文件,键入 D 关闭它们所有文件。
Emacs 初学者的逐步指南
选择目标文件
通过在命令行界面提示符中键入“emacs”来启动 Emacs。 (或者,如果您处于图形用户界面环境中,则双击 Emacs 图标)
选择目录中的文件
首先,您需要选择要进行替换的文件。使用图形菜单〖文件▸打开目录〗。Emacs 会要求您输入一个目录路径。键入目录路径,然后按 Enter。
现在,您将看到文件列表,您需要标记要在其上执行正则表达式查找/替换的文件。通过移动光标到所需文件,然后按 m 来标记该文件。按 u 取消标记。 (要列出子目录,请将光标移动到目录并按 i。子目录的内容将显示在底部。)要通过正则表达式标记所有文件,请键入【% m】,然后输入您的正则表达式模式。例如,如果您想标记所有 HTML 文件,则键入【% m】,然后输入 .html$。 (您可以在 dired 模式下时显示的“标记”图形菜单中找到标记命令列表。)
选择目录及其所有子目录中的文件
如果您想要在包括数百个子目录在内的目录中查找/替换文件,则可以使用以下方法选择所有这些文件。
调用 find-dired。(通过按【Alt+x】调用命令)然后,键入目录名称,例如 /Users/mary/myfiles
注意:如果您在 Unix 非图形文本终端上使用 Emacs,并且【Alt+x】不起作用,则相应的键盘快捷键为【Esc x】。
Emacs将提示您:“运行find(带args):”。如果您需要在所有HTML文件上进行替换,则输入-name“*html”。如果您不关心文件类型,只是想要目录下的所有文件,则给出“-type f”。
现在,按照上述方法标记文件。
交互式查找/替换
现在,您已经准备好执行交互式查找替换了。为简单起见,假设您只想用“super”替换“quick”这个词。现在调用dired-do-query-replace-regexp。它会提示您输入正则表达式字符串和替换字符串。键入“quick”,然后输入“super”。
现在,Emacs将使用您的模式检查文件,并在匹配时停止并向您显示。当这种情况发生时,Emacs会提示您选择是进行更改还是跳过更改。若想进行更改,请键入y。若想跳过,请键入n。如果您只想让Emacs更改当前文件的所有这些更改,请键入!。
如果您想取消整个操作而不保存您所做的任何更改,请键入【Ctrl + g】,然后使用菜单〖文件▸退出Emacs〗退出Emacs。
保存更改后的文件
现在,在通过上述折磨之后,您需要执行的一项任务是保存更改后的文件。
如果您正在使用Emacs版本22或更高版本,则调用ibuffer以进入缓冲区列表模式,然后键入【* u】以标记所有未保存的文件,然后键入S以保存它们所有。 (即shift-s)
如果您正在使用Emacs版本21,则可以执行以下操���:调用list-buffers,然后将光标移动到要保存的文件并键入s。它将标记该文件以供稍后保存操作。键入u以取消标记。完成后,键入x以执行保存所有已标记为保存的文件的操作。 (在Emacs中,已打开的文件称为“缓冲区”。请忽略其他内容。)
除了上面的选项之外,您还可以调用save-some-buffers 【Ctrl + x s】。然后,Emacs将显示每个未保存的文件并询问您是否要保存它。
注意:Emacs的正则表达式与Perl或Python的不同,但非常相似。有关摘要和常见模式,请参见:Emacs Regex。
C-x s !
可以一次性保存所有文件。 - cYrusM-,
继续进行替换。 - tfischbach