2011-08-22 56 views
2

我想知道在Gvim中是否有某種方式通過「塊」來搜索結果。 「塊」在每一行都有搜索模式。所以命令應該從第1行再到第5行,n + 1,n + 4等等。它應忽略連續行(A塊!)中發生的匹配並跳轉到下一個塊。此外,如果有一些方法來定義「沒有規律塊」Gvim按塊搜索

Line 1: Pattern 
Line 2: Pattern 
Line 3: Pattern 
Line 4: 
Line 5: Pattern 
---- No Pattern here ---- 
Line n+1: Pattern 
Line n+2: 
Line n+3: 
Line n+4: Pattern 
Line n+5: Pattern 

回答

0

你可以爲此摺疊。

要摺疊的包含上次搜索模式連續行的組:

:se fdm=expr foldenable foldexpr=getline(v:lnum)[email protected]/ 

現在你可以使用規則的摺疊導航

  • ZM - 關閉所有的摺疊
  • ZR - 打開所有摺疊
  • ZJ移動一個向下摺疊,ZK移動一個摺疊起來

  • zcdd猛拉當前塊到默認寄存器

0

右斷手的大小,我不記得如果Vim做多線路匹配的能力。如果是這樣,您可以在搜索模式中指定換行符。在Perl中,這看起來像這樣(我沒有查看多行代碼正則表達式,所以我可能會有一些語法錯誤,但它足夠接近以充當示例)。

/(pattern)(\n(pattern)*){4}/m 

這將查找'模式',然後4行,可能包含或不包含'模式'。

這個問題是,如果你有兩個重疊的塊,我認爲這個搜索會混淆。

你可以做的另一件事是定義一個vim宏,它將搜索,然後向下移動5行。

宏定義使用+ q +,然後使用+ @ +執行。因此,對於你的「搜索模式塊」例如,使用「T」是,你會做這樣的事:

<esc>qt # start macro 't' 
/pattern # search for 'pattern' 
5j  # move down 5 lines 
<esc>q # end macro 

然後,你會在你的文檔的頂部開始,然後反覆按「@t '

0

可以使用兩種不同的策略來描述一個塊的定義。首先,可以設計一個搜索模式以匹配塊的第一行,即確實匹配模式但不符合匹配相同模式的行 的行。其次,可以搜索匹配該模式的多個後續行。 但是爲了跳過整個塊以找到下一個匹配項,需要 將光標放在匹配塊的末尾。

/\(pattern\)\%(\n\1\)*/e 

個人而言,我更喜歡第一種解決方案。