Hauptseite

Faltungen mit vim – Textstellen zusammen klappen

21. April 2009 von zimon

vim unterstützt wie jeder moderne Editor Faltungen (folding), womit sich z.B. Funktionen eines Programms oder Sections eines LaTeX-Dokuments auf eine Zeile reduzieren lassen. Dies kann die Übersichtlichkeit einer großen Textdatei drastisch erhöhen, da nur die Stellen des Textes angezeigt werden, die man im Moment benötigt.

Es gibt 6 verschiedene Methoden um Faltungen anzulegen:

  • Manuell (manual) – Hier kann man die Bereich die gefaltet werden sollen frei definieren.
  • Einrückung (indent) – Es wird entsprechend den Einrückungen (z.B. in Quelltexten) gefaltet.
  • Ausdruck (expr) – Ein Ausdruck definiert die Faltungen.
  • Syntax (syntax) – Die Faltungen werden über das Syntaxhighlighting definiert. Somit wird für jeden Dateityp ein angemessenes Folding erreicht.
  • Unterschiede (diff) – Faltet im diff-Modus von vim die Teile der beiden Texte, die gleich sind so dass nur die Änderungen zu sehen sind. (Diese Methode ist nur im diff-Modus verfügbar)
  • Markierungen (marker) – Hier werden die Faltungen durch bestimmte Markierungen im Text erreicht.

Die Methode ist standardmäßig auf manual eingestellt und man kann sie über die Option foldmethod ändern. So wird z.B. mittels

:set foldmethod=marker

die Methode auf Markierungen umgestellt.

Grundsätzlich werden Faltungen mit zo geöffnet und mit zc geschlossen (mit zO und zC rekursiv auch die inneren). Mit za wird zwischen offen und zu gewechselt (zA wechselt rekursiv). Im Manuell- und Markierungsmodus werden neue Faltungen mittels zf<Bewegung> angelegt oder indem man einen Bereich im visuellen Modus markiert und zf drückt.
Beispiele:

  • zf10G – erstellt eine Faltung bis inklusive Zeile 10
  • zf10j – erstellt eine Faltung von der aktuellen Zeile bis inklusive 10 Zeilen tiefer
  • zf% - auf einer Klammer erstellt eine Faltung bis zur korrespondierenden Klammer
  • zf} - erstellt eine Faltung bis zur nächsten Leerzeile

Im Markierungsmodus ist die Markierung für beginnende Faltungen standardmäßig

/*{{{*/

und für endende Markierungen

/*}}}/*

Dies kann mit der Option foldmarker gesetzt werden die Standardmäßig auf

{{{,}}}

gesetzt ist.
Um auch in Bash oder LaTeX die Markierungen auszukommentieren kann man die Option commentstring ändern, wobei die Markierung durch %s gekennzeichnet wird. Standardmäßig ist die Option also:

/*%s*/

Mittels zd wird im Manuell- und Markieren-Modus eine Faltung (inklusive Markierung) gelöscht (zD löscht rekursiv).

In der Expression-Methode wird automatisch erstmal genau wie in der Einrückungsmethode gefaltet. Um das Verhalten zu ändern, muss die Option foldexpr gesetzt werden. Mit

:set foldexpr=getline(v:lnum)=~'^\\s*$'&&getline(v:lnum+1)=~'\\S'?'<1':1

werden alle Abschnitte, die durch eine Leerzeile getrennt sind gefaltet. Mehr Infos zu dieser Methode gibt es in der Hilfe von vim mittels :h fold-expr.

Weitere praktische Kommandos für alle Methoden:

  • zv öffnet so viele Faltungen bis man die Zeile sehen kann in der sich der Cursor gerade befindet. Dies ist praktisch, wenn man zu einer bestimmten Zeile springen möchte die in mehreren Faltungen liegt.
  • zi schaltet die Faltungen aus und wieder ein. Dies kann ganz praktisch sein, wenn man den Text kurz ohne Faltungen sehen möchte. Danach sind sie genau wie vorher.
  • zj und zk dienen zum Bewegen zur nächsten bzw. vorherigen Faltung
  • zM schließt alle Faltungen (Das Faltungslevel wird auf 0 gesetzt, zm dekrementiert es nur), während zR alle Faltungen öffnet (Level wird auf Maximum gesetzt während zr es inkrementiert)

Wenn man die Option foldcolumn auf eine Zahl größer 0 setzt, erscheint auf der linken Seite ein Baum, der die Faltungstiefe anzeigt. foldcolumn gibt dabei die breite des Baumes (also die tiefe der Faltungen die durch den Baum angezeigt werden) an.

Auf die Zeile von geschlossenen Faltungen können Operationen wie dd oder yy angewendet werden, die auf die ganze Faltung wirken. Gleiches gilt für Reguläre Ausdrücke. Ist die Zeile im Visual-Modus markiert, so ist auch der gesammte Inhalt der Faltung markiert. In gvim kann man damit auch die Faltungen öffnen und schließen indem man auf die entsprechenden + bzw. – Symbole klickt.

Weitere Informationen gibt es in der Hilfe von vim, die über :h folding aufgerufen werden kann.


Schlagworte: ,



Kommentieren

Kommentarlinks könnten nofollow frei sein.


Bloggeramt.de frisch gebloggt Blogverzeichnis - Blog Verzeichnis bloggerei.de