在emacs中自动格式化源文件

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

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

我想用gnu风格的Mx c-set-style风格,但我得到一个错误:

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

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

 Mx find-file /path/to/file RET Cx h (Mx mark-whole-buffer) CM-\ (Mx indent-region) 

现在,看起来你正试图将C缩进应用到一个不处于C模式的缓冲区。 为了进入C模式

 Mx c-mode 

或者c++-mode ,或者你想要的任何模式。 但是,由于是汇编代码,因此您可能需要汇编模式(Emacs默认为.s文件执行)。 在这种情况下,上面的缩进命令( CM-\也被称为Mx 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))) 

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

尝试Mx asm-mode 。 这将切换到汇编模式。 不知道如何将汇编器embedded到C文件的中间。

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

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

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

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

如果你想从命令行缩进使用:

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