我正在为Emacs(google-c-style.el)和Vim(google.vim)使用google c缩进样式。
但是因为我有一些不是这种风格的现有代码,我希望我能改变它。我发现有一个名为GNU indent的工具可以自动执行此类操作,它在this page上提供了一些常见的样式设置,但是没有Google c缩进样式。 SO也有同等效力吗?
(我试过Linux和Berkley的风格,并觉得它们对我来说并不令人满意)
答案 0 :(得分:11)
对于记录,对于那些对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
(在revision 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上搜索,还有其他样本;或者您可以参考this site来帮助构建一个。
还有IDE /编辑器的集成,例如Visual Studio(目录clang-format-vs),Sublime,Emacs,Vim(所有目录clang-format)。
另外3个提示:
对于Emacs集成(clang-format.el
),我个人认为最好绑定clang-format-buffer
而不是clang-format-region
的密钥。
对于Mac OSX自制软件安装,使用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中还有其他神话般的工具,例如clang-modernize
(用于“自动转换针对旧标准编写的C ++代码,以使用适当的最新C ++标准“),真的值得一试!
答案 1 :(得分:9)
谷歌编码风格的简要说明显示它主要是K& R编码风格,除了2个空格缩进(包括案例陈述),80个列行和没有标签。因此,以下选项应该实现:
-kr -ci2 -cli2 -i2 -l80 -nut
从那开始。您可能需要调整生成的代码。特别是C ++支持对于indent
来说很弱。
图例:
-kr
:K& R style -ci2
:继续缩进,多行代码语句第一行后面的行缩进2个空格-cli2
:案例标签缩进,case
标签在switch
-i2
:缩进,2个空格-l80
:长度,80列-nut
:没有标签作为替代方案,您可以考虑为您的代码executing emacs
in batch mode to apply indentation。简言之:
创建名为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