clang-format
是基于clang的一个命令行工具。这个工具能够自动化格式C/C++/Obj-C代码,支持多种代码风格:Google, Chromium, LLVM, Mozilla, WebKit,也支持自定义风格(通过编写.clang-format
文件)。这个工具是我组manager写的。
这个工具非常好用,特别对于我这种习惯了Google Chromium
风格,转去写LLVM
风格代码。尽管注意地去遵守LLLVM风格,但有时还是会出错。clang-format
能去除代码风格的人为错误,从此妈妈再也不用担心code review时的代码风格错误啦。
主要用法:
1 2 3 4 5 6 7 8 9 10 11
| // OS X 需要先安装 brew install clang-format // 以LLVM代码风格格式化main.cpp, 结果输出到stdout clang-format main.cpp -style=LLVM // 以LLVM代码风格格式化main.cpp, 结果直接写到main.cpp clang-format -i main.cpp -style=LLVM // 当然也支持对指定行格式化,格式化main.cpp的第1,2行 clang-format -lines=1:2 main.cpp
|
clang-format
当然少不了与编辑器集成。官网上就有各编辑器集成教程。
vim的集成是通过clang-format.py
脚本实现的,但是发现没有达到我想要的功能。
我想要的是能够通过不同快捷键就能实现LLVM
和Chromium
风格代码的格式化和支持指定行代码的格式化。
幸运的是,已经有别人完成这个工作了,那就是vim-autoformat
插件,把下面代码添加到.vimrc
配置文件里:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| Bundle 'Chiel92/vim-autoformat' "clang-format for formating cpp code nnoremap <leader>cf :call FormatCode("Chromium")<cr> nnoremap <leader>lf :call FormatCode("LLVM")<cr> vnoremap <leader>cf :call FormatCode("Chromium")<CR> vnoremap <leader>lf :call FormatCode("LLVM")<cr> let g:autoformat_verbosemode = 1 func FormatCode(style) let firstline=line(".") let lastline=line(".") " Visual mode if exists(a:firstline) firstline = a:firstline lastline = a:lastline endif let g:formatdef_clangformat = "'clang-format --lines='.a:firstline.':'.a:lastline.' --assume-filename='.bufname('%').' -style=" . a:style . "'" let formatcommand = ":" . firstline . "," . lastline . "Autoformat" exec formatcommand endfunc
|
看看下面的效果:
另外clang-format还提供一个clang-format-diff.py
脚本,用来格式化patch,code review提交代码前,可以先跑一下这个脚本,看有没有问题。
1 2
| // 格式化最新的commit,并直接在原文件上修改 git diff -U0 HEAD^ | clang-format-diff.py -i -p1
|