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

2405
Andrew Ferrier

In vim, ich in der Regel eingestellt, foldmethodum indentfür die meisten Dateitypen. Im Allgemeinen möchte ich Dateien mit allen Falten öffnen. Es ist jedoch nützlich, sofort mit zmdem Schließen der Falten auf globaler Ebene zu beginnen, und zwar eine Ebene nach der anderen, sodass ich die Gesamtstruktur der Datei sehen kann, ohne dass Details im Weg sind.

Die einzige generelle Lösung, die ich gefunden habe, ist die Einstellung foldlevelstarteiner sehr hohen Anzahl, z. B. 99, um sicherzustellen, dass alle Dateien (unter Berücksichtigung verschiedener Dateien werden unterschiedliche Ebenen des maximalen Einzugs aufweisen) vollständig aufgeklappt. Ich muss dann jedoch zmwiederholt verwenden, um foldleveldie maximale Faltstufe der Datei zu reduzieren, die normalerweise unter 99 liegt, was umständlich und unpraktisch ist. Ich konnte foldleveldie vim-Befehlszeile manuell festlegen, aber ich muss immer noch den maximalen Einzug in der Datei kennen.

Gibt es eine praktische Möglichkeit, eine Datei mit foldlevelgenau einem Wert zu öffnen, der größer ist als die maximale aktuelle Einrückungs- / Falzstufe in der Datei selbst?

Zum Beispiel die folgende Datei gegeben:

a b c d1 d2 e f1 f2 

Der erste Tastendruck von zmwürde folgendes anzeigen :

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 einen beliebigen Wert haben könnte).

8
Sie verwechseln "zr" mit "zm"; das letztere reduziert die Faltebene. Ingo Karkat vor 11 Jahren 1
@IngoKarkat, du hast recht, ich bin. Entschuldigung für die Verwirrung - Ich finde diese Tastenkombinationen immer gegenläufig. Ich habe meine Frage behoben. Andrew Ferrier vor 11 Jahren 0
_ "Ich finde diese Tastenkombinationen immer kontraintuitiv." _ Es bedeutet "zm" = mehr falten (Foldlevel subtrahieren) und "zr" = weniger falten (Foldlevel hinzufügen). wisbucky vor 9 Jahren 0

3 Antworten auf die Frage

8
Ingo Karkat

This finds the highest foldlevel in the current file:

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

To set this automatically, you can use an :autocmd:

:autocmd BufWinEnter * let &foldlevel = max(map(range(1, line('$')), 'foldlevel(v:val)')) 
Ingo, perfekt, genau das habe ich gesucht. Vielen Dank. Shame `foldlevelstart` hat keine solche Option. Andrew Ferrier vor 11 Jahren 1
Das scheint bei Cygwin Vim nicht zu funktionieren. Mein "foldlevel" ist 0 und "foldlevelstart" ist -1, wenn ich eine Datei mit diesen Einstellungen starte. CMCDragonkai vor 7 Jahren 0
0
garyjohn

Instead of using zr, use zR, which will open all folds. Similarly, zM will close all folds.

Gary, danke. Das ist knapp, tut aber nicht das, was ich beschreibe. Ich möchte einen Befehl, der den Falzgrad nur um einen Wert reduziert, jedoch vom maximalen Falzgrad, der für die betreffende Datei relevant ist. Dazu muss ich zM verwenden, um die Foldlevel auf 0 zu reduzieren, dann zr wiederholt, um mehr Details zu erhalten. Ich suche nach einer Befehls- / Tastenkombination. Andrew Ferrier vor 11 Jahren 0
Sie können `zR` machen (Foldlevel auf höchstes Niveau setzen), dann funktioniert 'zm`. Es ist nur ein zusätzlicher Schritt. wisbucky vor 9 Jahren 2
-1
HarshaNadimpalli

Mit dieser Option set nofoldenablekönnen Sie die Datei mit allen Falten öffnen

Das ist nicht die Frage, die ich gestellt habe. Ich möchte die Faltung aktiviert haben. Andrew Ferrier vor 5 Jahren 0