我正在为 Emacs ( google-c-style.el ) 和 Vim ( google.vim ) 使用 google c 缩进样式。
但是因为我有一些不是这种风格的现有代码,我希望我能改变它。我发现有一个名为 GNU indent 的工具可以自动执行此类操作,并且它在此页面上提供了一些常见的样式设置,但是 Google c 缩进样式没有。那么它也有等价物吗?
(我试过Linux和Berkley的风格,觉得对我来说一点都不满意)
我正在为 Emacs ( google-c-style.el ) 和 Vim ( google.vim ) 使用 google c 缩进样式。
但是因为我有一些不是这种风格的现有代码,我希望我能改变它。我发现有一个名为 GNU indent 的工具可以自动执行此类操作,并且它在此页面上提供了一些常见的样式设置,但是 Google c 缩进样式没有。那么它也有等价物吗?
(我试过Linux和Berkley的风格,觉得对我来说一点都不满意)
作为记录,对于那些对 Clang 和 LLVM 感兴趣的人来说,有一个替代解决方案。
clang-format绝对可以帮助轻松有效地格式化现有源代码。它具有对 5 种格式的显式内置支持,即(默认LLVM
)、、、、、。Google
Chromium
Mozilla
WebKit
使用 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个提示:
对于 Emacs 集成(clang-format.el
),我个人认为最好为 key 绑定clang-format-buffer
而不是clang-format-region
.
对于 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
!!)。
clang-extra-tools中还有其他很棒的工具,例如(用于“自动将针对旧标准编写的 C++ 代码转换为在适当的情况下使用最新 C++ 标准的功能”),真的值得一试!clang-modernize
对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