qstring删除最后一个字符_vim技巧:删除行首、行末的空白字符,删除空白行

c1e1073df256f337e468a0fca058f965.png

本篇文章介绍 vim 的一些使用技巧:

  • 删除行首、行末的空白字符(空格和Tab字符)
  • 删除只有一个换行符的空行
  • 删除包含空白字符的空白行,但不删除只有一个换行符的空行
  • 删除包含空白字符的空白行和只有一个换行符的空行

删除行首、行末的空白字符(空格和Tab字符)

在 vim 中,可以使用 :%s/^s+// 命令删除行首的所有空白字符。这里说的 “空白字符” 指的是空格和Tab字符,不包括换行符。对该命令的各个参数具体说明如下:

  • :%s:s 是替换命令,可以替换字符串,其基本格式是 :s/from/to/,把 "from" 字符串替换成 "to" 字符串,可以用正则表达式来匹配特定模式。该命令默认对光标所在行生效,而 :%s 表示对整个文件都进行替换。
  • ^
    表示匹配行首,即从行首开始匹配。对这个例子来说,只匹配行首的空白字符,不会匹配单词中间的空白字符和行末的空白字符。
  • s
    表示匹配一个空白字符,也就是空格或Tab字符。
  • +
    表示匹配一个或连续多个跟在它前面的上一个字符,其实是正则表达式+元字符的转义写法。例如,a+ 表示匹配 "a", "aa", "aaaaaa" 等等,s+ 就是匹配一个或多个空白字符,至少要有一个空白字符。
  • /^s+//
    表示要匹配的内容是行首开头的一个或多个空白字符,最后的两个//中间内容为空,即替换后的内容为空,相当于去掉了行首的所有空白字符。

也可以使用 :%s/^s*// 命令来删除行首的所有空白字符,* 表示匹配零个或连续多个跟在它前面的上一个字符。这个命令会匹配到行首没有空格的情况,由于替换后的内容是空,没有影响。

注意:如果写成 :%s/^s// 的形式,只会删除行首的第一个空格,而不能删除多个空格。 写成 :%s/^+s// 的形式也是只能删除行首的第一个空格。

类似的,可以用 :%s/s+$// 命令来删除行末的所有空白字符,$ 表示匹配行末。也可以写成 :%s/s*$// 的形式。

使用 :help :s 命令查看该命令的帮助说明,部分关键内容说明如下:

:[range]s[ubstitute]/{pattern}/{string}/[flags] [count]
For each line in [range] replace a match of {pattern} with {string}.
When [range] and [count] are omitted, replace in the current line only.

使用 :help s 命令查看 s 的含义如下:

s whitespace character: and

使用 :help + 命令查看 + 的含义如下:

+ Matches 1 or more of the preceding atom, as many as possible.

使用 :help /* 命令查看在模式匹配中 * 的含义如下:

* (use * when 'magic' is not set)
Matches 0 or more of the preceding atom, as many as possible.


空白行指的是看起来没有内容的行,但实际上可能会有空格、Tab字符,或者行末的换行符。针对下面几种情况,需要用不同的命令来删除空白行:

  • 删除只有一个换行符的空行
  • 删除包含空白字符的空白行,但不删除只有一个换行符的空行
  • 删除包含空白字符的空白行和只有一个换行符的空行

删除只有一个换行符的空行

在 vim 中,可以使用 :%g/^$/d 命令来删除只有一个换行符的空行。这里的 ^ 表示匹配行首,$ 表示匹配行末,在行首和行末之间没有任何字符,也就是空行。严格来说,这里说的“行末”指的是最后一个换行符前面的一个字符,不包括换行符自身。“空行” 实际上还是包含有一个换行符。

假设文件中有如下的内容:

abcdefghijklmnopqrst

那么执行 :%g/^$/d 命令后的内容如下:

abcdefghijklmnopqrst

可以看到,中间的空行都被删除了。

删除包含空白字符的空白行,但不删除只有一个换行符的空行

有一些空白行看起来没有内容,但可能会包含空格、Tab字符等空白字符,这些行用 :%g/^$/d 命令无法删除,^$ 匹配不到包含空白字符的情况。

可以用 :%g/^s+$/d 命令来删除这些空白行,但不删除只有一个换行符的空行。

这里的 s 表示匹配一个空白字符,+ 表示匹配一个或连续多个跟在它前面的上一个字符,s+ 至少匹配一个空白字符,换行符不属于空白字符,所以不匹配只有一个换行符的情况。

删除包含空白字符的空白行和只有一个换行符的空行

可以使用 :%g/^s*$/d 命令来同时删除包含空白字符的空白行和只有一个换行符的空行。

这里的 * 表示匹配零个或连续多个跟在它前面的上一个字符。对 ^s*$ 模式来说,匹配零个空白字符的情况,就相当于 ^$ 模式,也就是匹配只有一个换行符的空行,所以这个命令可以删除只有一个换行符的空行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值