Wie kann ich die Codefaltung von Vim replizieren?

28

Code falten in Emacs

Manchmal möchte ich einen Textblock falten. In Vim haben Sie leichtes Falten ohne Flaum. Ohne irgendwelche Sonderzeichen wie "Marker" oder Regex wie hinzufügen {{{. Ich möchte eine Region auswählen und falten, ohne die Struktur zu verändern.

Wenn man sich umschaut, scheint es in Emacs bereits Fragen zum Code-Falzen zu geben. Jemand sagte, es gäbe "keine perfekte Lösung". Zum Beispiel habe ich in Vim einen Clip mit einfachem Codefolding erstellt:

Vim schlichtes Falten

Bildbeschreibung hier eingeben

+ Ziemlich einfach, wähle eine Region aus und falte sie.
+ Es ist hartnäckig. Wenn Sie den Puffer töten / schließen Sie Vim. Und öffne die Datei erneut, die Falten sind noch da.
+ Sie erhalten eine Hervorhebungsleiste, mit der Sie leicht sehen können, was gefaltet ist.

Es gibt viele andere Faltkonfigurationen für Vim. Ich bin glücklich mit Emacs, aber das ist eine Sache, die ich vermisse. Andere Alternativen, die ich ausprobiert habe, zum Beispiel HideShow:

Verstecken anzeigen

Bildbeschreibung hier eingeben

Böse Alternative mit hide-show minor mode. Ich fand es unbrauchbar:

- Ich kann keine Region auswählen und falten. Es klappt auf Codeblöcken.

- Es gibt keine hohe Bar oder so, um Sie zu begleiten, es ist gefaltet. Man könnte es leicht übersehen.

- Es ist nicht hartnäckig. Wenn Sie die Datei erneut öffnen, sind die Falten verschwunden.

Es gibt ein anderes Paket, Falte dies :

Falten Sie das

Bildbeschreibung hier eingeben

- Es ist eine hübsche Alternative. Es kann jedoch zu Problemen mit dem Einzug kommen, da der Text unter der Falte neben der Falte platziert wird ... (?).

- Es ist in der Lage, die Region einfach visuell auszuwählen und zu falten. Aber es bricht die Unzulänglichkeit und die Übersicht wird durcheinander gebracht. Nicht sehr praktisch.

- Es gibt keine hohe Bar oder ähnliches, um Sie zu betreuen, es ist gefaltet. Man könnte es leicht übersehen.

Was ist das Problem?

Ich möchte nachvollziehen, wie Vim faltet. Aber als ich mich umgesehen habe, scheint es sehr schwierig zu sein, das in Emacs zu tun. Also frage ich mich, ob es irgendetwas in Emacs oder seiner Architektur gibt, das es schwierig macht, dies zu replizieren? Was sind die Grenzen?

ReneFroger
quelle
2
Ich fand die Frage zu weit gefasst und habe deshalb gestimmt, auf dieser Grundlage zu schließen. Ich würde empfehlen, dass das Originalposter einige Bibliotheken auswählt, die einige der gesuchten Funktionen bereitstellen, und diese dann nach Wunsch kombiniert / modifiziert. Wenn das OP Probleme beim Implementieren / Ändern einer bestimmten Funktion hat , stellen Sie eine bestimmte Frage, die auf dieses eine Problem beschränkt ist. Das OP kann wahrscheinlich die gewünschten visuellen Effekte erzielen, sollte jedoch darauf vorbereitet sein, es zu einem fortlaufenden Projekt zu machen, an dem im Laufe der Zeit gearbeitet werden soll.
Gesetzesliste
3
Können Sie bitte erläutern, welche Faltfunktionen Sie wünschen? In der Regel können Sie nicht erwarten, dass die Leute auf dieser Site wissen, wie das Falten von Vim-Code funktioniert, und Sie sollten uns auf jeden Fall mitteilen, welche Funktionen Sie speziell wünschen. Die einzige Information, die Sie über das, was Sie wollen, bereitstellen, ist eine Animation, die nur ein Beispiel zeigt, und ich habe keine Ahnung, was sie darstellt: Sie zeigen nicht an, welche Befehle Sie verwendet haben, warum Sie den Cursor zu dieser oder jener Stelle bewegt haben usw Außerdem spielen sie in einem typischen Browser in einer Schleife und es ist unmöglich zu sagen, wann eine Wiederholung beginnt.
Gilles 'SO - hör auf, böse zu sein'
3
Der Laderaum sollte aus dieser Frage entfernt werden. so wie es derzeit ist, ist es ziemlich spezifisch. Keine Antwort auf die Frage zu haben, ist kein guter Grund, sie zu schließen.
Ista
2
ar-hide-region-atpt, ar-show-region-atpt von 'thing-at-point-utils.el', github.com/andreas-roehler/thing-at-point-utils - bitte entsperren Sie das könnte eine regelmäßige Antwort sein.
Andreas Röhler
1
Die Frage, so wie ich sie verstehe, lautet im Grunde: " Jemand: Bitte schreiben Sie eine ganze Bibliothek für Emacs, die die genauen Code-Faltungsfunktionen von Vim bereitstellt. " Aus einigen Kommentaren und Up-Votes geht hervor, dass es genug gibt Menschen, die dies gerne sehen würden, werden Realität. Ich verstehe jedoch nicht, wie dies angemessen in die Antwort passen könnte - die vorgeschlagene neue Bibliothek muss mit Problemen und Fehlerkorrekturen gewartet werden. Mir würde es auch nichts ausmachen, wenn jemand eine ganze Bibliothek mit coolen neuen Funktionen für das Code-Falten schreibt.
Gesetzesliste

Antworten:

16

Probieren Sie es aus vimish-fold.

Eigenschaften

  • Batterien im Lieferumfang enthalten: Aktivieren Sie den Minor-Modus, binden Sie ein paar Befehle ein, und alles funktioniert.

  • Es funktioniert in ausgewählten Regionen.

  • Es ist hartnäckig: Wenn Sie eine Datei schließen, verschwinden Ihre Falten nicht.

  • Es ist nicht nur beständig, sondern lässt sich auch gut skalieren. Sie können Hunderte von Dateien mit vielen Falten ohne nachteilige Auswirkungen bearbeiten.

  • Es ist offensichtlich, welche Textteile gefaltet sind.

  • es bricht nicht Einrückung oder etwas;

  • es kann gerade entfaltete Falten wieder entfalten (oh, meine);

  • Für avyPaketliebhaber: Mit dieser Funktion können Sie avyText mit einer minimalen Anzahl von Tastenanschlägen falten!

Verwendung

Erstellen Sie Bindungen für einige der folgenden Funktionen:

  • vimish-fold - Grundlegende Faltung der ausgewählten Region;

  • vimish-fold-unfold- Sie müssen dies nicht wirklich binden, sondern nur verwenden, C-gwenn der Punkt auf der Überschrift steht, die den gefalteten Text darstellt.

  • vimish-fold-unfold-all - Trotzdem kann dies nützlich sein.

  • vimish-fold-refold - ja, du kannst es zurückklappen;

  • vimish-fold-avy- verwenden Sie avy, um Ihren Text zu falten!

Sie können vimish-fold-modewahlweise Modi auswählen, in denen Sie eine dauerhafte Falzung wünschen, oder diese einfach überall aktivieren:

(vimish-fold-global-mode 1)
Mark Karpov
quelle
Haben Sie Vorschläge für Tastenbelegungen? Welche Bindungen verwenden Sie im C ++ - Modus? C-Modus? Python-Modus? Lisp-Modus? ELisp-Modus? JavaScript-Modus?
Reb.Cabin
1
@ Reb.Cabin, dies ist kein modusspezifisches Paket, daher sind globale Tastenkombinationen die beste Wahl. Ich verwende Tastenbelegungen, bei denen es sich nicht um Tastenakkorde handelt, und die meisten Leute würden sie für etwas seltsam halten. Derzeit habe ich: menu v fvimish-fold, menu v avimish-fold-avy, menu v uvimish-fold-unfold-all, menu v vvimish-fold-refold. Die meisten meiner Keybinds sind so, das ist meine Konfiguration .
Mark Karpov
Integriert sich dies in böse Bewegungen und Textobjekte?
PythonNut
1
Hm ... ich werde anfangen an einer PR zu arbeiten.
PythonNut
1
Ich finde Vimish-Fold völlig unbrauchbar. Vielleicht ist es für diejenigen, die bereits mit Code-Folding in Vim vertraut sind, intuitiv. Ich weiß es nicht. Ich verstehe auch nicht, warum das Falten im Org-Modus so gut funktioniert, aber Emacs hat noch kein gutes Code-Falten ...
kjo