如何将一组格式规则应用于emacs中的现有源文件?
具体来说,我有一个程序集(*.s
)文件,但我想要一个适用于所有类型文件的通用命令。
我正在尝试使用M-x c-set-style
gnu
样式,但我收到错误:
缓冲区* .s不是CC模式缓冲区(c-set-style)
答案 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