Vi 编辑器:删除文件中多行的最快方法是什么?

Sir*_*ton 12 vim vi

我想使用 Vi 编辑器删除文件中的多行。请给我想法或建议。

我的目标是这样的:

前:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
.
.
29
30
.
.
Run Code Online (Sandbox Code Playgroud)

后;

1
10
20
30
40
.
.
Run Code Online (Sandbox Code Playgroud)

小智 17

如果您的意思是要保留每 10 行并删除其余行:

%norm 9ddj
Run Code Online (Sandbox Code Playgroud)

解释:

% 整个文件

norm 在“正常模式”下执行以下命令

9dd 删除 9 行

j 向下移动一行(即保留它)

注意:这将删除第一行。

改编自http://www.rayninfo.co.uk/vimtips.html


或者使用全局命令:

  • 复制第一行 ggYP
  • :g/^/+ d9

改编自/sf/ask/136271691/


或者你可以使用awk:

%!awk 'NR \% 10 == 0 || NR == 1'
Run Code Online (Sandbox Code Playgroud)


Sté*_*las 12

:2,$v/0$/d
Run Code Online (Sandbox Code Playgroud)

0从第二行开始删除不以结尾的行。

  • 这,这是聪明的解决方案。我只是添加了一个解释,即 `2,$` 是范围,而 `v/0$/d` 是 `g!` 命令。其中`0$` 是正则表达式,`d` 是将在所有不匹配的行上运行的ex 命令。 (2认同)