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:
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 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.
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.
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.
Tags und Links emacs indentation