s命令(全称为substitute)是一个非常非常非常(省略若干个非常)有用的命令,配合vim神速的正则匹配,绝对是你居家旅行,杀人越货之必备良品。
s命令的格式是:
:[range]s/{pattern}/{string}/[flags] [count]
其中,pattern 是要匹配的正则表达式,如果留空则表示和上一次s命令使用相同的正则表达式。而string则是要替换的字符串。
各个参数的含义请客官自行:h :s
如果要重复上一次的s命令,只需要简单地输入":s", 然后回车。
range | 指的是範圍,1,7 指從第一行至第七行,1,$ 指從第一行至最後一行,也就是整篇文章,也可以 % 代表。還記得嗎? % 是目前編輯的文章,# 是前一次編輯的文章。 |
pattern | 就是要被替換掉的字串,可以用 regexp 來表示。 |
string | 將 pattern 由 string 所取代。 |
c | confirm,每次替換前會詢問。 |
e | 不顯示 error。 |
g | globe,不詢問,整行替換。 |
i |
ignore 不分大小寫。 |
注意g,不加g只替换一个,加g整行替换。
:%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky
n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky
n 为数字,若 n 为 .,表示从当前行开始到最后一行
更多:http://blog.csdn.net/glorin/article/details/6317098
要用好s命令,首先要学会使用正则表达式。
组成正则表达式的常用元素有(来自vim-help手册):
^ 匹配行首,也就是一行里的第一个字符前面的“夹缝”
$ 匹配行尾,也就是一行里的最后一个字符后面的“夹缝”,“夹缝”后面跟着换行符或者文件的结束处。
zs 匹配任何位置,并将匹配起始处置于该处: 下一个字符将是整个匹配的第一个字符。
ze 匹配任何位置,并将匹配结尾处置于该处: 前一个字符将是整个匹配的最后一个字符。
\%$ 匹配文件尾。当用于一个字符串时,匹配字符串结束处。
\%23l 匹配指定的行。
\%23c 匹配指定的列。
\%23v 匹配指定虚拟列。
. 匹配除换行符以外的任何字符
匹配行尾符
s 空白字符; <Space> 和 <Tab>
S 非空白字符:s 之反
d 数位: [0-9]
D 非数位: [^0-9]
x 十六进制数位: [0-9A-Fa-f]
X 非十六进制数位: [^0-9A-Fa-f]
o 八进制数位: [0-7]
O 非八进制数位: [^0-7]
w 单词字符: [0-9A-Za-z_]
W 非单词字符: [^0-9A-Za-z_]
h 单词首字符: [A-Za-z_]
H 非单词首字符: [^A-Za-z_]
a 英文字母字符: [A-Za-z]
A 非英文字母字符: [^A-Za-z]
l 小写字符: [a-z]
L 非小写字符: [^a-z]
u 大写字符: [A-Z]
U 非大写字符 [^A-Z]
* 匹配 0 或更多个前面的匹配原,尽可能多地匹配。
+ 匹配一个或更多前面的匹配原。尽可能多。
= 匹配 0 或 1 个前面的匹配原。尽可能多。
{n,m} 匹配 n 至 m 个前面的匹配原。尽可能多
{n} 匹配 n 个前面的匹配原
{n,} 匹配至少 n 个前面的匹配原。尽可能多
{,m} 匹配 0 至 m 个前面的匹配原。尽可能多
{-n,m} 匹配 n 至 m 个前面的匹配原。尽可能少
{-n} 匹配 n 个前面的匹配原
{-n,} 匹配至少 n 个前面的匹配原。尽可能少
{-,m} 匹配 0 至 m 个前面的匹配原。尽可能少
{-} 匹配 0 个以上前面的匹配原。尽可能少
() 一个由转义的括号括起来的模式。例:"(^a)" 匹配行首的 'a'。
\%() 一个由转义的括号括起来的模式。类似 (),但不算作一个子表达式。这样做允许使用更多的群组,并且处理时会稍快些。
还有许多神奇的东西,请客官自行:h
其次,string有一些特殊的可用元素:
& 替换为完整的匹配