最后更新于 .

    OK,继续我们的Vim正则查找替换系列~~,这一次主要有两个技巧,第一个是=的整理,第二个是vim实现固定区域的查找替换。     呃,不知道到底是带给我们的这个习惯了,似乎大家在写int a=1;的时候都喜欢在=左右都加上两个空格,编程int a = 1;但是有时候面对别人写的代码,并不是这样的风格就会很想帮他改一下,怎么办呢?vim呗~~     命令如下:    

:%s/\s*=\s*/ = /g

   

这样的话,vim就会自动帮你完成啦,当然看语句也能看出来,他是只要匹配到=就会帮你自动编程 = ,所以对于那些注释和字符串中的=也有可能帮你误转,笔者没有想到什么好的方法,你可以在g后面加个c,即    

:%s/\s*=\s*/ = /gc

   

这样每次替换都会要求你确认,呵呵,不过也有点麻烦哦……    

好啦,接下来是vim中的区域查找替换,vim这么强大的工具当然是支持只替换一部分文本啦,那么怎么实现呢?       

:'a,'bg/fred/s/dick/joe/g  

这是Best of VIM Tips里面的一个例子,解释一下:     'a和'b   指定范围(注意,前面是单引号,不是1左边那个).这个范围是用ma和mb指定的,可以用m{a-z}指定26个位置,以后用'{a-z}就可以直接跳到这个位置,其实就是书签的功能,查看所有的书签,可以用:marks     而这个语句就是实现了,在a和b标签之间,对包含fred的行中的dick替换成joe     如 a标签在第4行,b标签在第9行,那么结果如下:    

vim区域查找替换2

OK,这次的介绍就到此为止啦~~~  

Pingbacks

Pingbacks已打开。

Trackbacks

引用地址

评论

  1. 欧阳西风

    欧阳西风 on #

    博主好,有个vim的问题请教一下:像如下的文本:HelloWorld HelloWorldDoSomethingSpecial DoSomethingSpecialEnglishConditionAction EnglishConditionActionThisIsASentenceForTesting ThisIsASentenceForTesting如果我想实现每一行的第一部分更改为下划线连接的单词,第二部分不变,用vim的话应该怎么来完成?如下:HELLO_WORLD HelloWorldDO_SOMETHING_SPECIAL DoSomethingSpecialENGLISH_CONDITION_ACTION EnglishConditionActionTHIS_IS_A_SENTENCE_FOR_TESTING ThisIsASentenceForTesting先谢谢了

    Reply

发表评论