Emacs-Modi zum Bearbeiten von Dateien, deren Einrückung eine Struktur impliziert

9

Ich möchte eine große, haarige YAML-Datei in Emacs bearbeiten. Die Dateistruktur wird durch Einrückung impliziert: Wenn Zeile A zehn Leerzeichen eingerückt ist, startet A einen Abschnitt, der jede folgende Zeile enthält, die um mehr als zehn Leerzeichen eingerückt ist. Dies ist eine ziemlich übliche Konvention, die weit über YAML hinaus verwendet wird.

Was ich wirklich will, ist ein Emacs-Modus mit Definitionen, die diese Struktur respektieren. Zum Beispiel:

  • Ich möchte, dass forward-sexp über ein sexp hinausgeht, wobei ein sexp durch die Einrückung impliziert wird und nicht durch paarweise Klammerpaare. Ähnlich möchte ich, dass es andere Navigationsbefehle gibt, um zu der Zeile nach dem Ende des aktuellen Abschnitts, zum nächsten Geschwisterabschnitt zum aktuellen Abschnitt und so weiter zu gelangen.
  • Ich hätte gerne einen Befehl, um den aktuellen Abschnitt oder alle außer dem aktuellen Abschnitt zu reduzieren, ähnlich wie der Umrissmodus den aktuellen Umrissabschnitt reduzieren kann, aber mit Abschnitten, die durch Einrückung definiert sind.
  • Ich möchte, dass die Moduszeile etwas Nützliches über den Bereich anzeigt, in dem ich mich befinde, wie durch den Einzug angedeutet.
  • Ich möchte, dass es eine Option gibt, um automatisch alle Zeilen hervorzuheben, die Vorfahren der aktuellen Zeile sind.
  • Andere Dinge, an die ich nicht gedacht habe.

Ich habe yaml-mode angeschaut, aber es macht nichts Sinnvolles. Mehrere Leute haben vorgeschlagen, dass ich den Python-Modus versuche, aber es funktioniert nicht sehr gut für diesen Zweck.

Ein generischer eingerückter Zeilenmodus scheint etwas zu sein, was jemand vor langer Zeit geschrieben hätte, aber wenn es existiert, kann ich es nicht finden. Oder gibt es eine Möglichkeit, outline-mode zu hacken, um so zu arbeiten, wie ich es möchte?

Danke für Anregungen.

    
MJD 07.01.2013, 01:04
quelle

2 Antworten

3

Die Verwendung von outline-mode und die Einstellung von outline-regexp auf " *" bringt mir nicht genau das, was ich will, aber es bekommt eine ganze Menge davon. Zum Beispiel scheint hide-subtree , standardmäßig an C-c C-d gebunden, den aktuellen Abschnitt genau so zu reduzieren, wie ich oben beschrieben habe. outline-forward-same-level , gebunden an C-c C-f , macht auch, was ich wollte.

Manche Dinge funktionieren immer noch nicht richtig. Ich werde diese Antwort ändern, wenn ich andere nützliche Möglichkeiten finde, outline-mode zu optimieren.

Dies ist eine geringfügige Änderung eines Vorschlags von José Antonio Ortega Ruiz.

    
MJD 08.01.2013 03:27
quelle
1

Um zum nächsten / aktuellen Geschwister zu gelangen, schrieb ich eine Funktion . Laden Sie die Datei und verwenden Sie M-x my-yaml-next-sibling . Dieses Paket ist noch rudimentär, aber ziemlich nützlich IMO!

update : Diese Funktion ist zu einem echten Paket geworden, indent-tools . Das erste Ziel ist die Navigation in Einrückungsblöcken : gehe zum nächsten Knoten der gleichen Einrückung, zum Elternteil usw. Dann ist es praktisch, Blöcke einzufügen, zu kommentieren, zu folden usw.

Nicht in Melpa, aber im Prozess.

    
Ehvince 13.03.2016 00:04
quelle

Tags und Links