在emacs中自动格式化源文件

时间:2009-06-14 11:49:10

标签: emacs formatting

如何将一组格式规则应用于emacs中的现有源文件?

具体来说,我有一个程序集(*.s)文件,但我想要一个适用于所有类型文件的通用命令。

我正在尝试使用M-x c-set-style gnu样式,但我收到错误:

  
    

缓冲区* .s不是CC模式缓冲区(c-set-style)

  

6 个答案:

答案 0 :(得分:109)

打开文件,然后通过缩进整个区域来缩进它:

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)应该适合您。

注意:顶部的命令序列可以滚动到一个命令中,如下所示:

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

而且,如果您想了解如何将主要模式与基于扩展名的文件相关联,请查看documentation for auto-mode-alist。公平地说,它不一定是基于扩展的,只是与文件名匹配的正则表达式。

答案 1 :(得分:7)

试试M-x asm-mode。这将切换到汇编程序模式。不确定嵌入在C文件中间的汇编程序会如何。

答案 2 :(得分:3)

如果你想要缩进当前缓冲区

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

答案 3 :(得分:1)

emacs将使用文件扩展名来标识模式,您应该在custom.el文件中添加一些汇编语言模式样式

答案 4 :(得分:0)

它用于.s文件的主要模式不是cc模式,因此c-set-style没有意义。但是,您始终可以手动输入cc模式(M-x cc模式),然后执行所需的c-set风格。但是,由于C样式是C源代码的键控而不是汇编程序,因此几乎可以肯定你想要做什么。

答案 5 :(得分:0)

如果要从命令行缩进,请使用:

emacs --batch  <filenames.v>  -f verilog-batch-indent