【发布时间】:2010-11-02 19:45:01
【问题描述】:
如何将一组格式规则应用于 emacs 中的现有源文件?
具体来说,我有一个程序集 (*.s) 文件,但我想要一个适用于所有类型文件的通用命令。
我正在尝试将 M-x c-set-style 与 gnu 样式一起使用,但出现错误:
缓冲区 *.s 不是 CC 模式缓冲区(c-set-style)
【问题讨论】:
标签: emacs formatting
如何将一组格式规则应用于 emacs 中的现有源文件?
具体来说,我有一个程序集 (*.s) 文件,但我想要一个适用于所有类型文件的通用命令。
我正在尝试将 M-x c-set-style 与 gnu 样式一起使用,但出现错误:
缓冲区 *.s 不是 CC 模式缓冲区(c-set-style)
【问题讨论】:
标签: emacs formatting
emacs 将使用文件扩展名来识别模式,你应该在你的 custom.el 文件中添加一些汇编语言模式样式
【讨论】:
试试M-x asm-mode。这将切换到汇编模式。不知道它会如何与嵌入在 C 文件中间的汇编程序一起使用。
【讨论】:
打开文件,然后通过缩进整个区域来缩进它:
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。公平地说,它不一定是基于扩展名的,只是与文件名匹配的正则表达式。
【讨论】:
M-< 通常绑定到 beginning-of-buffer。使用C-h k 获取击键帮助。
numSpaces,我在上面编写的代码中没有看到,这让我相信还有其他一些你没有显示的依赖项。
它用于 .s 文件的主要模式不会是 cc-mode,因此 c-set-style 没有意义。但是,您始终可以手动输入 cc-mode (M-x cc-mode),然后执行您想要的 c-set-style。然而,由于 C 样式是针对 C 源代码而不是汇编程序键入的,这几乎可以肯定 不是您想要做的。
【讨论】:
如果你想缩进当前缓冲区
(defun iwb ()
"indent whole buffer"
(interactive)
(delete-trailing-whitespace)
(indent-region (point-min) (point-max) nil)
(untabify (point-min) (point-max)))
【讨论】:
如果你想从命令行缩进:
emacs --batch <filenames.v> -f verilog-batch-indent
【讨论】:
emacs --batch code.c -f mark-whole-buffer -f indent-region --eval "(princ (buffer-string))" 2>/dev/null。使代码回显到终端