Vim搜索替换

使用VIM经常会搜索或替换一个单词,或者过滤这个单词的行,或者只保留这个单词的行,等等,一般都是对当前文本里的单词进行操作.

比如有文本如下:

this is a thisisaverylongword text.
this is a thisisaverylongword text.
this is a thisisaverylongword text.
this is a thisisaverylongword text.
this is a thisisaverylongword text.

我们发下有一个很长的单词:thisisaverylongword

如果要搜索,一般命令是: ":/thisisaverylongword<ENTER>"
但是这样输入thisisaverylongword, 这个很长的单词很难输入, 所以有更简单的办法:
把光标置于thisisaverylongword之上, 然后按*键,或者#键即可直接进行搜索.
*键是向下搜索, #键是向上搜索.


如果要替换, 就没有什么快捷键了. 一般的做法是 :%s/thisisaverylongword/ABCD/g"
同样,这还是要输入thisisaverylongword, 更简单的办法应该是:把光标置于thisisaverylongword
之上, 然后
:%s/<CTRL+R><CTRL+W>/ABCD/g 即可.

在命令格式下, CTRL+R代表插入寄存器, CTRL+W代表当前单词.

也可以通过寄存器的方式来使用. 使用v选择一个区域, 然后 "ay , 存取寄存器a

然后 :%s/<CTRL+R>a/ABCD/g

ABCD 可以用同样的方法,使用寄存器.

 

=======================================

 

去掉所有的行尾空格:":%s//s/+$//"."%"表示在整个文件范围内进行替换,"/s"表示
空白字符(空格和制表符),"/+"对前面的字符匹配一次或多次(越多越好),"$"匹配行
尾(使用"/$"表示单纯的"$"字符);被替换的内容为空;由于一行最多只需替换一次,不
需要特殊标志.这个还是比较简单的.


去掉所有的空白行:":%s//(/s*/n/)/+//r/".这回多了"/(","/)","/n","/r"和
"*"."*"代表对前面的字符(此处为"/s")匹配零次或多次(越多越好;使用"/*"表
示单纯的"*"字符),"/n"代表换行符,"/r"代表回车符,"/("和"/)"对表达式进
行分组,使其被视作一个不可分割的整体.因此,这个表达式的完整意义是,把连续的换行符
(包含换行符前面可能有的连续空白字符)替换成为一个单个的换行符.唯一很特殊的地方是,
在模式中使用的是"/n",而被替换的内容中却不能使用"/n",而只能使用"/r".原因是
历史造成的,详情如果有兴趣的话可以查看":help NL-used-for-Nul".


去掉所有的"//"注释:":%s!/s*//.*!!".首先可以注意到,这儿分隔符改用了"!",原
因是在模式或字符串部分使用了"/"字符,不换用其他分隔符的话就得在每次使用"/"字符
本身时写成"//",上面的命令得写成":%s//s*.*//",可读性较低.命令本身倒是相
当简单,用过正则表达式的人估计都知道"."匹配表示除换行符之外的任何字符吧.


去掉所有的""注释:":%s!/s*//*/_./{-}/*//s*! !g".这个略有点复杂了,用到
了几个不太常用的Vim正则表达式特性."/_."匹配包含换行在内的所有字符;"/{-}"表示
前一个字符可出现零次或多次,但在整个正则表达式可以匹配成功的前提下,匹配的字符数越
少越好;标志"g"表示一行里可以匹配和替换多次.替换的结果是个空格的目的是保证像
"intmain()"这样的表达式在替换之后
仍然是合法的.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值