vim替换
替换
本文中设待替换的内容为xxx,替换后的内容为hhh。
注意:其中所有的
/
都可以换为#
或者+
,但是在单个最短指令中要统一。比如g/xxx/ s//hhh/g可以写为:g/xxx/ s##hhh#g 、g+xxx+ s//hhh/g 、 g#xxx# s++hhh+g等形式。因为实质上,g/xxx/ s//hhh/g相等于两条指令,g/xxx/和s//hhh/g。其中,g/xxx/表示列出有xxx的行,s//hhh/g表示替换g/xxx/命令查找到的内容。
参数
[range]s/[before]/[after]/[ option]
- range:需要替换的范围,缺省值为当前行,相当于.
- before:待替换的内容,缺省值为最近一次查找操作查找的内容,比如g/xxx/中的xxx或者/ok中的ok
- after:替换后的内容,缺省值为空,即用空值覆盖原始内容
- option:选项,选择替换的方式,缺省值为仅对一行中首次出现的before进行替换
range
单行
[range] = . | num | $ | 'mark
- .:表示当前行,比如:s/xxx/hhh/ = .s/xxx/hhh/ 表示将光标所在行的第一个xxx替换为hhh
- num:表示行号,比如:2s/xxx/hhh/ 表示将第二行的第一个xxx替换为hhh
- $:表示最后一行,比如:$s/xxx/hhh/ 表示将最后一行的第一个xxx替换为hhh
- 'mark或者'flag:表示标记过的行,比如:'as/xxx/hhh/ 表示将标记a所在的行(之前要使用ma做过标记)中第一个xxx替换为hhh
用法示例:
- .+1s/xxx/hhh/ 将当前光标所在行的下面一行中第一个xxx替换为hhh
多行
[range] = [start_ine],[end_line] or /[before]/ or ?[before]?
[start_ine],[end_line]
[start_ine] = . | num | $ | 'mark | [start_ine]±num
[end_line] = . | num | $ | 'mark | [end_line]±num
start_line:起始范围,end_line:终止范围。其中. | num | $ | 'mark的含义同单行章节。
用法示例:
2,6s/xxx/hhh/ 将第二行到第六行中每一行的第一个xxx替换为hhh
2,s/xxx/hhh/ = 2,.s/xxx/hhh/ 将第二行到光标所在行中每一行的第一个xxx替换为hhh
,6s/xxx/hhh/ = .,6s/xxx/hhh/ 将光标所在行到第六行中每一行的第一个xxx替换为hhh
,s/xxx/hhh/ = s/xxx/hhh/ = .s/xxx/hhh/ 表示将光标所在行的第一个xxx替换为hhh
'as/xxx/hhh/ 将标记a所在的行(之前要使用ma做过标记)中第一个xxx替换为hhh
'a,'bs/xxx/hhh/ 将标记a所在的行到标记b所在的行范围中的每一行的第一个xxx替换为hhh
.+1,$-1s/xxx/hhh/ 将当前光标所在行的下面一行与倒数第二行范围中的每行中第一个xxx替换为hhh
/[before]/ or ?[before]?
/[before]/ :表示向下查找,找到首次出现before内容的行(不包括光标所在行)
?[before]?:表示向上查找,找到首次出现before内容的行(不包括光标所在行)
注意:以上before均可取正则表达式
用法示例:
- /xxx/s//hhh/ 从光标所在行向下查找首次出现xxx内容的行,并将该行中第一个xxx替换为hhh
- ?xxx?s//hhh/ 从光标所在行向上查找首次出现xxx内容的行,并将该行中第一个xxx替换为hhh
- /aaa/s/xxx/hhh/ 从光标所在行向下查找首次出现aaa内容的行,并将该行中第一个xxx替换为hhh
- /xxx/s//hhh/g 从光标所在行向下查找首次出现xxx内容的行,并将该行中所有的xxx替换为hhh
全文
[range] = % or gsymbol[before]symbol or 1,$
gsymbol[before]symbol:表示全文查找出现before内容的行。其中,symbol可取:/ | ? | # | +
用法示例:
- %s/xxx/hhh 将所有行中每行第一个xxx替换为hhh
- %s/xxx/hhh/g 将文中所有的xxx替换为hhh
- g/xxx/ s//hhh/ 将所有行中每行第一个xxx替换为hhh
- g/xxx/ s//hhh/g 将文中所有的xxx替换为hhh
option
- g:对一行中所有出现的before均替换(
global) - c:在替换前要求用户确认
- e:忽略执行过程中的错误
- :不写,表示缺省即仅对一行中首次出现的before进行替换
注意:上面的所有option都可以组合起来使用,比如 gc 表示对指定范围内的所有匹配项进行替换,并且在每一次替换之前都会要求用户确认。
用法示例:
无