VIM中的替换命令使用

vim替换语法

:[range]s/{目标}/{替换}/[flag]

分隔符可以使用/#+三种,替换命令中默认s后面的第一个字符为分隔符

[range]

不写range:默认为光标所在的行
.:光标所在的行
n:第n行
$:最后一行
'a:标记a所在的行(之前要使用ma做过标记)
.+1:当前光标所在行的下面一行
$-1:倒数第二行(这里说明我们可以对某一行加减某个数值来取得相对的行)
m,n:第m~n行
%:所有行(与 1,$ 等价)
?chapter?:从当前位置向上搜索,找到的第一个chapter所在的行(其中chapter可以是任何字符串或者正则表达式)
/chapter/:从当前位置向下搜索,找到的第一个chapter所在的行(其中chapter可以是任何字符串或者正则表达式)

注意:上面的所有用于range的表示方法都可以通过 +、- 操作来设置相对偏移量。

[flag]

 c: confirm,每次替换前询问;
 e: error, 不显示错误;
 g: globle,不询问,整行替换。如果不加g选项,则只替换每行的第一个匹配到的字符串;
 i: ignore,忽略大小写。

注意:这些选项可以合并使用,如 cgi 表示不区分大小写,整行替换,替换前询问

[正则表达]

数量

*        匹配0-任意个
\+        匹配1-任意个
\?        匹配0-1个
\{n,m}    匹配n-m个
\{n}      匹配n个
\{n,}     匹配n-任意个
\{,m}     匹配0-m个

位置

$       匹配行尾
^       匹配行首
\<      匹配单词词首
\>      匹配单词词尾

元字符

.               匹配任意字符
[abc]           匹配方括号中的任意一个字符,可用-表示字符范围。如[a-z0-9]匹配小写字母和数字
[^abc]          匹配除方括号中字符之外的任意字符
\d              匹配阿拉伯数字,等同于[0-9]
\D              匹配阿拉伯数字之外的任意字符,等同于[^0-9]
\x              匹配十六进制数字,等同于[0-9A-Fa-f]
\X              匹配十六进制数字之外的任意字符,等同于[^0-9A-Fa-f]
\l              匹配[a-z]
\L              匹配[^a-z]
\u              匹配[A-Z]
\U              匹配[^A-Z]
\w              匹配单词字母,等同于[0-9A-Za-z_]
\W              匹配单词字母之外的任意字符,等同于[^0-9A-Za-z_]
\t              匹配<TAB>字符
\s              匹配空白字符,等同于[\t]
\S              匹配非空白字符,等同于[^\t]

注意:在正则式中以 \(\) 括起来的正则表达式,在后面使用的时候可以用 \1\2 等变量来访问
\(\)中的内容。

vim替换命令详解

vim在命令模式下

1、替换某一行字符

:s/abc/def 替换当前行第一个 abc 为 def(等效于:.s/abc/def/)
:s/abc/def/g 替换当前行所有的 abc 为 def(等效于:.s/abc/def/g)
:ns/abc/def 替换第n行第一个 abc 为 def
:$s/abc/def 替换最后一行第一个 abc 为 def

2、替换某几行的字符

:.,+5s/abc/def 替换当前行及以下5行的第一个 abc 为 def
:.,+5s/abc/def/g 替换当前行及以下5行的所有的 abc 为 def
:1,.s/abc/def/g 替换第一行到当前行的所有的 abc 为 def
:m,ns/abc/def/g 替换第m行到第n行的所有的 abc 为 def
:1,$s/abc/def/g 替换第一行到最后一行的所有的 abc 为 def

3、替换所有的字符

:%s/abc/def 替换所有行的第一个 abc 为 def
:%s/abc/def/g 替换所有的 abc 为 def

正则表达

  • 删除以空格或TAB开头到结尾的空行:
    %s/^[ |\t]*$// 或者 g/^[ |\t]*$/d

  • 把文中的所有字符串“abc……xyz”替换为“xyz……abc”可以有下列写法

    :%s/abc\(.*\)xyz/xyz\1abc/g
    :%s/\(abc\)\(.*\)\(xyz\)/\3\2\1/g

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值