最近换了一个新的邮箱 me[at]venmos.com,想把所有源代码中以前的 venmos[at]gmail.com 替换为新的邮箱地址,看了下大约有那么几十个文件,如果用手动的一个个修改就非常麻烦。于是这里就需要用到 Emacs 的批量查找与替换功能。
首先切换到源码项目目录,然后 M-x find-dired
,然后输入.
,表示查找当前目录下的所有文件,回车,在输入-name "*.el"
,表示只查找.el文件。再次回车后,Emacs 会打开一个缓冲区显示出项目中所有的.el后缀的文件,此时你可以直接按t来标记所有文件,或者按m
来一个一个的进行标记,如果标记错误了,可以按u
来取消标记。
标记完所有要进行查找替换的文件之后按Q
快捷键,使用正则表达式来查找与替换被标记文件中的内容。第一次需要输入的是被查找项,这里用 Emacs 正则venmos.....*com$
来匹配venmos[at]gmail.com,回车之后在输入替换项me[at]gmail.com,之后在回车,Emacs 会逐个打开被标记的文件,然后用高亮显示被正则搜索到的要替换的语句,逐个的问你是否要进行替换。在这里你可以按y
来确认替换,否则按n
取消替换,或者按!
强制不提示而进行所有替换。
替换全部完成后还需要 M-x ibuffer
,标记所有要进行保存的被替换过的文件,如find-dired
一样,m
标记单个文件,u
取消标记,t
标记全部,然后按S保存所有被标记缓冲区。最后如果你想关闭这些缓冲区,可以 M-x kill-some-buffers
来逐个关闭所有缓冲区,y
确认关闭,n
取消关闭。
Emacs 的超找与替换功能看似比其他软件繁琐与麻烦许多,实际上这是非常稳健的操作方式,查找与替换的过程非常透明化,你可以详细的看到要被替换的项,仔细谨慎的进行确认替换,之间也有非常多的机会来中断查找替换过程,来恢复文件中被错误替换的内容。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。