vim-替换
替换
1 | :[range]substitute/from/to/[flags] |
flag
1.对一行中的第一个出现的进行替换:
1 | :s/a/b |
2.对一行中出现的所有a进行替换:
需要使用到g(global)这个参数,有这个参数的话表示对一行的操作
1 | 使用flag:g |
3.对文中的所有a进行替换操作:
需要使用到%,它表示的是此文件名
1 | :%s/a/b/g |
4.查看文中有多少个a
一般来说我们在替换一个东西之前都需要看一下它出现了多少次
1 | 使用flag:n |
5.每次替换之前都让我们确认一次
这样可以选择那些不进行替换
1 | 使用到了flag:c |
6.打印最后修改的行
感觉这个作用不是很大
1 | 使用到了flag:p |
from
from支持正则表达式
1 | eg: |
如果替换中出现了/这个字符,需要转义
1 | :%s/\/home/\/root/g #将所有/home开头的替换为/root |
当然了,其实不需要写这么复杂,有+替代/,这和perl有点像啊
1 | :%s+/home+/root+g |
range
1.没有range,只对当前行操作
1 | :s/a/b/g |
2.指定全文的范围
1 | :%s/a/b/g |
3.某行到某行之间
1 | m到n行,闭区间[m,n] |
4.当前行到最后一行
1 | 当前行使用点,这个点不能少 |
5.支持相对定位
那么这个参考位置就是光标所在的当前行.了
1 | :-5,.s/a/b/g #前五行到当前行的所有a替换为b |
6.还可以通过搜索模式来指定作用范围
这种也类似与第五种,只是这里没有明确的行数,需要它自己去找。在vim中查找使用的就是?(向文章前查找,/向文章后查找),?与/总是成对出现
1 | 这里就是寻找当前行之前以the开头的,以及当前行之后以this开头的范围间的haha并替换为hehe |
7.混搭5与6中的搜索定位功能
1 | 这样加上数字之后表示不替换匹配到的行本身 |
8.还可以通过visual模式去指定要操作的行
1 | shift+v选择好范围后,使用冒号,范围则已经指定好了 |
这里是使用到了标记来指定范围,所以,以后我们同样可以使用自己的标记来指定范围。有点秀啊这个
9.第五点是手动输入开始结束位置,这个更厉害
当然默认是以当前行为一个开始范围,好像没有向文章开头的快捷做法,因为-已近被占用了
1 | 当前行之后的五行 |
全局命令:global
前面的替换都是通过指定范围(数字或者匹配),然后在进行替换这些操作
但是global不仅做到了这些,它默认是作用域全文,首先通过匹配到某些行,然后对这些行进行操作。相比于之前的多了一个定位。针对的不是范围操作,而是找到指定行。
1 | :[range]global/{pattern}/{command} |
1 | eg: |