Wie aktiviere und verwende ich Code Folding in Vim?

48

Wie kann ich aktivieren und tun Code - Faltung in Vim?

Muss ich irgendetwas ändern ~/.vimrc?

Ich tippe z+ aund z+ cund z+ ound nichts passiert.

Hier ist ein Artikel über das Falzen: Code-Falzen in Vim .

Mohammad Reza Rezwani
quelle

Antworten:

40

Nein , Sie müssen nicht den Befehl setzen von der Seite , die Sie verknüpft in Ihrem ~/.vimrc, können Sie nur sie geben nach der Ausgabe :in vimdie Eingabeaufforderung zu erhalten.

Wenn Sie jedoch die Zeilen setzen:

set foldmethod=indent   
set foldnestmax=10
set nofoldenable
set foldlevel=2

Wie in dem Link angegeben, den Sie in Ihrem angegeben haben ~/.vimrc, müssen Sie sie nicht jedes Mal eingeben, wenn Sie das Falzen in einer Datei verwenden möchten. Das set nofoldenablestellt sicher, dass beim Öffnen die Dateien "normal" sind, also nicht gefaltet werden.

Anthon
quelle
Ich habe einen Code, der von C geschrieben wird, also der Courser in einer seiner Funktionen. Ich drücke <kbd> esc </ kbd>, um zum Befehl zu gelangen. Nach: schreibe ich zc und nichts passiert.
Mohammad Reza Rezwani
1
@alex das zc nach dem du nicht tippen solltest :. Sie geben die setBefehle nach der Eingabeaufforderung ein, die Sie bei der Eingabe erhalten :. Das, was zcSie eingeben, wenn Sie den Cursor frei bewegen können, genau wie Sie es verwenden würden zt, um den Text, auf dem sich der Cursor befindet, an den oberen Rand des aktuellen Bildschirms zu bringen.
Anthon
39

Standardmäßig falten

Die voreingestellte Faltmethode von Vim manualbedeutet, dass die Falten manuell erstellt werden. andernfalls wird es keine Falte geschlossen oder geöffnet werden za, zooder zcwie Sie beschrieben. Sie können jedoch zf{motion}im normalen Modus oder zfim visuellen Modus eine Falte erstellen . Beispiel: zfjErstellt eine Falte für die aktuelle und die nächste Zeile im normalen Modus.

Falten Sie sich durch indent

Die von @Anthon akzeptierte Antwort beschreibt, wie die Faltmethode auf gesetzt wird indent. dh die Faltung wird durch die Ebene der Vertiefungen definiert.

Falten Sie sich durch syntax

Auf eine bequemere Weise können Falten automatisch auf der Grundlage der Sprachsyntax des aktuellen Puffers erstellt werden. Wenn Sie eine Programmiersprache verwenden, nennen wir sie L , und Sie haben eine Folding-Definition von L (z. B. haben Sie ein Vim-Plugin installiert, in dem die Folding-Informationen von L definiert sind; z. B. c.vim für C / C ++ oder Python) -Modus für Python), müssen Sie nur die Faltmethode auf Folgendes einstellen syntax:

set foldmethod=syntax

Das ist es. Die nützlichsten Befehle zum Arbeiten mit Falten sind:

  • zo öffnet eine Falte am Cursor.
  • zShift+ oöffnet alle Faltungen am Cursor.
  • zc schließt eine Falte am Cursor.
  • zmerhöht die foldlevelum eins.
  • zShift+ mschließt alle offenen Falten.
  • zrverringert die foldlevelum eins.
  • zShift+ rverringert den Wert foldlevelauf Null - alle Faltungen sind offen.
Karikaturist
quelle
14

Sie müssen es nicht systematisch anwenden: Ich wähle Falten normalerweise manuell nach Bewegung oder Schnitt aus. Wenn Sie beispielsweise einen Absatz zfipfalten, werden die nächsten 20 Zeilen gefaltet zf20j. Verwenden Sie zazu wechseln und zdzu entfernen.

Dies erfordert ein wenig mehr Arbeit, ermöglicht jedoch das Falten, um die vorliegende Aufgabe widerzuspiegeln.

Marmaduke
quelle
4

Sie können foldingin der aktuellen Sitzung beispielsweise @ Anthons Antwort aktivieren . Wenn Sie es jedoch dauerhaft machen möchten, müssen Sie mindestens diese Zeile .vimrcfür die Falzarbeit festlegen:

set foldmethod=indent

indent ist eine Art Faltung, von der man mehr sehen kann :help foldmethod

'foldmethod' 'fdm'      string (default: "manual")
                        local to window
                        {not in Vi}
                        {not available when compiled without the +folding
                        feature}
        The kind of folding used for the current window.  Possible values:
        fold-manual     manual      Folds are created manually.
        fold-indent     indent      Lines with equal indent form a fold.
        fold-expr       expr        'foldexpr' gives the fold level of a line.
        fold-marker     marker      Markers are used to specify folds.
        fold-syntax     syntax      Syntax highlighting items specify folds.
        fold-diff       diff        Fold text that is not changed.

Jetzt können Sie jedes Mal, wenn Sie eine Datei mit öffnen vim, sehen, dass der Code nach der von Ihnen festgelegten Methode gefaltet wird. Dann können Sie verwenden za, zc, zo.

cuonglm
quelle
Es ist nicht nötig, den vimrc zu benutzen, das habe ich nie gemacht, da ich nur gelegentlich falzen muss
Anthon
@Anthon: Oh, natürlich. Ich werde in meiner Antwort weitere Informationen hinzufügen.
Dienstag,