在Vim中如何做:
之前:
aaa
bbb
ccc
ddd
eee
fff
后:
aaa
ccc
eee
在Vim中如何做:
之前:
aaa
bbb
ccc
ddd
eee
fff
后:
aaa
ccc
eee
Answers:
您可以为此使用宏。请执行下列操作。
gg。qq。dd。q。10000@qPS:要进入命令模式,只需按Escape两次。
:g/^/+d来自用户stackoverflow.com/users/254635/ib(贝洛)的解决方案更为简洁。
一种精巧(高效)的方法可以:+delete使用以下:global命令在每行上调用以下命令来删除当前行之后的行:
:g/^/+d
:1d|g/^/+d删除奇数行。
我们可以使用:normal或:norm执行给定的普通模式命令。资源。
:%norm jdd
%norm ddj要删除奇数行为什么不起作用感兴趣。
从vim邮件存档:
:let i=1 | while i <= line('$') | if (i % 2) | exe i . "delete" | endif | let i += 1 | endwhile
(要在vim命令行上一行输入,将删除行1,3,5,7,...)
!perl -ne 'print unless $. % 2':-)
if (expression)这也适用于每一个三线等
:%!awk -- '++c\%2'
或者
:%!awk -- 'c++\%2'
取决于您要清除哪一半。
NR变量?
:%!awk NR\%2或:%!awk 1-NR\%2,如我在另一条评论中所述。这几乎不会更长。
1-NR比更长c++。是的,我知道这是一个角色。就像我说的那样-真正的原因是我忘记了它。无论如何,看起来人们不喜欢这里的awk之美。
NR比++c:) 短:
您可以像这样使用Vim自己的搜索和替换功能:将光标放在第一行,然后以普通模式键入:
:.,/fff/s/\n.*\(\n.*\)/\1/g
.,/fff/是用于取代的范围内。它的意思是“从此行到与正则表达式匹配的行fff(在本例中为最后一行)。s///是替代命令。它寻找一个正则表达式,并用字符串替换每次出现的正则表达式。的g,只要该正则表达式保持被发现在端装置以重复取代。\n.*\(\n.*\)匹配换行符,然后.*匹配整行(匹配换行符以外的任意数量的字符),再匹配另一个换行符和另一行。括号\(并\)记录其中的表达式,因此以后可以使用\1。\1 插入分组的换行符并在其后的行之后插入,因为我们也不希望下一行-我们只希望替换机制通过它,因此我们不删除下一个替换项。这样,您可以控制希望进行删除的范围,而不必使用任何外部工具。
$代替/fff/。