Ich verwende «Sortierzeilen», um Includes in C / C ++ - Dateien vor dem Speichern zu sortieren . Das Problem, das auftritt, ist, dass Überschriften mit "
Symbolen höher sortiert sind als solche mit <
Symbolen. Aber ich will das Gegenteil.
Wie ändere ich die Reihenfolge so, dass das <
Zeichen eine höhere Priorität als das "
Symbol hat?
sort-subr
direkt aufrufen . Oder ... als Hack könnten Sie ratensort-lines
, dass Sie vor dem Sortieren"
und den<
Zeichen und dann nach dem Sortieren die Zeichen zurücktauschen. :-)Antworten:
Sie können verwenden
sort-regexp-fields
. Markieren Sie die Region und machen Sie:M-x sort-regexp-fields
RET#include .\(.*\)
RET\1
RETDie Gruppe mit regulären Ausdrücken erfasst alles nach
#include "
oder#include <
und sortiert danach anstelle der gesamten Zeile.Zu Ihrer Information, ich glaube, der Grund für die Sortierung, die Sie sehen, ist, dass sie
"
höher ist als<
in ASCII.quelle
<
,"
Symbole. Aber ich bin zu dem Schluss gekommen, dass auf diese Weise sortierte Überschriften etwas chaotisch aussehen. Deshalb möchte ich nur die Reihenfolge der Zeichen ändern.In der Zwischenzeit habe ich einen Code geschrieben, um den von @glucas erwähnten Hack zu implementieren. Es passt vielleicht nur zum Sortieren von Headern in C, aber ich hoffe, jemand findet es nützlich.
Die Funktion
swap-<-and-quote-includes
verwandelt jeden Text wie<foo>
zu"foo"
, und jedes"foo"
zu<foo>
innerhalb des gegebenen Bereichs beg , Ende .Und hier ist der Code zum Suchen und Sortieren von Headern:
Die Funktion
c-sort-includes
sucht nach dem ersten Absatz von «#include» und sortiert ihn. Ich habe esbefore-save-hook
mit einem Code hinzugefügt, um es nur für C- und C ++ - Modi auszuführen. Bekannte Nachteile: α) Nur der erste Absatz mit Includes wird sortiert. Das liegt daran, dass die Suche bis zum Ende einer Datei teuer sein kann - z. B. bei meinem Job habe ich kürzlich eine.c
Datei mit gefunden - können Sie sich das überhaupt vorstellen?! - 16000 Zeilen! Die richtige Lösung wäre eher ein kleinerer Modus, der nachverfolgt, wo sich Headerblöcke in der Datei befinden. β) Bei älteren Emacs ab dem Jahr 2015 konnte die Funktion hängen bleiben - es war ein Fehler, der später behoben wurde.quelle