最近换了一个新的邮箱 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 的超找与替换功能看似比其他软件繁琐与麻烦许多,实际上这是非常稳健的操作方式,查找与替换的过程非常透明化,你可以详细的看到要被替换的项,仔细谨慎的进行确认替换,之间也有非常多的机会来中断查找替换过程,来恢复文件中被错误替换的内容。


venmos
462 声望15 粉丝

Maccon, Emacscon, Lolicon, ACG. False geek, Looks like a quiet guy. Love open source, Loves photography and outdoor sports. Favorite programming language is Ruby and Lisp.


引用和评论

0 条评论