[Vim] 批量替换程序中的字符串

今天代码中有两个宏的名字改了,这两个宏在程序中使用范围比较广,使用频率也很高,一个个手工替换显然不现实。
Source Insight提供了一个改名的功能,可以很方便的完成改名。

不过Easwy在这里要介绍是在Linux下使用Vi来完成改名,实际上也非常容易。Easwy使用的命令如下:

vim `egrep -rl 'AAA|CCC' * |grep -v .svn`
:argdo %s/AAA/BBB/ge | %s/CCC/DDD/ge | w

第一条命令是一个Shell命令,这条命令使用Vi打开当前目录下所有包含AAA或CCC宏的文件。其中egrep查找所有包含AAA和CCC的文件,然后使用带”-v“参数的grep把位于版本控制目录中的文件过滤掉。最后,egrep所找到的文件做为Vim的命令行参数传入。

第二条命令是Vi命令,这条命令把上述文件中所有的AAA替换为BBB,把CCC替换为DDD,并保存文件。想读懂这条Vi命令,请阅读手册”:help argdo

当然,在要修改的文件数目非常多时,最好使用sed之类的流编辑器,此时使用Vim效率会比较低。

更多关于Vim的内容,请关注易水博客上的其它文章。

“[Vim] 批量替换程序中的字符串”的5个回复

  1. @sk
    这个插件应该只对XML文档起作用的,我怀疑你把插件放错了位置,不应该放在~/.vim/plugin目录,而应该放在~/.vim/ftplugin目录

    想输入<abc>,需要输入&lt;abc&gt;

  2. 评论不允许有XML 标签阿!
    那句是:我只要写了《ABC》然后就自动给我出来个《/ABC》
    全角的书名号应该可以吧。

  3. 搭车请教个问题。 我装了xml.vim插件。 编辑XML的时候是挺好用的。
    可是,不知道为什么,在编辑所有文本的时候,我只要写了然后就自动给我出来个,然后我还要手动去把它去掉。 这个是在哪里设置的呢?让它只对某特定类型文件生效?谢谢

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注