2012-12-14 68 views
4

儘管使用Vim十年,有時候我仍然在摺疊中掙扎。這個問題中的所有內容都可以在Vim 7.3中重現,沒有.vimrc。我正在使用foldmethod =標記與默認foldMarkkers。複製和關閉Vim中的摺疊

考慮以下嵌套摺疊結構(使用foldmethod = marker和默認標記)。第一列是行號(fold0具有零縮進)。

1|{{{ fold0 
2| {{{ fold1 
3|  {{{ fold2 
4|  }}} 
5| }}} 
6|}}} 

假設fold1fold2都關閉,光標在第2行,我可以抽出,並把使用yyp封閉折,但新插入的褶皺全部開放。

我想要的是由「put」命令導致的摺疊被關閉。或者,在「put」之後是否有方便的方法來關閉它們?也就是說,從這個位置(用光標在第6行):

1|{{{ fold0 
2|+--- 4 lines: fold1---------------------------------------- 
6| {{{ fold3 
7|  {{{ fold4 
8|  }}} 
9| }}} 
10|}}} 

我可以使用zc關閉fold3,但折4保持zo後打開。如果我使用zC,它會關閉摺疊3和摺疊0,但當我做2zo時摺疊4仍然打開。這不是我期望遞歸摺疊工作的方式。有沒有辦法實現zc,但也遞歸地關閉所有摺疊?

我工作的公司指定摺疊是通過匹配對來定義的,沒有明確的foldlevel,因此涉及顯式foldlevel的解決方案是沒有用的。

回答

2

下面的序列(你Ÿ後Ÿp)似乎做你想要什麼:

v - 從{直觀地選擇光標下到相應的}

zC - 關閉光標下的摺疊遞歸(不幸的是,這包括要保持開放外倍)

žv - 僅打開足夠的摺疊顯示光標線

žc - 關閉新材料的單個外部摺疊

當然,您希望將此映射到您的vimrc中的某個其他組合鍵。

+0

這是一個非常好的解決方案,但我發現屏幕由於視覺選擇而閃爍,相當分散注意力。 –

+1

如果您對此感覺強烈,可以先關閉突出顯示('hi Visual ...'),然後再打開。但是這可能比它的價值更麻煩。 –

+0

優秀!在每一種情況下都需要進行一些調整,但你已經解決了這個問題。謝謝。 –