【问题标题】:Auto-formatting a source file in emacs在 emacs 中自动格式化源文件
【发布时间】:2010-11-02 19:45:01
【问题描述】:

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

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

我正在尝试将 M-x c-set-stylegnu 样式一起使用,但出现错误:

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

【问题讨论】:

    标签: emacs formatting


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      试试M-x asm-mode。这将切换到汇编模式。不知道它会如何与嵌入在 C 文件中间的汇编程序一起使用。

      【讨论】:

        【解决方案3】:

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

        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。公平地说,它不一定是基于扩展名的,只是与文件名匹配的正则表达式。

        【讨论】:

        • 最好用 emacs 问题来记录击键绑定的内容。 IE。 M-< 通常绑定到 beginning-of-buffer。使用C-h k 获取击键帮助。
        • 此外,`C-x h' (mark-whole-buffer) 选择所有内容的步骤略少,即使您使用瞬态标记模式也能正常工作。
        • @Jouni,感谢 C-x h,我不知道。纳入解决方案。
        • 无法在 25.1.1 错误数量的参数中工作:(lambda (numSpaces) (progn ( ....
        • @Maven 需要更多信息。在我的 25.1.1 中效果很好。错误数量的参数显示了numSpaces,我在上面编写的代码中没有看到,这让我相信还有其他一些你没有显示的依赖项。
        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          如果你想缩进当前缓冲区

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

          【讨论】:

          • 这是完美的。我在保存之前添加了钩子。完美运行。
          【解决方案6】:

          如果你想从命令行缩进:

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

          【讨论】:

          • 你的命令行很有趣。我宁愿添加:emacs --batch code.c -f mark-whole-buffer -f indent-region --eval "(princ (buffer-string))" 2&gt;/dev/null。使代码回显到终端
          猜你喜欢
          • 1970-01-01
          • 2015-01-11
          • 1970-01-01
          • 1970-01-01
          • 2012-09-25
          • 2010-12-07
          • 1970-01-01
          相关资源
          最近更新 更多