本文出自   http://blog.csdn.net/shuangde800

 

本文是在学习《使用vi编辑器, Lamb & Robbins编著》时在所记的笔记。

 
本文内容:
基本全局替换
确认替换
上下文相关替换
 
本文约定:
$ + 命令 表示在普通的bash的命令行下
:  + 命令 表示在vim的ex(命令)模式, 按"Ctrl" + ":" 进入
------------------------------------------------------------------------------------------------
 

 

替换命令的基本语法

 
在全局替换中,ex编辑器使用指定的字符模式对文件中的每行进行检查。在所有行中发现模式的位置,ex使用新字符串来替换模式。
 
全局替换真正使用的是两个ex命令是 :g(global全局)和:s(switch替换)。
 
替换命令的语法如下:
:s / old / new /  
这将把当前中模式old的第一次出现修改为new。  /(斜杆)是命令不同部分之间的分隔符(当斜杆为该行的最后一个字符时,可不写)
 
下面这种形式的替换命令:
:s / old / new / g
把当前行old的每次出现改为new,而不只是该行的第一个old。:s命令允许替换串后面带有选项,上面语法中的g代表全局(g选项影响一行中的每个模式,不要把它与影响文件中所有行的:g命令混淆)
 
通过在:s命令前加上地址前缀,可以把它的范围扩展到多行。例如下面命令把50行到100行的old的每次出现都改为new:
:50, 100 s / old / new / g
 
下面的命令把整个文件中的old的每次出现都改为new:
:1, $s / old / new / g
我们知道%等价于1,$,所以上行命令也可以这样写:
:% s / old / new / g
 
 

 

确认替换

 
使用搜索替换命令有时候会出错,而得到不想要的结果。所以小心并确认文件中需要修改的内容是一个明智的做法
 
在替换命令尾部加上c (confirm用于确认),在替换每个old前都会提示并确认:
:1, 30 s /old/new/ gc
将会出现提示replace with hehe (y/n/a/q/l/^E/^Y)?  
y替换,n不替换,a替换所有,q放弃,l替换第一个并进入插入模式,^E和^Y是提示你用Ctrl+e或Ctrl+y来滚动屏幕的。
 
 

上下文相关替换

 
除了直接使用一个单词(或短语)替换另一个,还有稍微复杂的全局替换语法。这些语法可以对一个模式进行搜索,一旦找到含有模式的行,就可以使用不同与模式的串进行替换,我们把这种替换叫做上下文相关替换。
 
语法格式如下:
:g /pattern/s/old/new/g    将会把包含pattern的行中,把所有old替换为new
第一个g表示是在文件的所有行上执行的命令,模式pattern识别要发生替换的行。在那些包含模式pattern的行上,ex将把old替换(s)为new。最后的g表示在该行上进行全部替换。
 
如果用来进行搜索的模式与想要修改的模式相同,那么就不必重复它:
:g/string/s//new/g  等价于  :g/string/s/string/new/g
还要注意:
:g/string/s//new/g  也等价于 :% s/string/new/g
可以用第二种方式少输一些字符
 
回车在vim的输入方法是ctrl+V,会得到^,此时再按回车.会得到^M这个就是回车了
因此把全文件所有str换成str回车的语句是:

: ,$ s/str/str^M/g

^M用上面的方法输入

1,$表示从1到最后一行,s是switch,g是global

最新文章

  1. 深入理解ajax系列第一篇——XHR对象
  2. Java细粒度锁实现的3种方式
  3. 启动tomcat时遇到的问题
  4. 浅谈checkpoint与内存缓存
  5. CentOS下搭建nginx+php环境
  6. sqltext的参数化处理
  7. BTrace系列
  8. (40)JS运动之右下角悬浮框
  9. Unable to access the IIS metabase.You do not have sufficient privilege
  10. 2018-2019-2 《网络对抗技术》Exp0 Kali安装 Week1 20165321
  11. python1-集合、函数-(全局变量与局部变量)
  12. 【转】如何判断ARP欺骗?该怎么防护?
  13. web前端监控的三个方面探讨
  14. 如何将爬取的数据写入ES中
  15. Luogu3804 【模板】后缀自动机(后缀自动机)
  16. linux计划任务防暴力破解脚本+免密操作
  17. Firefox table 不居中解决办法 解决火狐层或 table 不居中
  18. Spring Boot + Spring Cloud 实现权限管理系统 后端篇(八):MyBatis分页功能实现
  19. Java学习笔记——IO操作之以图片地址下载图片
  20. MVC及MVC Core在filter中如何获取控制器名称和Action名称

热门文章

  1. JAVA的堆于栈
  2. 原生DOM操作
  3. SQL Server从BAK文件还原新的数据库
  4. 通过淘宝接口免费获取IP地址信息
  5. 取代Ant——Maven简介
  6. 7、java5线程池之单一线程池newSingleThreadExecutor
  7. RHEL7 光盘修复
  8. ACM退役前2个月总结
  9. Android 蓝牙通信——AndroidBluetoothManager
  10. Sublime Text 使用方法