Ich benutze, spacemacs
aber vermutlich ist es Emacs Wissen, das hier erforderlich ist.
Ich habe eine JSON-Datei mit einer langen Zeile. Sagen wir, diese JSON von json.org/example:
{"menu": {"id": "file", "value": "File", "popup": {"menuitem": [{"value": "New", "onclick": "CreateNewDoc()"}, {"value": "Open", "onclick": "OpenDoc()"}, {"value": "Close", "onclick": "CloseDoc()"}]}}}
Ich möchte, dass Emacs dies erneut einfügt, was bedeutet, dass ich das Zeichen ganz links in der Zeile nicht auf die richtige Einrückungsstufe ändere, sondern die Zeile in mehrere Zeilen aufteilt.
Wenn ich spacemacs/indent-region-or-buffer
( SPC j =
) benutze, wird der Text überhaupt nicht geändert.
Wie könnte ich von Emacs verlangen, diese lange Schlange zu durchbrechen und erneut zu versuchen, so etwas zu bekommen:
{"menu": {
"id": "file",
"value": "File",
"popup": {
"menuitem": [
{"value": "New", "onclick": "CreateNewDoc()"},
{"value": "Open", "onclick": "OpenDoc()"},
{"value": "Close", "onclick": "CloseDoc()"}
]
}
}}
Ich bin nicht an einer JSON-spezifischen Antwort interessiert, zum Beispiel glaube ich, dass intelliJ das für jede Sprache tut, die es unterstützt (Java, JSON ...). Ich würde denken, dass es für jede Sprache erreichbar ist, für die Emacs einen Hauptmodus hat, oder lassen Sie uns die beliebtesten sagen.
BEARBEITEN Ich habe festgestellt, M-x json-reformat-region
dass es spacemacs
mit und funktioniert, aber ja, ich würde es für jede Sprache und mit immer der gleichen Abkürzung, basierend auf dem Hauptmodus, mögen ...
EDIT2 Ok, also meine Schlussfolgerung ist, dass es für verschiedene Sprachen implementiert ist, JSON & lisp zumindest, vermutlich für andere, und es wäre für noch mehr einfach (XML / XHTML, go was go-fmt hat und auch clang verwendet). Es gibt jedoch keinen generischen Funktionsnamen, der dies für alle Sprachen tun würde. Hier ist Platz, um es in spacemacs
Ebenen für die verschiedenen Sprachen zu implementieren ... Ich habe jedoch keine X / HTML-Implementierung gefunden, was mich ein bisschen überrascht.
quelle
web-beautiful.el
. Das ist das Beste, was ich gefunden habe, aber es hängt von node.js ab.Antworten:
Anscheinend benötigen Sie die
fill-region
Funktion mehr als die Einrückung.M-x fill-region
.M-x indent-region
.Dadurch werden jedoch keine neuen Linien an den exakten Punkten eingefügt, wie in Ihrem Beispiel gezeigt. Dadurch wird die Linie einfach in die Füllspalten eingepasst.
quelle
{
in ,{"menu":
aber Sie haben eine nach{
in{"id":
. Ich kenne JSON nicht und daher hat Ihre formatierte Antwort wahrscheinlich ein Muster, das mir fehlt. Wenn Sie Ihre Frage jedoch mit einer Reihe von Regeln zum Einfügen dieser neuen Zeile aktualisieren können, kann jemand die gewünschte Antwort finden.gofmt
aber für jede Sprache) - gofmt.comjson.el
Paket bietetjson-pretty-print-buffer
. Dies ist, was es für Ihr Beispiel erzeugt:Scheint mir ziemlich anständig.
quelle
json-pretty-print
undjson-pretty-print-buffer
(ähnliche Spezifikationen wiejson-reformat-region
) gebündelt wurden." Aber ich dachte, Emacs könnte eine Funktion haben, die für alle Sprachen funktioniert (spezifisch für jede populäre Sprache im Hauptmodus), was es, wie sich herausstellt, nicht tut.Gemäß dem hier aufgeführten Tipp können Sie einen Bereich in Ihrer Json-Datei mit dem Befehl external formatieren:
Sie können es einfach erweitern, um den gesamten Puffer zu formatieren:
Emacs hat kein Formatierungswerkzeug für Programmiersprachen ( außer Lisp ), nur Einrückungsbefehle.
quelle
M-x json-reformat-region
dassspacemacs
Schiffe mit und arbeiten, aber ja, ich möchte das für jede Sprache und mit immer der gleichen Abkürzung, basierend auf demclang-format
. H.Für dieses spezielle Szenario
json-pretty-print
wird der hervorgehobene Klumpen von Json hübsch aussehen.quelle
Übrigens, für Hauptmodi, die SMIE als Einrückungsengine verwenden, gibt es einen Teil dessen, was Sie dafür benötigen, in Form einer
auto-fill-mode
Unterstützung. Ich denkefill-paragraph
oderfill-region
mache keine gute Arbeit, aber wenn Sie Ihren Code in eine einzelne Zeile schreiben, dann gehen Sie ans Ende dieser Zeile und tun SieM-: (smie-auto-fill)
es sollte vernünftige Ergebnisse liefern (wahrscheinlich nicht perfekt bei weitem, obwohl).quelle