分页: 1 / 1

[已解决]VIM怎么实现快速替换?

发表于 : 2009-05-16 20:49
iny
快速查找我会了,但是快速替换不知道怎么弄,每次都是在命令行里面输入:%s
很麻烦,我想实现替换的2种常用功能:
1、全部替换
2、查找和替换,先查找,由用户决定是否替换

最近一直在找这方面的资料,一直没找到,麻烦高手帮下,非常感谢!

Re: VIM怎么实现快速替换?

发表于 : 2009-05-16 20:53
petrele.chen
占座,同问

Re: VIM怎么实现快速替换?

发表于 : 2009-05-16 21:15
Strange
替换当然要用%s不然用vim还有什么意义

全部替换就是%s/xxx/yyy/g
决定替换只是%s/xxx/yyy/gc
先好好看看%s的帮助文件吧

Re: VIM怎么实现快速替换?

发表于 : 2009-05-16 21:18
iny
Strange 写了:替换当然要用%s不然用vim还有什么意义

全部替换就是%s/xxx/yyy/g
决定替换只是%s/xxx/yyy/gc
先好好看看%s的帮助文件吧
这个我知道,太麻烦了,很多时候替换只是复制和粘贴,不需要重复的输入替换的内容

Re: VIM怎么实现快速替换?

发表于 : 2009-05-17 10:23
starwing
给LZ一些建议吧。

如果使用上次的搜索串(就是你在:g, :s, /, ?里面使用的),可以直接忽略掉第一个参数,比如,先查找再替换:
/foobar
:%s//blabla/g

按#和*可以向上或者向下查找当前光标处的关键字,这时的效果等同/和?,所以可以这样:
当光标在“foobar”上的时候,按*
:%s//blabla/g

如果要提示,在最后的flags里面加入c标记,如下:
:%s//blabla/gc

如果你要直接删掉替换的文本,可以:
:%s/foobar//g
当然配合上面的使用:
当光标在“foobar”上时,按*
:%s///g

最后介绍两个常用命令。一个是&:
:&
它相当于你上次输入的s的内容。你还可以附加标志位。比如,第一次可以只替换一个,
甚至只是确认一下:
:%s/foobar/blabla/gn
第二次就可以真的替换了:
:%&g
是不是简单很多呢?
:&命令是不会保持跟上次一样的标志位的,当然这也是你期望的行为,那么如果有标志位
呢?
:&&
这样就可以了。
如果要使用最近的搜索来做替换,那么直接:&r就可以了。参看:s_flags

第二个命令是:~,它相当于:&r,使用最近的模式,和最近的substitute的替代串。同样
可以带标记。

如果你想使用:&,不带任何标记(就是说,替换掉当前行的第一个匹配),可以直接输入
&,它是一个命令作用就相当于:&不过我不常用的说,我很少用&不改变标志位的= =

所以呢,我常用的是g&,它相当于:&g

提醒一句,别瞎用“~”命令,那可不代表:~,那个的意思是改变当前字符的大小写……

Re: VIM怎么实现快速替换?

发表于 : 2009-05-17 10:29
starwing
最后,LZ可能觉得要替换任意内容(而不是一个单词)可能会很麻烦。这里还有一个窍门。你可以用v命令选择你要替换的内容,然后按y复制。输入:%s/,这时按<C-R>",你刚才抽取的内容就会被放在这里。这样就不需要自己输入搜索的文本了。别的地方也是可以这样的。

另外呢,y命令可以带寄存器。比如我要把foo foo换成bar bar,我用v命令选中foo foo,然后"ay把它抽取到a寄存器里面,然后把bar bar抽取到s寄存器里面,接着就可以直接:%s/<C-R>a/<C-R>s/g了。

上面的<C-R>是指Ctrl+R

Re: VIM怎么实现快速替换?

发表于 : 2009-05-17 12:46
iny
starwing 写了:最后,LZ可能觉得要替换任意内容(而不是一个单词)可能会很麻烦。这里还有一个窍门。你可以用v命令选择你要替换的内容,然后按y复制。输入:%s/,这时按<C-R>",你刚才抽取的内容就会被放在这里。这样就不需要自己输入搜索的文本了。别的地方也是可以这样的。

另外呢,y命令可以带寄存器。比如我要把foo foo换成bar bar,我用v命令选中foo foo,然后"ay把它抽取到a寄存器里面,然后把bar bar抽取到s寄存器里面,接着就可以直接:%s/<C-R>a/<C-R>s/g了。

上面的<C-R>是指Ctrl+R
很感谢,不过命令太多了,感觉还是比较复杂,收藏慢慢学习了

Re: VIM怎么实现快速替换?

发表于 : 2009-05-18 16:13
lilydjwg
加一点:在命令行里可以用<C-R><C-W>取得光标处的词。详请 :h c_Ctrl-R

Re: VIM怎么实现快速替换?

发表于 : 2009-05-19 1:35
iny
还有一个问题请教,比如我用n查找到下一个内容,并且已经高亮,请问怎么快速替换这个被查找的内容?(不用再进入命令行,这样太麻烦)

Re: VIM怎么实现快速替换?

发表于 : 2009-05-19 6:22
roylez
cw呗。

Re: VIM怎么实现快速替换?

发表于 : 2009-05-19 8:50
starwing
iny 写了:还有一个问题请教,比如我用n查找到下一个内容,并且已经高亮,请问怎么快速替换这个被查找的内容?(不用再进入命令行,这样太麻烦)
为啥不直接:%s/.../.../gc呢?非要n?

如果n到了,按&替换。详见:h &

Re: VIM怎么实现快速替换?

发表于 : 2009-05-19 10:07
iny
starwing 写了:
iny 写了:还有一个问题请教,比如我用n查找到下一个内容,并且已经高亮,请问怎么快速替换这个被查找的内容?(不用再进入命令行,这样太麻烦)
为啥不直接:%s/.../.../gc呢?非要n?

如果n到了,按&替换。详见:h &
谢谢,我现在用的是/gc,非常好用,我是个懒人,使用工具的目的就是让工具帮我做很多事情 :em06

那个&我还没看懂,我要好好的看你的文章先