11

我正在为 Emacs ( google-c-style.el ) 和 Vim ( google.vim ) 使用 google c 缩进样式。

但是因为我有一些不是这种风格的现有代码,我希望我能改变它。我发现有一个名为 GNU indent 的工具可以自动执行此类操作,并且它在此页面上提供了一些常见的样式设置,但是 Google c 缩进样式没有。那么它也有等价物吗?

(我试过Linux和Berkley的风格,觉得对我来说一点都不满意)

4

2 回答 2

13

作为记录,对于那些对 Clang 和 LLVM 感兴趣的人来说,有一个替代解决方案。

clang-format绝对可以帮助轻松有效地格式化现有源代码。它具有对 5 种格式的显式内置支持,即(默认LLVM)、、、、、。GoogleChromiumMozillaWebKit

使用 Google 样式格式化文件的最简单方法是:

clang-format -style=Google -i filename

其中-i意味着就地修改,您可以尝试不使用此选项来预览更改。

要批量格式化现有的 C/C++ 代码,我们可以简单地使用如下命令:

find . -name "*.cc" | xargs clang-format -style=Google -i

除了列出的 5 种格式之外,实际上还有其他样式GNU(在修订版 197138中添加;遗憾的是文档未同步)。

请注意,clang-format 在项目中接受名为.clang-format_clang-format的 rc 类文件,添加此类配置文件的最简单方法(如 clang-format 的官方教程页面中所述)是转储现有配置文件格式如:

clang-format -style=Google -dump-config >.clang-format

此外,您还可以使用BasedOnStyle选项,因此配置文件可能如下所示:

---
BasedOnStyle:  Chromium
PointerBindsToType: false
ObjCSpaceAfterProperty: true
...

使用.clang-format_clang-format作为关键字在 Github 上搜索,还有其他示例;或者你可以参考这个网站来帮助建立一个。

IDE/编辑器也有集成,例如 Visual Studio(在目录clang-format-vs中)、Sublime、Emacs、Vim(都在目录clang-format中)。

另外3个提示:

  1. 对于 Emacs 集成(clang-format.el),我个人认为最好为 key 绑定clang-format-buffer而不是clang-format-region.

  2. 对于 Mac OSX homebrew 安装,使用brew install --with-clang, --with-lld, --with-python --HEAD llvm可以获得clang-format支持,并且它的集成文件在$(brew --cache)/llvm--clang--svn-HEAD/tools/clang-format(奖励:那里甚至有一个git-clang-format!!)。

  3. clang-extra-tools中还有其他很棒的工具,例如(用于“自动将针对旧标准编写的 C++ 代码转换为在适当的情况下使用最新 C++ 标准的功能”),真的值得一试!clang-modernize

于 2014-12-17T16:53:10.990 回答
10

对google编码风格的简要阅读表明,它主要是K&R编码风格,除了有2个空格缩进(包括case语句)、80列行和没有制表符。因此,以下选项应该可以实现:

-kr -ci2 -cli2 -i2 -l80 -nut

从那开始。您可能需要调整生成的代码。特别是 C++ 支持对于indent.

传奇:

  • -kr: K&R风格
  • -ci2: 继续缩进,多行代码语句第一行之后的行缩进 2 个空格
  • -cli2: 大小写标签缩进,case标签缩进 2 个空格switch
  • -i2:缩进,2个空格
  • -l80:长度,80 列
  • -nut: 没有标签

作为替代方案,您可以考虑以批处理模式执行emacs,以便为您的代码应用缩进。简要地:

创建一个名为的文件emacs-format-file,其内容为:

(defun emacs-format-function ()
   "Format the whole buffer."
   (c-set-style "Google")
   (indent-region (point-min) (point-max) nil)
   (untabify (point-min) (point-max))
   (save-buffer))

从 shell 执行以下命令:

emacs -batch your_source_file.c \
    -l emacs-format-file -f emacs-format-function
于 2013-06-13T07:08:11.030 回答