信息来源
对于emacs pro用户:
Call dired to list files in dir, or call find-dired if you need all subdirectories.
Mark the files you want. You can mark by regex by typing 【% m】.
Type Q to call dired-do-query-replace-regexp.
Type your find regex and replace string. 〔☛ common elisp regex pattern〕
For each occurrence, type y to replace, n to skip. Type 【Ctrl+g】 to abort the whole operation.
Type ! to replace all occurrences in current file without asking, N to skip all possible replacement for rest of the current file. (N is emacs 23 only)
To do the replacement on all files without further asking, type Y. (Emacs 23 only)
Call ibuffer to list all opened files. Type 【* u】 to mark all unsaved files, type S to save all marked files, type D to close them all.
Emacs初学者逐步指南
选择目标文件
在命令行界面提示符中输入“emacs”启动emacs。(或者,如果您在图形用户界面环境中,双击Emacs图标)
选择目录中的文件
首先,您需要选择要进行替换的文件。使用图形化菜单〖文件回到打开目录〗。Emacs将询问您的目录路径。输入目录路径,然后按Enter。
Now, you will be shown the list of files, and now you need to mark the files you want the regex find/replace to work on. You mark a file by moving the cursor to the file you want, then press m. Unmark it by pressing u. (To list subdirectories, move your cursor to the directory and press i. The sub-directory's content will be listed at the bottom.) To mark all files by a regex, type 【% m】, then type your regex pattern. For example, if you want to mark all HTML files, then type 【% m】 then .html$. (You can find a list of the mark commands in the graphical menu “Mark” (this menu appears when you are in the dired mode).)
选择目录及其所有子目录下的文件
如果你想要查找/替换目录中的文件,包括数百个子目录,这里有一个方法来选择所有这些文件。
find-dired打电话。(通过按【Alt+x】调用命令)然后输入目录名⁖/Users/mary/myfiles
注意:如果您在unix非图形文本终端上使用emacs,并且如果【Alt+x】不起作用,则等效的击键为【Esc x】。
Emacs会提示“Run find (with args):”。如果您需要对所有HTML文件进行替换,则键入-name "* HTML "。如果你不关心文件类型,而只是关心目录下的所有文件,那么给" type f "。
现在,按照上面的描述标记文件。
交互式查找/替换
现在,您已经准备好执行交互式查找替换。为了简单起见,假设你只想用“super”替换“quick”这个词。现在,调用dired-do-query-replace-regexp。它将提示您输入正则表达式字符串和替换字符串。输入“quick”,输入,然后输入“super”。
现在,emacs将使用您的模式并检查文件,并在出现匹配时停止并显示给您。当发生这种情况时,emacs将提示您,您可以选择进行更改或跳过更改。要进行更改,请输入y。要跳过,请输入n。如果只是想让emacs继续对当前文件进行所有此类更改,请输入!。
如果想要取消整个操作而不保存所做的任何更改,输入【Ctrl+g】,然后使用菜单〖File exit emacs〗退出emacs。
保存更改的文件
现在,在经历了上述磨难之后,您还需要执行另一个步骤,那就是保存更改的文件。
如果您使用的是emacs版本22或更高版本,那么调用ibuffer进入缓冲区列表模式,然后键入【* u】标记所有未保存的文件,然后键入S保存所有文件。(shift-s)
如果您使用的是emacs版本21,那么您可以这样做:调用list-buffers,然后将光标移动到您想要保存的文件并键入s。它将标记该文件以供以后保存操作。输入u取消标记。一旦完成,输入x来执行保存所有标记为保存的文件。(在emacs中,打开的文件称为“buffer”。忽略其他事情。)
除了上述选项,您还可以调用save-some-buffers【Ctrl+x s】。然后emacs将显示每个未保存的文件,并询问您是否希望保存它。
注意:emacs的regex与Perl或Python的regex不同,但相似。有关摘要和常见模式,请参见:Emacs Regex。