用于Emacs用户的C语言格式器/美化器

我是一个Linux用户,正在寻找一个代码美化器,它将获取包含C代码的文件并将其格式化为规范。 具体来说,我期待:

  • 将所有缩进更改为8个空格
  • 一致地格式化代码块
  • 一致地添加换行符

如果它既有默认值又有自定义能力,那就太好了。 我更喜欢免费/开源解决方案。 有什么建议?

更新:我还应该注意,我不是emacs用户,因此这可能是特定于emacs的问题。 我已经更新了标签以反映这一点。

Astyle值得一看。

“缩进”和“cb”附带了我曾经拥有的大多数发行版……

你看过GNU缩进了吗?

emacs的? 这可能比你正在寻找的更多,但它会做到……

如果您希望(外部)缩进引擎与Emacs一起使用,您需要确保设置cc模式缩进以匹配。 您可以使用许多内置样式 。 如果它们都不符合您的需求,您可以自定义设置(特别使用的是交互式自定义 )。

另一个较差的解决方案是设置你的before-save-hook来调用缩进方案。 类似于以下内容:

 (add-hook 'c-mode-common-hook (lambda ()) (add-hook (make-local-variable 'before-save-hook) 'indent-it-all)) (defun indent-it-all () "indent the buffer using indent" (shell-command-on-region (point-min) (point-max) "indent" tt)) 

这是我个人使用的,我认为它满足您所有的缩进需求,您可以通过将代码添加到.emacs文件来尝试它。 在编写代码时,此函数会处理正确的缩进:

 (defun linux-c-indent () "adjusted defaults for C/C++ mode use" (interactive) (setq tab-width 8) (setq indent-tabs-mode nil) ;;force spaces, to work with dumber editors (setq c-basic-offset 8) (setq c-set-style "K&R")) (add-hook 'c-mode-common-hook 'linux-c-indent) 

如果我想重新缩进其他人写的文件,我会使用以下内容:

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

每次我在emacs中打开“编程”文件时,iwb函数都会运行。 这样,我总能看到良好的缩进代码。 我也可以提出那些代码,我想要它。