搜索跨越非连续区域

时间:2013-10-06 09:37:27

标签: vim

我有一个操作列表,操作阶段和URL。此列表如下所示:

14257 0 : http://google.com/
14259 0 : http://www.microsoft.com/
14259 1
14259 2
14261 0 : http://www.apple.com/
14261 1
14261 2
14262 0 : http://stackoverflow.com/
14262 1
14263 0 : http://dotancohen.com/
14263 1
14263 2

请注意,操作1425714262没有进入阶段2,而其他操作则进入。{/ p>

请考虑该文件已通过sort运行。现在,我如何将文件缩小为仅限于未进入2 的行?因此,最终文件看起来如此:

14257 0 : http://google.com/
14262 0 : http://stackoverflow.com/

2 个答案:

答案 0 :(得分:2)

所以基本上,你想要删除所有在接下来的2行继续的行。 我想,这个做到了:

g/\v^%(<(\d+)>\D.*\n)%(\1.*\n)%(\1 2)/d 3

然后再做一次v/^\v\d+\D\d\D:/d,你就会离开:

14257 0 : http://google.com/
14262 0 : http://stackoverflow.com/

答案 1 :(得分:1)

您可以搜索以数字,某些空格和数字2开头的所有行。对于每个匹配,删除该行和它上面的两个。之后,只剩下数字为01的行,因此请使用全局搜索并删除不包含冒号的每一行:

function! DeleteNonContinuous()
    while search( '^\v\d+\s+2', 'W' ) != 0
        execute "normal 2kdelete"
    endwhile
    %v/:/delete
endfunction

command! DNC :call DeleteNonContinuous()

使用它像:

:DNC

产量:

14257 0 : http://google.com/
14262 0 : http://stackoverflow.com/