2012-01-04 1 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 3つのインナーif Sを折りたたむことはできませんが?

ありがとうございます!これが動作するかどうか

+1

すでにfoldmethod = syntax/indentを使用していますか? – sehe

答えて

1

最も近いものはzMzvです。これにより、すべての折り畳み(zM)が閉じられ、十分な折り畳みが開いてカーソルが表示されている行が表示されます(zv)。必要に応じて、短いコマンドにマップすることができます。

外側のifステートメントの外側にあるすべての折り目を閉じますので、あなたが求めているものではありません。

+0

ありがとうございます。外側の 'if'文の外側にあるすべての折り返しを閉じることは機能であり、バグではありません!しかし、折りたたみマーカーを無効にする必要がありました。 – dotancohen

4

は参照してください:私が思い付くことができ

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

私は 'foldlevel = 1'にしなければなりませんでしたが、とてもうまく機能しました。折りたたみマーカーをあまりにも些細なものに上書きすることは考えていませんでした。実際には欠点がありますか? – sehe

+1

私は1文字の折り返しマーカーでは決して問題がなかったが、それは事例である。 – holygeek

+0

はまだ評価されています! – sehe

2

質問が正しい場合は、文 に記載されている折り畳みの変更は、次の一連の操作と同等です。

  1. 現在の折り畳み(カーソルが内側にあります)を閉じます。
  2. 閉じたものの中のすべての折り返しを再帰的に閉じます。
  3. 現在の折り目を開き、内側の折り目を閉じたままにします。

マッピング

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

は、結果的に がそれらを達成する前に、カーソル位置を保存し、後にそれを復元し、前述のステップに対応するコマンドを実行します。

関連する問題