在emacs中自动格式化源文件

在emacs中自动格式化源文件,emacs,formatting,Emacs,Formatting,如何将一组格式化规则应用于emacs中的现有源文件 具体地说,我有一个程序集(*.s)文件,但我希望所有类型的文件都有一个通用命令 我试图将M-x c-set-style与gnu样式一起使用,但我得到一个错误: 缓冲区*.s不是CC模式缓冲区(c-set-style) emacs将使用文件扩展名来标识模式,您应该在custom.el文件中添加一些汇编语言模式样式尝试M-x asm模式。这将切换到汇编模式。不确定在C文件中间嵌入的汇编程序将如何运行。打开文件,然后缩进整个区域: M-x find-

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

具体地说,我有一个程序集(
*.s
)文件,但我希望所有类型的文件都有一个通用命令

我试图将
M-x c-set-style
gnu
样式一起使用,但我得到一个错误:

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


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

尝试
M-x asm模式
。这将切换到汇编模式。不确定在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++-模式
,或者您想要的任何模式。但是,因为它是汇编代码,所以您可能需要汇编模式(Emacs默认情况下对.s文件使用汇编模式)。在这种情况下,上面的缩进命令(
C-M-\
也称为
M-x缩进区域
)应该适用于您

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

(取消缩进文件(文件)
“提示输入文件并根据其主模式缩进”
(交互式“您要缩进哪个文件:”)
(查找文件)
;取消注释下一行以强制缓冲区进入c模式
(c模式)
(缩进区域(最小点)(最大点)))

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

它用于.s文件的主模式不是cc模式,因此c-set-style毫无意义。但是,您始终可以手动进入cc模式(M-x cc模式),然后执行所需的c-set样式。然而,由于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——批处理-f verilog批处理缩进

最好使用emacs问题,以注意击键绑定到什么。也就是说,
M-还有,'C-xh'(标记整个缓冲区)以稍微少一点的步骤选择所有内容,即使您使用的是瞬态标记模式,它也能工作。@Jouni,感谢C-xh,我不知道这一点。合并了解决方案。不适用于25.1.1错误数量的参数:(lambda(numSpaces)(progn(..@Maven需要更多信息。在我的25.1.1中效果很好。错误数量的参数显示了一个
numSpaces
,我在上面编写的代码中没有看到,这让我相信还有其他一些依赖项没有显示。这很完美。我在保存之前添加了钩子。效果很好。您的命令行很有趣。我会ld更愿意添加:
emacs--batch code.c-f mark whole buffer-f indent region--eval“(princ(buffer string))“2>/dev/null
。这样代码就会被回送到终端