只保留1号线每4行并删除其他线路
你可以做到这一点与下面的按键顺序:
gg
qa
j
3dd
q
[email protected]
这是命令的意思是:
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
[email protected] # replay the macro from register "a"
如果你在你的系统sed
(你是在Linux,Mac OS X,或者在Windows中使用Git Bash),那么可以使用它来代替:
:%!sed -ne 1~4p
此过滤器整个缓冲区的内容,将其发送到sed
在管,然后将sed
命令打印从管线1
你能解释为什么我不能使用':g/^/+ 4d'吗? –
不是:s模式'/^/'匹配文件中的每一行,然后我看到发生的是前4行被跳过,然后每一行都被删除,并且我们得到一个错误'E16:Invalid range'。看起来,你放在那里的任何数字只会跳过那么多的起始行,然后删除每一行第二行,我不能告诉你为什么... – janos
是的,希望任何人都能给出你和我的一个很好的答案观察到的。 '前4条线被跳过,然后每2条线被删除,并且我们得到错误E16:无效范围。看起来你放在那里的任何数字只会跳过那么多的起始行,然后删除每行第二行 –
从answer适应于另一similar question开始输入的每4个线。
:g/^/+1 d3
(你不需要的空间,我只是说他们为清楚起见)
-
/^/
任何行相匹配。 -
:d
可以接受一个数字参数,该参数指定要删除多少行,包括当前行。
因此,该命令转换为:对于在另一行之后的每一行,删除包括当前行的3行。
另一种解释是:对于每一行,删除接下来的3行。
阅读[这个答案](http://stackoverflow.com/a/1946770/1084945),然后修改你(下,'3dd','q'),然后运行宏。 – simont
这个问题比另一个更复杂。它不应该被标记为重复。 ':g/^/+ 1d3'与':g/^/+ d'有很大的不同,并没有很好的解释。为了使事情变得更加混乱和误导,':g/^/+ d'回答错误地被标记为最佳答案。 – janos