Vim 跨越非连续区域的搜索
我有一个操作、操作阶段和URL的列表。此列表如下所示:Vim 跨越非连续区域的搜索,vim,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
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
请注意,操作14257
和14262
未进入阶段2
,而其他操作进入阶段
假设文件已通过排序运行。现在,我如何将文件减少到只有未进入stage2
的行?因此,最终文件看起来是这样的:
14257 0 : http://google.com/
14262 0 : http://stackoverflow.com/
您可以搜索以数字、一些空格和数字开头的所有行2
。对于每个匹配项,删除该行及其上方的两行。在此之后,只剩下编号为0
和1
的行,因此使用全局搜索并删除不包含冒号的每一行:
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/
您可以搜索以数字、一些空格和数字开头的所有行2
。对于每个匹配项,删除该行及其上方的两行。在此之后,只剩下编号为0
和1
的行,因此使用全局搜索并删除不包含冒号的每一行:
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/
您可以搜索以数字、一些空格和数字开头的所有行2
。对于每个匹配项,删除该行及其上方的两行。在此之后,只剩下编号为0
和1
的行,因此使用全局搜索并删除不包含冒号的每一行:
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/
您可以搜索以数字、一些空格和数字开头的所有行2
。对于每个匹配项,删除该行及其上方的两行。在此之后,只剩下编号为0
和1
的行,因此使用全局搜索并删除不包含冒号的每一行:
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/
所以基本上,你要删除所有的行,在接下来的两行继续。
我认为,这一个做到了:
g/\v^%(<(\d+)>\D.*\n)%(\1.*\n)%(\1 2)/d 3
所以基本上,你要删除所有的行,在接下来的两行继续。
我认为,这一个做到了:
g/\v^%(<(\d+)>\D.*\n)%(\1.*\n)%(\1 2)/d 3
所以基本上,你要删除所有的行,在接下来的两行继续。
我认为,这一个做到了:
g/\v^%(<(\d+)>\D.*\n)%(\1.*\n)%(\1 2)/d 3
所以基本上,你要删除所有的行,在接下来的两行继续。
我认为,这一个做到了:
g/\v^%(<(\d+)>\D.*\n)%(\1.*\n)%(\1 2)/d 3
非常感谢。你能解释一下:g/
行吗?即使只是链接到精美手册也很好。我想了解%
的用途,以及为什么从\v
开始。谢谢\v
表示“非常神奇”的模式,允许使用常用的正则表达式量词而不转义它们,这基本上意味着可以跳过一大堆反斜杠%(
是一种对模式进行分组的方法,通常比正常的(
分组快一点,因为它不会捕获模式。您可以在:h/\%v
和:h/\%(
谢谢。你能解释一下:g/
行吗?即使只是到精美手册的链接也很好。我想了解%
是做什么的,以及你为什么从\v
开始。谢谢!\v
意味着“非常神奇”模式,它允许使用通常的正则表达式量词而不转义它们,这基本上意味着,您可以跳过一大堆反斜杠。%(
是一种对模式进行分组的方法,通常比正常的快一点(
分组,因为它不捕获模式。您可以在:h/\%v
和:h/\%(
谢谢。你能解释一下:g/
行吗?即使只是到精美手册的链接也很好。我想了解%
是做什么的,以及你为什么从\v
开始。谢谢!\v
意味着“非常神奇”模式,它允许使用通常的正则表达式量词而不转义它们,这基本上意味着,您可以跳过一大堆反斜杠。%(
是一种对模式进行分组的方法,通常比正常的快一点(
分组,因为它不捕获模式。您可以在:h/\%v
和:h/\%(
谢谢。你能解释一下:g/
行吗?即使只是到精美手册的链接也很好。我想了解%
是做什么的,以及你为什么从\v
开始。谢谢!\v
意味着“非常神奇”模式,它允许使用通常的正则表达式量词而不转义它们,这基本上意味着,您可以跳过一大堆反斜杠。%(
是一种对模式进行分组的方法,通常比正常的快一点(
分组,因为它不捕获模式。您可以在:h/\%v
和:h/\%上阅读更多有关它的信息(