it-swarm.com.de

Automatische Formatierung einer Quelldatei in Emacs

Wie wende ich einen Satz von Formatierungsregeln auf eine vorhandene Quelldatei in Emacs an?

Ich habe zwar eine Assembly (*.s) -Datei, möchte aber einen generischen Befehl für alle Arten von Dateien.

Ich versuche, M-x c-set-style mit gnu style zu verwenden, erhalte aber eine Fehlermeldung:

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

46
Yuval Adam

Öffnen Sie die Datei und rücken Sie sie ein, indem Sie die gesamte Region 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, C-Eindruck auf einen Puffer anzuwenden, der nicht im C-Modus ist. Um in den C-Modus zu gelangen

M-x c-mode

Oder c++-mode oder welcher Modus Sie auch möchten. Da es sich jedoch um Assembler-Code handelt, möchten Sie wahrscheinlich den Assembler-Modus (den Emacs standardmäßig für .s-Dateien verwendet). In diesem Fall sollte der Einrückungsbefehl (C-M-\ ist auch als M-x indent-region bezeichnet) für Sie funktionieren.

Hinweis: Die Befehlssequenz oben kann wie folgt in einen einzigen Befehl gerollt 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)))

Wenn Sie lernen möchten, wie Major-Modi Dateien mit Erweiterungen zugeordnet werden, lesen Sie die Dokumentation für Auto-Mode-Alist . Um fair zu sein, ist es nicht unbedingt eine Erweiterung, sondern reguläre Ausdrücke, die mit dem Dateinamen abgeglichen werden.

107
Trey Jackson

Versuchen Sie M-x asm-mode. Das wechselt in den Assembler-Modus. Sie sind sich nicht sicher, wie der Assembler in einer C-Datei eingebettet wird.

7
pgs

wenn Sie den aktuellen Puffer einrücken möchten

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

emacs verwendet die Dateinamenerweiterung, um den Modus zu identifizieren. Sie sollten einen Assembler-Sprachmodus in Ihre custom.el-Datei einfügen

1
cppguy

wenn Sie von der Befehlszeile aus einrücken möchten, verwenden Sie:

emacs --batch  <filenames.v>  -f verilog-batch-indent
0
Srihari K.P

Der Hauptmodus, der für Ihre .s-Dateien verwendet wird, ist nicht cc-mode, daher macht c-set-style keinen Sinn. Sie können jedoch jederzeit den cc-Modus (M-x cc-Modus) manuell aufrufen und dann den gewünschten c-set-Stil ausführen. Da die C-Stile jedoch für C-Quellcode und nicht für Assembler festgelegt sind, ist dies mit nicht das, was Sie tun möchten.

0
stsquad