Emacs 中的批量查找与替换

指针潮汐
• 阅读 10402

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

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
java中stringBuilder的用法
String对象是不可改变的。每次使用System.String类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。在需要对字符串执行重复修改的情况下,与创建新的String对象相关的系统开销可能会非常昂贵。如果要修改字符串而不创建新的对象,则可以使用System.Text.StringBuilder类。例如,当在一个循
blmius blmius
4年前
linux find 命令查找文件和文件夹
查找目录:find/(查找范围)name'查找关键字'typed查找文件:find/(查找范围)name查找关键字print详解:find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
CuterCorley CuterCorley
4年前
用Python实现批量高效文件处理 解放你的双手
1.批量修改文件后缀名有时候会有大量修改文件名的需求,比如修改文件后缀、文件名加前缀等,如果手动修改,效率极低,这时候可以使用Python来批量修改:pythonimportosdeffile_rename():pathinput("请输入你需要修改的目录(格式如'F:\\test'):")old_suffixinp
Stella981 Stella981
3年前
Emacs在minibuffer里的操作
|Key  |Description                             ||||Cw  |
Stella981 Stella981
3年前
Emacs 27.1 不识别系统字体的解决方案
一直以来习惯在终端上使用Emacs,最近尝试了一下emacslibvterm,于是在GUI下使用了一下,设置字体的时候发现无法识别系统已经安装的字体。系统环境为debianbuster,emacs27.1,从源码编译的版本,惯用的字体为FiraCode(https://www.oschina.net/action/GoToLin
Stella981 Stella981
3年前
POI替换Word中的mark标记(指定字符串)
哈哈,这是鄙人在博客园的第一篇博客,以前都是在简书上码字,废话不多说,直接开工...需求分析:工作中遇到的一个技术需求,需要用java代码操作Word,查找Word中的mark标记,然后进行替换,简而言之就是“替换word中的指定字符串”;解决办法:可以用JACOB和POI来实现,下面我用的是POI操作。用poi必须要用到Apache的jar包,
Stella981 Stella981
3年前
Emacs笔记
Emacs转移HOME配置:(setenv"HOME""path/to/dir")(load"~/.emacs.d/init.el")emacsclient用root权限修改文件:/sudo:root@localhost:/etc/fstab用sudo去编辑文本:(defunsudo()"
十月飞翔 十月飞翔
3年前
服务器更换网卡后到配置集群能ping通该做了bond的机器
拆掉物理机,安装网卡,安装驱动。Linux安装步骤2.1查找硬件查找网卡是否安装成功,同时查看设备号:3.修改/etc/sysconfig/networkscripts/下的ifcfg文件,对应新的网口,创建新的对应文件然后ifdown掉所有的网口,在ifup新网口,ifupbond0,ifupbond0.914.集群其他机器此时应该可以ping通该机器的ip
秋桐 秋桐
2年前
Java 查找和替换 Excel 数据
Excel电子表格是储存和处理数据的不二选择。当数据内容过多时,我们可以通过一些快捷工具来进行操作。“查找和替换”就是其中之一,比起手动搜索和更新数据,这个功能能帮助我们在大型电子表格中快速获取目标数据,并更改为新数据。Microsoft办公软件已提供了该功能,这里就不再赘述。今天想为大家分享的是如何通过代码来查找和替换数据(以Java代码为例)。使用到的是FreeSpire.XLSforJava组件。
绣鸾 绣鸾
1年前
代码文本编辑软件UltraEdit 22 for Mac
是一款功能强大的文本编辑器和源代码编辑器。它具有多种功能,适用于程序员、网站开发人员和其他需要处理大量文本内容的用户。UltraEdit提供了正则表达式搜索和替换功能,可以快速查找和修改文本中的特定内容。它还支持多文件编辑和多窗口布局,方便同时编辑多个文件
Python进阶者 Python进阶者
10个月前
盘点6个Pandas中批量替换字符的方法
大家好,我是Python进阶者。一、前言前几天在Python最强王者群有个叫【dcpeng】的粉丝问了一个关于Pandas中的问题,这里拿出来给大家分享下,一起学习。想问一下我有一列编码为1,2,3,4的数据,如何将1批量换为“开心”,2批量换为“悲伤”这
指针潮汐
指针潮汐
Lv1
晚霞真好,日出日落在我眼里都很美。
文章
5
粉丝
0
获赞
0