如何删除Vim/Vi中的行

时间:2020-03-05 15:30:08  来源:igfitidea点击:

大多数Linux发行版和macOS上都预装了Vim或者其前身Vi。
如果您是系统管理员或者只是一个普通的Linux用户,了解Vim的基础知识是很重要的。

在处理文本文件时,通常需要删除一行或者多行。

本文展示了如何在Vim/Vi中删除行。

删除行

在Vim中删除一行的命令是dd。

以下是删除行的分步说明:

  • 按Esc键进入正常模式。

  • 将光标放在要删除的行上。

  • 键入dd并按Enter键删除行。

多次按dd将删除多行。

删除多行

要一次删除多行,请在dd命令前面加上要删除的行数。
例如,要删除五行,请执行以下操作:

  • 按Esc键进入正常模式。

  • 将光标放在要删除的第一行。

  • 键入5dd并按Enter键删除接下来的五行。

删除行范围

删除行范围的语法如下:

:[start],[end]d

例如,要删除从3到5的行,请执行以下操作:

  • 按Esc键进入正常模式。

  • 键入:3,5d,然后按Enter键删除行。

也可以使用以下字符指定范围:

  • . (点)-当前行。

  • $-最后一行。

  • %-所有线路。

以下是几个例子:

  • :,$d-从当前行到文件结 tail。

  • :,1d-从当前行到文件开头。

  • 10美元,从第10行到文件末尾。

删除所有行

要删除所有行,可以使用表示所有行的%符号或者1$范围:

  • 按Esc键进入正常模式。

  • 键入%d并按Enter键删除所有行。

删除包含图案的线

基于特定模式删除多行的语法如下:

:g//d

全局命令(g)告诉delete命令(d)删除包含<pattern>的所有行。

要匹配与模式不匹配的行,请添加感叹号(!)在图案之前:

:g!//d

模式可以是文字匹配或者正则表达式。
以下是一些例子:

正则表达式- :g/foo/d-删除包含字符串"foo"的所有行。
它还删除了"foo"嵌入较大单词的行,例如"football"。

  • :g!/foo/d-删除不包含字符串"foo"的所有行。

  • :g/^#/d-从Bash脚本中删除所有注释。
    图案^#表示每行以#开头。

  • :g/^$/d-删除所有空行。
    模式^$匹配所有空行。

  • :g/^\s*$/d-删除所有空行。
    与前面的命令不同,这也移除了具有零个或者多个空白字符(\s*)的空白行。