本文约定:
$ + 命令
表示在普通的bash的命令行下
: + 命令
表示在vim的ex(命令)模式, 按"Ctrl" + ":" 进入
:s + / + 被替换的内容 + / + 替换的内容 ( + 分隔符 + 模式 )
(其中:s(s表示switch,替换))vim
:s / old / new /
(当斜杆为该行的最后一个字符时,可不写)bash
:s / old / new / g
:s命令容许替换串后面带有选项,g选项影响一行中的每一个模式
,不要把它与影响文件中全部行的:g命令混淆.net
经过在:s命令前加上地址前缀,能够把它的范围扩展到多行。例以下面命令把50行到100行的old的每次出现都改成new::50, 100 s / old / new / g
命令行
特别的,从第一行到最后一行的多行即为整个文件
两种方式:1, $s / old / new / g
咱们知道%等价于1,$,因此上行命令也能够这样写::% s / old / new / g
code
在替换命令尾部加上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
来滚动屏幕的。blog
正则替换,匹配字符串能够使用正则,懒得看就用这个:s/pattern/new/
,其它参数和前文一致字符串
更具体的来讲(其实没什么用)
语法格式以下(:g(global全局)
)::g /pattern/s/old/new/g
将会把包含pattern的行中,把全部old替换为new
第一个g表示是在文件的全部行上执行的命令,模式pattern识别要发生替换的行。在那些包含模式pattern的行上,ex将把old替换(s)为new。最后的g表示在该行上进行所有替换。get
若是用来进行搜索的模式与想要修改的模式相同,那么就没必要重复它::g/string/s//new/g
等价于 :g/string/s/string/new/g
还要注意::g/string/s//new/g
也等价于 :% s/string/new/g
能够用第二种方式少输一些字符string
vim的全局替换it