本篇文章介绍 vim 的一些使用技巧:正则表达式
删除空白行vim
在 vim 中,能够使用 :%s/^\s\+//
命令删除行首的全部空白字符。这里说的 “空白字符” 指的是空格和Tab字符,不包括换行符。对该命令的各个参数具体说明以下:atom
:%s
:s
是替换命令,能够替换字符串,其基本格式是 :s/from/to/
,把 "from" 字符串替换成 "to" 字符串,能够用正则表达式来匹配特定模式。该命令默认对光标所在行生效,而 :%s
表示对整个文件都进行替换。^
\s
\+
+
元字符的转义写法。例如,a\+
表示匹配 "a", "aa", "aaaaaa" 等等,\s\+
就是匹配一个或多个空白字符,至少要有一个空白字符。/^\s\+//
//
中间内容为空,即替换后的内容为空,至关于去掉了行首的全部空白字符。也能够使用 :%s/^\s*//
命令来删除行首的全部空白字符,*
表示匹配零个或连续多个跟在它前面的上一个字符。这个命令会匹配到行首没有空格的状况,因为替换后的内容是空,没有影响。spa
注意:若是写成 :%s/^\s//
的形式,只会删除行首的第一个空格,而不能删除多个空格。 写成 :%s/^\+\s//
的形式也是只能删除行首的第一个空格。code
相似的,能够用 :%s/\s\+$//
命令来删除行末的全部空白字符,$
表示匹配行末。也能够写成 :%s/\s*$//
的形式。字符串
使用 :help :s
命令查看该命令的帮助说明,部分关键内容说明以下:string
:[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
的含义以下:it
s whitespace character: <Space> and <Tab>
使用 :help \+
命令查看 \+
的含义以下:class
\+ 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
命令来删除只有一个换行符的空行。这里的 ^
表示匹配行首,$
表示匹配行末,在行首和行末之间没有任何字符,也就是空行。严格来讲,这里说的“行末”指的是最后一个换行符前面的一个字符,不包括换行符自身。“空行” 实际上仍是包含有一个换行符。
假设文件中有以下的内容:
abcd efg hijk lmn opqrst
那么执行 :%g/^$/d
命令后的内容以下:
abcd efg hijk lmn opqrst
能够看到,中间的空行都被删除了。
有一些空白行看起来没有内容,但可能会包含空格、Tab字符等空白字符,这些行用 :%g/^$/d
命令没法删除,^$
匹配不到包含空白字符的状况。
能够用 :%g/^\s\+$/d
命令来删除这些空白行,但不删除只有一个换行符的空行。
这里的 \s
表示匹配一个空白字符,\+
表示匹配一个或连续多个跟在它前面的上一个字符,\s\+
至少匹配一个空白字符,换行符不属于空白字符,因此不匹配只有一个换行符的状况。
能够使用 :%g/^\s*$/d
命令来同时删除包含空白字符的空白行和只有一个换行符的空行。
这里的 *
表示匹配零个或连续多个跟在它前面的上一个字符。对 ^\s*$
模式来讲,匹配零个空白字符的状况,就至关于 ^$
模式,也就是匹配只有一个换行符的空行,因此这个命令能够删除只有一个换行符的空行。