当前位置: 首页 > Linux

vim技巧:删除行首和行尾的空白字符,删除空行

时间:2023-04-06 03:32:02 Linux

本文介绍一些vim使用技巧:删除行首和行尾的空白字符(空格和制表符),删除空行,只删除一个换行符Emptylineof删除包含空白字符的空行,但不删除只有一个换行符的空行删除包含空白字符的空行和只有一个换行符的空行行首和行尾在vi??m中,可以使用:%s/^\s\+//命令删除行首的所有空白字符。这里所说的“空白字符”是指空格和制表符,不包括换行符。该命令的参数解释如下::%s:s是替换命令,可以替换字符串,其基本格式为:s/from/to/,将"from"字符串替换为"to"字符串,正则表达式可以用来匹配特定的模式。该命令默认在光标所在行生效,:%s表示替换整个文件。^表示匹配行首,即从行首开始匹配。对于这个例子,只会匹配行首的空白字符,不会匹配单词中间的空白字符和行尾的空白字符。\s表示匹配一个空白字符,即一个空格或一个制表符。\+表示匹配前面的一个或多个连续字符,其实就是正则表达式+元字符转义。例如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]对于[range]中的每一行,用{string}替换{pattern}的匹配项。当省略[range]和[count]时,只替换当前行。使用:help\s命令查看\s的含义如下:s空白字符:使用:help\+命令查看\+的含义如下:\+匹配1or更多前面的原子,尽可能多。使用:help/*命令查看模式匹配中*的含义如下:*(当没有设置'magic'时使用\*)尽可能匹配0个或多个前面的原子。删除空行空行是指看似没有内容,但实际上可能有空格和制表符,或者行尾有换行符的行。对于以下几种情况,需要使用不同的命令来删除空行:删除只有一个换行符的空行删除包含空白字符的空行,但是不要删除只有一个换行符的空行delete包含空白字符的空行和Ablanklinewithonlyonenewlinedeletesablanklinewithonlyonenewline在vim中,可以使用:%g/^$/d命令删除只有一个换行符的空行。这里^表示匹配行首,$表示匹配行尾,行首和行尾之间没有字符,即空行。严格来说,这里的“行尾”是指最后一个换行符之前的字符,不包括换行符本身。“空行”实际上仍然包含换行符。假设文件内容如下:abcdefghijklmnopqrst然后执行:%g/^$/d命令,内容如下:abcdefghijklmnopqrst可以看到中间的空行已经被删除了。删除包含空白字符的空行,但不要删除只有一个换行符的空行有些空行看似没有内容,但可能包含空格、Tab字符等空白字符。这些行被使用:%g/^$/d命令不能删除,^$不匹配空白字符。这些空行可以用:%g/^\s\+$/d命令删除,但是只有一个换行符的空行不会被删除。这里的\s表示匹配一个空白字符,\+表示匹配它前面的一个或多个连续字符,\s\+至少匹配一个空白字符,换行符不是空白字符,所以只有一种换行符不匹配的情况。删除包含空白字符的空行和只有一个换行符的空行可以使用:%g/^\s*$/d命令同时删除包含空白字符的空行和只有一个换行符的空行。这里的*表示匹配它后面的零个或多个连续的前一个字符。对于^\s*$模式,匹配零个空白字符等同于^$模式,即只匹配一个空行和一个换行符,所以该命令可以删除一个只有一个换行符的空行。