2012-01-04 99 views
0

在大型PHP應用程序中,我想摺疊當前塊中的所有代碼塊,但不是當前塊本身。例如:VIM:摺疊當前塊內的所有代碼塊

if ($something) { 

    if ($another) { 
     // some code; 
    } 

    | <--THIS IS MY CURRENT CURSOR POSITION 

    if ($yetAnother) { 
     // more code; 
    } 

    if ($stillAnother) { 
     // yet more code; 
    } 

} 

我如何可以摺疊的三個內部if秒,但沒有外if

謝謝!

+1

您是否已經在使用foldmethod = syntax/indent? – sehe 2012-01-04 22:37:21

回答

1

我可以想出最接近的事是zMzv。這將關閉所有摺疊(zM),然後打開足夠的摺疊以查看光標所在的線(zv)。如有必要,您可以將其映射到較短的命令。

這並不完全符合您的要求,因爲它會關閉外部if聲明以外的所有摺疊。

+0

謝謝。關閉外部'if'語句之外的所有摺疊是一個功能,而不是bug!不過,我確實必須重寫摺疊標記。 – dotancohen 2012-01-05 21:18:05

4

見,如果這個工程:

:set foldmethod=marker foldmarker={,} foldlevel=2 
+1

我不得不'foldlevel = 1「,但是它運行得非常好。我從來沒有想過重疊foldmarker到一些如此微不足道的東西。它在實踐中有缺點嗎? – sehe 2012-01-04 22:39:23

+1

我從來沒有過使用單字符摺疊標記的問題,但那是一個軼事。 – holygeek 2012-01-04 22:51:33

+0

還是讚賞! – sehe 2012-01-05 01:40:43

2

如果我的問題是正確的,則 中所述的摺疊更改等同於以下一系列操作。

  1. 關閉當前摺疊(光標所在的位置)。
  2. 遞歸關閉剛關閉的所有摺疊。
  3. 打開當前摺疊,保持內摺疊關閉。

映射

:nnoremap <silent> <leader>f m`zcVzCzo`` 

因此運行對應的命令於上述步驟, 保存光標位置完成之前,和之後恢復它。