web-dev-qa-db-ja.com

emacsでソースファイルを自動フォーマットする

Emacsの既存のソースファイルに一連のフォーマットルールを適用するにはどうすればよいですか?

具体的には、アセンブリ(*.s)ファイルがありますが、すべての種類のファイルの汎用コマンドが必要です。

gnuスタイルでM-x c-set-styleを使用しようとしていますが、エラーが発生しています:

バッファー* .sはCCモードバッファーではありません(c-set-style)

46
Yuval Adam

ファイルを開き、リージョン全体をインデントしてインデントします。

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

これで、CモードではないバッファーにCインデントを適用しようとしているように見えます。 Cモードにするには

M-x c-mode

またはc++-mode、または任意のモード。しかし、それはアセンブラーコードなので、おそらくアセンブラーモードが必要です(Emacsはデフォルトで.sファイルに対してこれを行います)。その場合、上記のインデントコマンド(C-M-\M-x indent-regionとも呼ばれます)が機能します。

注:上部のコマンドシーケンスは、次のように1つのコマンドにまとめることができます。

(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)))

また、拡張子に基づいてメジャーモードとファイルを関連付ける方法を学習する場合は、 auto-mode-alistのドキュメント を確認してください。公平を期すために、それは必ずしも拡張子ベースではなく、ファイル名と一致する正規表現だけです。

109
Trey Jackson

M-x asm-mode。これにより、アセンブラーモードに切り替わります。 Cファイルの中央に組み込まれたアセンブラでどのように動作するかはわかりません。

7
pgs

現在のバッファーをインデントする場合

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

emacsはファイル名拡張子を使用してモードを識別します。custom.elファイルにアセンブル言語モードスタイルを追加する必要があります

1
cppguy

コマンドラインからインデントしたい場合:

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

.sファイルに使用しているメジャーモードはccモードではないため、c-set-styleは意味がありません。ただし、いつでも手動でcc-mode(M-x cc-mode)に入り、その後、希望するc-set-styleを実行できます。ただし、CスタイルはアセンブラではなくCソースコードに対応しているため、これはほぼ確実にnotしたいことです。

0
stsquad