我有一个如下所示的文件
a
b
c
d
e
f
g
h
i
j
k我希望它是:
a
e
i如何在vim中实现?
发布于 2013-06-23 15:28:07
您可以使用以下按键序列来执行此操作:
gg
qa
j
3dd
q
999@a以下是这些命令的含义:
gg # jump to the beginning of the file
qa # start recording a macro in register "a"
j # move down 1 line
3dd # delete 3 lines (including the current one)
q # stop recording the macro
999@a # replay the macro from register "a"如果您的系统中有sed (您使用的是Linux、Mac或windows中的Git Bash ),那么这样做会更干净:
:%!sed -ne 1~4p这会过滤整个缓冲区的内容,通过管道将其发送到sed,然后sed命令从第1行开始每隔4行打印一次输入。
发布于 2013-06-23 16:12:24
从一个answer改编到另一个similar question。
:g/^/+1 d3(您不需要空格,我只是为了清楚起见添加了空格)
/^/匹配任何line.:d都可以接受一个数值参数,该参数指定要删除的行数。因此,该命令转换为:对于另一行之后的每一行,删除包括当前行在内的3行。
另一种解释是:对于每一行,删除接下来的3行。
https://stackoverflow.com/questions/17258544
复制相似问题