Wie kann ich foldlevelstart in vim so einstellen, dass zunächst nichts gefaltet wird und zr trotzdem sofort funktioniert?

8

In vim, ich in der Regel eingestellt , foldmethodum indentfür die meisten Dateitypen. Im Allgemeinen möchte ich, dass Dateien mit allen geöffneten Falten geöffnet werden. Es ist jedoch nützlich, sofort damit zmzu beginnen, Falten global über die Datei hinweg zu schließen, sodass ich die Gesamtstruktur der Datei sehen kann, ohne dass Details im Weg stehen.

Die einzige allgemeine Lösung, die ich gefunden habe, besteht darin foldlevelstart, eine sehr hohe Zahl festzulegen, z. B. 99, um sicherzustellen, dass alle Dateien (unter Berücksichtigung unterschiedlicher Dateien mit unterschiedlichem maximalem Einzug) vollständig entfaltet beginnen. Allerdings müsste ich dann zmwiederholt verwenden, um foldleveldie maximale Falzstufe der Datei zu reduzieren , normalerweise viel weniger als 99, was umständlich und unpraktisch ist. Ich könnte foldlevelmanuell über die vim-Befehlszeile einstellen , aber ich müsste immer noch den maximalen Einzug in der Datei kennen.

Gibt es eine praktische Möglichkeit, eine Datei zu öffnen, deren foldlevelEinstellung genau eins höher ist als die maximale aktuelle Einrückungs- / Faltebene in der Datei selbst?

Zum Beispiel bei folgender Datei:

a
  b
    c
      d1
      d2
    e
      f1
      f2

Der erste Tastendruck von zmwürde dies zeigen:

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

(Beachten Sie jedoch, dass dies für den allgemeinen Fall funktionieren sollte, in dem der anfängliche maximale Einzug der Datei ein beliebiger Wert sein kann.)

Andrew Ferrier
quelle
1
Sie verwechseln zrmit zm; Letzteres reduziert das Faltniveau.
Ingo Karkat
@IngoKarkat, du hast recht, ich bin. Entschuldigen Sie die Verwirrung - ich finde diese Tastenkombinationen immer kontraintuitiv. Ich habe meine Frage behoben.
Andrew Ferrier
"Ich finde diese Schlüsselkombinationen immer kontraintuitiv." Es soll bedeuten zm= mehr falten (Foldlevel subtrahieren) und zr= weniger falten (Foldlevel hinzufügen)
wisbucky

Antworten:

9

Dies findet die höchste Faltstufe in der aktuellen Datei:

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

Um dies automatisch einzustellen, können Sie Folgendes verwenden :autocmd:

:autocmd BufWinEnter * let &foldlevel = max(map(range(1, line('$')), 'foldlevel(v:val)'))
Ingo Karkat
quelle
1
Ingo, perfekt, genau das habe ich gesucht. Vielen Dank. Schade foldlevelstarthat so eine Option nicht.
Andrew Ferrier
Dies scheint bei Cygwin Vim nicht zu funktionieren. Mein foldlevelist 0 und foldlevelstart-1, wenn ich eine Datei mit diesen Einstellungen starte.
CMCDragonkai
0

Anstatt zu verwenden zr, verwenden Sie zR, wodurch alle Falten geöffnet werden. Ebenso zMwerden alle Falten geschlossen.

Garyjohn
quelle
Gary, danke. Das ist nah dran, macht aber nicht das, was ich beschreibe. Ich möchte einen Befehl, der die Faltstufe nur um eins verringert, jedoch von der für die betreffende Datei relevanten maximalen Faltstufe. Dazu müsste ich zM verwenden, um die Faltstufe auf 0 zu reduzieren, und dann zr wiederholt, um mehr Details zu öffnen. Ich suche eine Befehls- / Tastenkombination.
Andrew Ferrier
2
Sie können dies tun zR(Foldlevel auf die höchste Stufe einstellen) und dann zmwird es funktionieren. Es ist nur ein zusätzlicher Schritt.
wisbucky
0

Mit dieser Option set nofoldenablekönnen Sie die Datei mit allen geöffneten Falten starten

HarshaNadimpalli
quelle
Das ist nicht die Frage, die ich gestellt habe. Ich möchte das Falten aktivieren.
Andrew Ferrier