50 Stimmen

Automatische Formatierung einer Quelldatei in emacs

Wie wende ich eine Reihe von Formatierungsregeln auf eine bestehende Quelldatei in emacs an?

Konkret habe ich eine Baugruppe ( *.s ), aber ich hätte gerne einen allgemeinen Befehl für alle Arten von Dateien.

Ich versuche zu verwenden M-x c-set-style con gnu Stil, aber ich erhalte einen Fehler:

Puffer *.s ist kein CC-Modus-Puffer (c-set-style)

120voto

Trey Jackson Punkte 72000

Öffnen Sie die Datei und rücken Sie sie ein, indem Sie den gesamten Bereich einrücken:

M-x find-file /path/to/file RET
C-x h                             (M-x mark-whole-buffer)
C-M-\                             (M-x indent-region)

Nun sieht es so aus, als ob Sie versuchen, die C-Einrückung auf einen Puffer anzuwenden, der sich nicht im C-Modus befindet. Um ihn in den C-Modus zu bringen

M-x c-mode

O c++-mode oder einen anderen Modus. Da es sich aber um Assembler-Code handelt, wollen Sie wahrscheinlich den Assembler-Modus (den Emacs standardmäßig für .s-Dateien verwendet). In diesem Fall wird der obige Einrückungsbefehl ( C-M-\ ist auch bekannt als M-x indent-region ) sollte für Sie funktionieren.

Hinweis: Die Befehlssequenz oben kann zu einem einzigen Befehl wie diesem zusammengefasst werden:

(defun indent-file (file)
  "prompt for a file and indent it according to its major mode"
  (interactive "fWhich file do you want to indent: ")
  (find-file file)
  ;; uncomment the next line to force the buffer into a c-mode
  ;; (c-mode)
  (indent-region (point-min) (point-max)))

Und wenn Sie lernen wollen, wie man Major-Modes mit Dateien auf der Basis von Erweiterungen verknüpft, schauen Sie sich die Dokumentation für auto-mode-alist . Fairerweise muss man sagen, dass es sich nicht unbedingt um eine Erweiterung handelt, sondern nur um reguläre Ausdrücke, die mit dem Dateinamen abgeglichen werden.

2 Stimmen

Am besten notiert man sich bei emacs-Fragen, woran die Tastenanschläge gebunden sind. D.h. M-< ist normalerweise gebunden an beginning-of-buffer . Verwenden Sie C-h k für die Hilfe bei Tastatureingaben.

4 Stimmen

Auch "C-x h" (mark-whole-buffer) wählt alles in etwas weniger Schritten aus und funktioniert auch, wenn Sie den Modus "Transient-mark" verwenden.

0 Stimmen

@Jouni, danke für C-x h, das wusste ich nicht. Habe die Lösung eingebaut.

7voto

pgs Punkte 12237

Versuchen Sie M-x asm-mode . Dadurch wird in den Assemblermodus gewechselt. Ich bin mir nicht sicher, wie es mit Assembler inmitten einer C-Datei funktioniert.

4voto

user1990 Punkte 490

Wenn Sie den aktuellen Puffer einrücken wollen

(defun iwb ()
  "indent whole buffer"
  (interactive)
  (delete-trailing-whitespace)
  (indent-region (point-min) (point-max) nil)
  (untabify (point-min) (point-max)))

0 Stimmen

Das ist perfekt. Ich habe add-hook vor dem Speichern. Funktioniert perfekt.

1voto

cppguy Punkte 189

Emacs verwendet die Dateinamenserweiterung, um den Modus zu identifizieren, Sie sollten einen Stil für die Zusammenstellung des Sprachmodus in Ihre custom.el-Datei aufnehmen

0voto

stsquad Punkte 5573

Der Hauptmodus, der für Ihre .s-Dateien verwendet wird, wird nicht der cc-Modus sein, daher macht c-set-style keinen Sinn. Sie können jedoch immer manuell den cc-mode eingeben (M-x cc-mode) und dann den gewünschten c-set-style verwenden. Da die C-Stile jedoch für C-Quellcode und nicht für Assembler verschlüsselt sind, ist dies fast sicher no was Sie tun wollen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X