vimでfoldlevelstartを設定して、最初は何も折り畳まないようにして、zrがすぐに機能するようにするにはどうすればよいですか?


8

vimでは、通常、ほとんどのファイルタイプに設定foldmethodindentます。一般に、私はすべての折り畳みを開いた状態でファイルを開くのが好きです。ただし、すぐにを使用zmして、ファイル全体で一度に1レベルずつ折り畳みを閉じ始めると便利です。詳細を邪魔することなく、ファイルの全体的な構造を確認できます。

私が見つけた唯一の一般的な解決策はfoldlevelstart、すべてのファイル(異なるファイルは最大レベルのインデントのレベルが異なることを念頭に置いて)が完全に展開され始めることを確認するために、非常に高い数値(99など)に設定することです。ただし、ファイルの最大折りたたみレベル(通常は99をはるかに下回る)zmに減らすfoldlevelために、繰り返し使用する必要があります。これは面倒で実用的ではありません。foldlevelvimコマンドラインを使用して手動で設定することもできますが、それでもファイル内の最大インデントを知る必要があります。

foldlevelファイル自体の現在の最大インデント/折りたたみレベルより正確に1だけ大きい値を設定してファイルを開く実用的な方法はありますか?

たとえば、次のファイルがあるとします。

a
  b
    c
      d1
      d2
    e
      f1
      f2

の最初のキープレスはzmこれを示します:

a
  b
    c
+--  2 lines: d1------
    e
+--  2 lines: f1------

(ただし、ファイルの最初の最大インデントが任意の値である一般的なケースでは機能することに注意してください)。


1
と混乱zrしていzmます。後者は軽減折り畳みレベルを。
Ingo Karkat 2013年

@IngoKarkat、その通りです。混乱して申し訳ありません。これらの主要なコンボは常に直観に反しています。質問を修正しました。
Andrew Ferrier 2013年

「私はいつもこれらの主要なコンボは直感に反していると思います。」これは、zm=フォールドを増やす(フォールドレベルを引く)およびzr=フォールドを減らす(フォールドレベルを加える)を意味することになっています
wisbucky

回答:


9

これは、現在のファイルで最も高いfoldlevelを見つけます:

:let &foldlevel = max(map(range(1, line('$')), 'foldlevel(v:val)'))

これを自動的に設定するには、次を使用できます:autocmd

:autocmd BufWinEnter * let &foldlevel = max(map(range(1, line('$')), 'foldlevel(v:val)'))

1
インゴ、完璧、それがまさに私が探していたものです。ありがとう。恥foldlevelstartはこのようなオプションがありません。
Andrew Ferrier 2013年

これはCygwin Vimでは機能しないようです。これらの設定でファイルを起動するfoldlevelと、私は0でfoldlevelstart-1になります。
CMCDragonkai 2016年

0

を使用する代わりにzr、を使用するとzR、すべての折り畳みが開きます。同様に、zMすべての折り目を閉じます。


ゲイリー、ありがとう。それは近いですが、私が説明することはしません。折りたたみレベルを1つだけ減らして、問題のファイルに関連する最大折りたたみレベルから下げるコマンドが欲しいのですが。これを行うには、zMを使用して折り畳みレベルを0に減らし、次にzrを繰り返して詳細を開く必要があります。1つのコマンド/キーの組み合わせを探しています。
Andrew Ferrier 2013年

2
あなたがすることができますzR(foldlevelを最高レベルに設定してください)そしてそれzmから動作します。あと1ステップです。
wisbucky 14年

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.