4

Vimを10年間使用しているにもかかわらず、折り畳みに苦労することがあります。この質問のすべては、Vim7.3に.vimrcがなくても再現可能です。デフォルトのfoldmarkersでfoldmethod=markerを使用しています。

次のネストされたフォールド構造を検討してください(foldmethod = markerおよびデフォルトマーカーを使用)。最初の列は行番号です(fold0のインデントはゼロです)。

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

fold1とが両方とfold2も閉じていて、カーソルが2行目にあるとします。を使用して閉じた折り目をヤンクして配置できますyypが、新しく挿入された折り目はすべて開いています。

私が欲しいのは、「put」コマンドの結果として生じる折り目を閉じることです。あるいは、「置く」後にそれらを閉じる便利な方法はありますか?つまり、この位置から(6行目にカーソルがあります):

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

fold3を閉じるために使用できますzcが、fold4は開いたままになりzoます。代わりにを使用するzCと、fold3とfold 0が閉じますが、fold4は開いたままになります2zo。これは、再帰的なフォールドクロージングが機能することを期待する方法ではありません。zc含まれているすべてのフォールドを達成するだけでなく、再帰的に閉じる方法はありますか?

私が働いている会社は、フォールドが明示的なフォールドレベルなしでペアを一致させることによって定義されることを指定しているので、明示的なフォールドレベルを含むソリューションは役に立ちません。

4

1 に答える 1

3

次のシーケンス(の後にyyp)は、あなたが望むことをしているようです:

v%{-カーソルの下から対応するものを視覚的に選択します}

zC-カーソルの下のすべての折り目を再帰的に閉じます(残念ながら、これには、開いたままにしておきたい外側の折り目が含まれます)

zv-カーソル行を表示するのに十分な折り目を開きます

zc-新しい素材の1つの外側の折り目を閉じます

もちろん、これをvimrcの他のキーの組み合わせにマッピングすることもできます。

于 2012-12-14T22:28:44.423 に答える