Gibt es eine Möglichkeit, mehrere Vim-Falzmethoden gleichzeitig zu verwenden?


14

Ich habe foldmethod=indentin meinem festgelegt ~/.vimrc, und im Allgemeinen funktioniert das für mich und ich möchte es behalten.

Es gibt jedoch einige Dateien, die ich regelmäßig bearbeite (und die unter meiner ausschließlichen Kontrolle stehen), und die ich in ein marker-basiertes System einfügen möchte, insbesondere, damit ich beim Öffnen der Datei einen großen Abschnitt öffne Selten anschauen (was bereits durch Einrückung 'abgegrenzt' ist) ist vorgefaltet. Es sieht so aus, als ob foldmethod=markerich das zulassen würde (es macht mir nichts aus, wenn in der Datei ein ungewöhnlicher Kommentar erscheint, der diese "Vorfaltungen" anzeigt), aber ich möchte immer noch foldmethod=indentfestlegen, dass ich sie verwenden zckann zo, und so weiter Abschnitte durch Einrücken falten oder aufklappen. Soweit ich das beurteilen kann, kann ich die Faltmethode nicht auf mehrere Werte einstellen.

Gibt es eine andere Möglichkeit, dies zu erreichen (im Idealfall mit etwas, das in der Datei selbst eingebettet ist)?


Ich versuche auch, beide Fold-Methoden von Marker und Indent gleichzeitig zum Laufen zu bringen. Ich glaube auch, dass die Verwendung des Fold-Ausdrucks die beste Option ist. Haben Sie einen Ausdruck gefunden, der sowohl dem Einzug als auch dem Marker entspricht?
Jp_

1
@Jp_ nein, 'fraid nicht.
Andrew Ferrier

Antworten:


10

Jedes Fenster kann einen eigenen lokalen Wert von haben 'foldmethod'. Was Sie festlegen, ~/.vimrcist nur die globale Standardeinstellung. Es gibt mehrere Möglichkeiten, einen anderen lokalen Wert für einen bestimmten Puffer festzulegen :

  1. Manuell mit :setlocal foldmethod=marker
  2. Für einen bestimmten Dateityp (z. B. Java-Dateien): :autocmd FileType java setlocal foldmethod=marker(oder in ~/.vim/after/ftplugin/java.vim)
  3. Für bestimmte Dateien: :autocmd BufRead /path/to/file setlocal foldmethod=marker
  4. Innerhalb der Datei selbst über eine Modeline (da Sie die Marker trotzdem hinzufügen müssen, würde ich dies vorziehen):

/* vim: set fdm=manual : */

Es kann immer noch nur eine Faltmethode in einem einzelnen Fenster geben. Wenn Sie andere Strategien anwenden möchten, müssen Sie eine flexiblere Methode auswählen (z. B. expr) und die "andere" Methode (n) dort erneut implementieren (z. B. indem Sie 'foldexpr'den Einzug berücksichtigen). Oder Sie verwenden zwei Fensterteilungen für denselben Puffer und legen für jede Teilung unterschiedliche Faltmethoden fest.

Da das wahrscheinlich nicht das ist, was Sie hören möchten, könnten Sie etwas zusammen mit einem hacken, :autocmd CursorMoveddas die Faltmethode basierend auf der aktuellen Zeile umschaltet:

" Use markers when in the first 100 lines, else use indent.
:autocmd CursorMoved,CursorMovedI <buffer> let &l:foldmethod = (line('.') <= 100 ? 'manual' : 'indent')

1
Vielen Dank. Dies sagt mir, dass ich die Faltmethode so einstellen kann, dass sie innerhalb dieses Puffers markiert. Was ich aber suche, ist etwas, das es mir noch erlaubt, die Einrückungsmethode zu verwenden, während einige Abschnitte (die durch einen Einrückung begrenzt sind ) vorgefaltet sind . Wenn ich das tue (4), zc, zound so weiter nicht mehr funktionieren , wie in diesem Puffer vorgesehen. Ich habe meine Frage geklärt.
Andrew Ferrier

Ihre Frage war in diesem Punkt nicht klar, danke für die Klarstellung. Ich habe meine Antwort geändert.
Ingo Karkat

Ja, entschuldigen Sie, wenn ich nicht klar war. Der foldexpr klingt nach dem besten Ansatz, ist aber auch kompliziert. Ich werde es aber versuchen. +1 für den Zeiger.
Andrew Ferrier

Danke noch einmal. Ich habe versucht, den foldexpr zu schreiben und hier ein entsprechendes Q geöffnet, das von Interesse sein könnte: superuser.com/questions/560167/…
Andrew Ferrier

@IngoKarkat: Im ersten Absatz unter der Zeile, die Sie geschrieben haben, kann es nur eine Faltmethode pro Puffer geben . Ich glaube das sollte pro Fenster sein .
Garyjohn
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.