[已解决]VIM怎么实现快速替换?
-
- 帖子: 142
- 注册时间: 2008-05-22 9:43
[已解决]VIM怎么实现快速替换?
快速查找我会了,但是快速替换不知道怎么弄,每次都是在命令行里面输入:%s
很麻烦,我想实现替换的2种常用功能:
1、全部替换
2、查找和替换,先查找,由用户决定是否替换
最近一直在找这方面的资料,一直没找到,麻烦高手帮下,非常感谢!
很麻烦,我想实现替换的2种常用功能:
1、全部替换
2、查找和替换,先查找,由用户决定是否替换
最近一直在找这方面的资料,一直没找到,麻烦高手帮下,非常感谢!
上次由 iny 在 2009-05-19 11:06,总共编辑 1 次。
- petrele.chen
- 帖子: 261
- 注册时间: 2008-09-11 17:41
Re: VIM怎么实现快速替换?
占座,同问
- Strange
- 帖子: 1824
- 注册时间: 2006-05-19 9:54
- 来自: Shanghai
Re: VIM怎么实现快速替换?
替换当然要用%s不然用vim还有什么意义
全部替换就是%s/xxx/yyy/g
决定替换只是%s/xxx/yyy/gc
先好好看看%s的帮助文件吧
全部替换就是%s/xxx/yyy/g
决定替换只是%s/xxx/yyy/gc
先好好看看%s的帮助文件吧
ニンニク入れますか?
x60 with gentoo
x60 with gentoo
-
- 帖子: 142
- 注册时间: 2008-05-22 9:43
Re: VIM怎么实现快速替换?
这个我知道,太麻烦了,很多时候替换只是复制和粘贴,不需要重复的输入替换的内容Strange 写了:替换当然要用%s不然用vim还有什么意义
全部替换就是%s/xxx/yyy/g
决定替换只是%s/xxx/yyy/gc
先好好看看%s的帮助文件吧
-
- 帖子: 100
- 注册时间: 2008-09-19 1:03
Re: VIM怎么实现快速替换?
给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
提醒一句,别瞎用“~”命令,那可不代表:~,那个的意思是改变当前字符的大小写……
如果使用上次的搜索串(就是你在: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
提醒一句,别瞎用“~”命令,那可不代表:~,那个的意思是改变当前字符的大小写……
-
- 帖子: 100
- 注册时间: 2008-09-19 1:03
Re: VIM怎么实现快速替换?
最后,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
另外呢,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
-
- 帖子: 142
- 注册时间: 2008-05-22 9:43
Re: VIM怎么实现快速替换?
很感谢,不过命令太多了,感觉还是比较复杂,收藏慢慢学习了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
- lilydjwg
- 论坛版主
- 帖子: 4258
- 注册时间: 2009-04-11 23:46
- 系统: Arch Linux
- 联系:
Re: VIM怎么实现快速替换?
加一点:在命令行里可以用<C-R><C-W>取得光标处的词。详请 :h c_Ctrl-R
-
- 帖子: 142
- 注册时间: 2008-05-22 9:43
Re: VIM怎么实现快速替换?
还有一个问题请教,比如我用n查找到下一个内容,并且已经高亮,请问怎么快速替换这个被查找的内容?(不用再进入命令行,这样太麻烦)
- roylez
- 帖子: 1928
- 注册时间: 2005-10-04 10:59
- 来自: 上海
Re: VIM怎么实现快速替换?
cw呗。
✡ 弄个dropbox空间来备份文件或者做私人代码服务器?
✡ 配置:[url]git://github.com/roylez/dotfiles.git[/url]
✡ 主页:http://roylez.heroku.com
✡ 各种稀奇玩意儿:http://dooloo.info
✡ 配置:[url]git://github.com/roylez/dotfiles.git[/url]
✡ 主页:http://roylez.heroku.com
✡ 各种稀奇玩意儿:http://dooloo.info
-
- 帖子: 100
- 注册时间: 2008-09-19 1:03
Re: VIM怎么实现快速替换?
为啥不直接:%s/.../.../gc呢?非要n?iny 写了:还有一个问题请教,比如我用n查找到下一个内容,并且已经高亮,请问怎么快速替换这个被查找的内容?(不用再进入命令行,这样太麻烦)
如果n到了,按&替换。详见:h &
-
- 帖子: 142
- 注册时间: 2008-05-22 9:43
Re: VIM怎么实现快速替换?
谢谢,我现在用的是/gc,非常好用,我是个懒人,使用工具的目的就是让工具帮我做很多事情starwing 写了:为啥不直接:%s/.../.../gc呢?非要n?iny 写了:还有一个问题请教,比如我用n查找到下一个内容,并且已经高亮,请问怎么快速替换这个被查找的内容?(不用再进入命令行,这样太麻烦)
如果n到了,按&替换。详见:h &

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