当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 12 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : [已解决]VIM怎么实现快速替换?
帖子发表于 : 2009-05-16 20:49 

注册: 2008-05-22 9:43
帖子: 142
送出感谢: 0 次
接收感谢: 0 次
快速查找我会了,但是快速替换不知道怎么弄,每次都是在命令行里面输入:%s
很麻烦,我想实现替换的2种常用功能:
1、全部替换
2、查找和替换,先查找,由用户决定是否替换

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


最后由 iny 编辑于 2009-05-19 11:06,总共编辑了 1 次

页首
 用户资料  
 
2 楼 
 文章标题 : Re: VIM怎么实现快速替换?
帖子发表于 : 2009-05-16 20:53 
头像

注册: 2008-09-11 17:41
帖子: 261
送出感谢: 0 次
接收感谢: 0 次
占座,同问


页首
 用户资料  
 
3 楼 
 文章标题 : Re: VIM怎么实现快速替换?
帖子发表于 : 2009-05-16 21:15 
头像

注册: 2006-05-19 9:54
帖子: 1822
地址: Shanghai
送出感谢: 2
接收感谢: 11
替换当然要用%s不然用vim还有什么意义

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


_________________
ニンニク入れますか?
x60 with gentoo


页首
 用户资料  
 
4 楼 
 文章标题 : Re: VIM怎么实现快速替换?
帖子发表于 : 2009-05-16 21:18 

注册: 2008-05-22 9:43
帖子: 142
送出感谢: 0 次
接收感谢: 0 次
Strange 写道:
替换当然要用%s不然用vim还有什么意义

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


这个我知道,太麻烦了,很多时候替换只是复制和粘贴,不需要重复的输入替换的内容


页首
 用户资料  
 
5 楼 
 文章标题 : Re: VIM怎么实现快速替换?
帖子发表于 : 2009-05-17 10:23 

注册: 2008-09-19 1:03
帖子: 100
送出感谢: 0 次
接收感谢: 1
给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

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


页首
 用户资料  
 
6 楼 
 文章标题 : Re: VIM怎么实现快速替换?
帖子发表于 : 2009-05-17 10:29 

注册: 2008-09-19 1:03
帖子: 100
送出感谢: 0 次
接收感谢: 1
最后,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


页首
 用户资料  
 
7 楼 
 文章标题 : Re: VIM怎么实现快速替换?
帖子发表于 : 2009-05-17 12:46 

注册: 2008-05-22 9:43
帖子: 142
送出感谢: 0 次
接收感谢: 0 次
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


很感谢,不过命令太多了,感觉还是比较复杂,收藏慢慢学习了


页首
 用户资料  
 
8 楼 
 文章标题 : Re: VIM怎么实现快速替换?
帖子发表于 : 2009-05-18 16:13 
头像

注册: 2009-04-11 23:46
帖子: 4030
系统: Arch Linux
送出感谢: 11
接收感谢: 110
加一点:在命令行里可以用<C-R><C-W>取得光标处的词。详请 :h c_Ctrl-R


_________________
我的博客 http://blog.lilydjwg.me/
Dropbox,你值得拥有。
提问的智慧
Arch Linux 中文论坛

我的vimrc: http://git.io/vimrc


页首
 用户资料  
 
9 楼 
 文章标题 : Re: VIM怎么实现快速替换?
帖子发表于 : 2009-05-19 1:35 

注册: 2008-05-22 9:43
帖子: 142
送出感谢: 0 次
接收感谢: 0 次
还有一个问题请教,比如我用n查找到下一个内容,并且已经高亮,请问怎么快速替换这个被查找的内容?(不用再进入命令行,这样太麻烦)


页首
 用户资料  
 
10 楼 
 文章标题 : Re: VIM怎么实现快速替换?
帖子发表于 : 2009-05-19 6:22 
头像

注册: 2005-10-04 10:59
帖子: 1928
地址: 上海
送出感谢: 0 次
接收感谢: 1
cw呗。


_________________
弄个dropbox空间来备份文件或者做私人代码服务器
配置:git://github.com/roylez/dotfiles.git
主页:http://roylez.heroku.com
各种稀奇玩意儿:http://dooloo.info


页首
 用户资料  
 
11 楼 
 文章标题 : Re: VIM怎么实现快速替换?
帖子发表于 : 2009-05-19 8:50 

注册: 2008-09-19 1:03
帖子: 100
送出感谢: 0 次
接收感谢: 1
iny 写道:
还有一个问题请教,比如我用n查找到下一个内容,并且已经高亮,请问怎么快速替换这个被查找的内容?(不用再进入命令行,这样太麻烦)

为啥不直接:%s/.../.../gc呢?非要n?

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


页首
 用户资料  
 
12 楼 
 文章标题 : Re: VIM怎么实现快速替换?
帖子发表于 : 2009-05-19 10:07 

注册: 2008-05-22 9:43
帖子: 142
送出感谢: 0 次
接收感谢: 0 次
starwing 写道:
iny 写道:
还有一个问题请教,比如我用n查找到下一个内容,并且已经高亮,请问怎么快速替换这个被查找的内容?(不用再进入命令行,这样太麻烦)

为啥不直接:%s/.../.../gc呢?非要n?

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


谢谢,我现在用的是/gc,非常好用,我是个懒人,使用工具的目的就是让工具帮我做很多事情 :em06

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


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 12 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 3 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译