global命令介绍
global 命令的执行原理和执行流程是:global 命令会在指定的 range 范围内,标记所有匹配 pattern 的文本行,并对匹配的行逐行执行 Ex 命令。
Vim global命令形式为 :[range]g[lobal][!]/{pattern}/[cmd]
,
用于指示Vim在 [range] 界定范围内对 (不) 匹配模式 {pattern} 的文本行执行 Ex 命令 [cmd]。
range
表示操作范围,Vim:global
命令的默认作用范围是整个文件 (用%表示)
!
表示反转:global
命令的行为,将在没有匹配到指定模式的行上执行 [cmd]
pattern
指定:global
命令要匹配的目标模式,若将该域留空,Vim会自动使用当前(最近一次)的查找模式
cmd
除:global
命令之外的任何 Ex 命令,Vim缺省使用:p
)
命令行模式下的global命令
Vim 命令行模式下的 global命令 (缩写形式 :g
) :
可用于在某个指定模式的所有匹配行上运行可执行的 Ex 命令,这里提到的指定模式便可以使用正则表达式。
例如
可以在 Vim 中执行命令
:g/^\s*$/d
来删除 Vim 当前打开文件中的所有空白行;如果要删除以 // 开头的所有行,可以执行命令
:g/^\/\/.*$/d
Vim global命令使用技巧
删除含有含有指定字符串的行
命令行模式下执行
:g/STRING/d
使用 global 删除空白行
匹配空白行的正则表达式可以用 ^\s*$
表示
(
^
表示行首,$
表示行尾,\s
表示任何空白字符,包括空格、制表符、换页符等,*
表示匹配零次或多次)。
因此,vimi命令模式下,使用 global 命令删除Vim打开文件中所有空白行的命令为 :g/^\s*$/d
shell命令删除空白行
Linux系统下存在不少使用 shell 命令删除文件空白行的方法。例如,cat -s test.txt
可将 test.txt 文件中的连续空白行替换为一个空白行。而 grep -v '^\s*$' test.txt
命令可用于过滤 test.txt 文件中的所有空白行。
在 Vim 的命令行模式中,在命令前加一个 !
前缀 (参见 :h :!
) 就可以调用外部的shell程序。
例如,如果想在Vim内部查看当前目录下的所有文件,可以在Vim命令行模式下运行命令 :!ls
因此,可以在Vim命令行模式下执行 :%!grep -v '^\s*$'
命令来删除Vim当前打开文件中的所有空白行。
使用替换命令substitute删除Vim文件空白行
Vim命令行模式下的 :substitute
命令 (缩写形式 :s
) 可以将指定的字符替换成其他目标字符,其命令格式为 :[range]s/源字符串/目标字符串/[option]
。
删除空白行可以理解为一种替换类型的操作。为了在全文范围内替换(删除)所有空白行,可以使用
:%s/^\s*$\n//g
命令。空白行用 ^\n*$表示;