vim使用进阶 您所在的位置:网站首页 vim删除指定行命令 vim使用进阶

vim使用进阶

2024-07-12 07:34| 来源: 网络整理| 查看: 265

Q1 Vim 删除(包含/不包含)指定字符串的行及统计匹配个数 :g/pattern/d 是找到含有pattern的行, 删之

:v/pattern/d 是找到不含有pattern的行, 删之 使用起来非常方便。

:%s/xxx//gn 统计xxx个数,n表示只报告匹配的个数而不进行实际的替换,详见「:help :v」或「:help :g」

:g/^$/d 删除空格行

:%s/^\s*//g 删除行首空格(注意这是一个替换命令,指将行首的空格替换为无)

:%s/\s*$//g 删除行尾空格(注意这是一个替换命令,指将行尾的空格替换为无)

:%s/ /\r/g 将空格换为回车

:%s/\n/ /g 将回车替换为空格

注意以上2个替换空格为回车的例子。 回车 在第2个可替换中回车是 \r 但是在第1个可替换位置中回车为\n,即它所在替换(使用:%s/xx/xxx/g)的位置不同,符号不一样。

Q2 删除每行中:(冒号)前面的字符串 关于这种操作的核心其实是vim查找替换及正则表达式的详解。 下面这个问题,很好的反映了正则表达式的使用。 问:如何理解下面式子?

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

答:把文中的所有字符串“abc……xyz”替换为“xyz……abc”可以有以上写法

如何使用并理解vim中的正则表达式? 我进行一部分摘抄如下 简单替换表达式

:[range]s/from/to/[flags] range:搜索范围,如果没有指定范围,则作用于但前行。 :1,10s/from/to/表示在第1到第10行(包含第1,第10行)之间搜索替换; :10s/from/to/表示只在第10行搜索替换; :%s/from/to/表示在所有行中搜索替换; 1,$s/from/to/同上。 flags 有如下四个选项:

c confirm,每次替换前询问; e error, 不显示错误; g globle,不询问,整行替换。如果不加g选项,则只替换每行的第一个匹配到的字符串; i ignore,忽略大小写。 这里举个例子。比如我想只替换从34到76行中,所有的ffg1p05v125c替换为ssg0p99vm40。使用如下语句

:34,76s/ffg1p05v125c/ssg0p99vm40/g

注意 这个Q2 可以和Q1联系起来,请思考如何将34-76行中所有的行首加上${path}?

Q3 元字符

元字符说明.匹配任意字符[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匹配字符\s匹配空白字符,等同于[\t]\S匹配非空白字符,等同于[^\t]––

一些普通字符需转意

元字符说明*匹配* 字符.匹配. 字符/匹配 / 字符\匹配 \ 字符[匹配 [ 字符]匹配 ] 字符

表示数量的元字符

元字符说明*匹配0-任意个+匹配1-任意个?匹配0-1个{n,m}匹配n-m个{n}匹配n个{n,}匹配n-任意个{,m}匹配0-m个

表示位置的元字符

元字符说明$匹配行尾^匹配行首匹配单词词尾

以上的解释说明了基本的正则表达式的含义。

问题:删除每行:(冒号)前的所有字符?

解释:.表示匹配任意单个字符 *表示任意个字符, 连起来.*表示匹配任意个任意字符。问题答案: %s/.*://g


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有