web-dev-qa-db-ja.com

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

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

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

foldlevelをファイル自体の現在の最大インデント/フォールドレベルよりも正確に1つ多く設定してファイルを開く実用的な方法はありますか?

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

a
  b
    c
      d1
      d2
    e
      f1
      f2

の最初のキー押下 zm これを表示します:

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

(ただし、ファイルの最初の最大インデントが任意の値になる可能性がある一般的な場合に機能するはずです)。

8
Andrew Ferrier

これにより、現在のファイルで最も高いフォールドレベルが検索されます。

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

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

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

オプション set nofoldenableすべての折り目を開いた状態でファイルを開始できます

0

zrを使用する代わりに、zRを使用すると、すべてのフォールドが開きます。同様に、zMはすべてのフォールドを閉じます。

0
garyjohn