写代码时,遵循一定的代码风格是很有必要的。对于这种机械性的工作,我们的主张是要寻找自动化的解决方案。
对于 Vim 和 C++ 的组合,这里推荐以下搭配,并辅以适当配置:
配置分为两部分。一是实现在保存文件时自动格式化代码;二是实现在 visual 模式下格式化部分代码。
在保存文件时自动格式化代码1
   | autocmd FileType c,cpp autocmd BufWritePre * :Autoformat
   | 
 
这里对 C 和 C++ 代码,在保存文件之前,自动执行 :Autoformat,以便使用 vim-autoformat 插件调用 clang-format 格式化代码。
在 visual 模式下格式化部分代码1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
   |  nnoremap <leader>ff :call FormatCode("", "file")<CR> vnoremap <leader>ff :call FormatCode(visualmode(), "file")<CR> nnoremap <leader>gf :call FormatCode("", "Google")<CR> vnoremap <leader>gf :call FormatCode(visualmode(), "Google")<CR> nnoremap <leader>cf :call FormatCode("", "Chromium")<CR> vnoremap <leader>cf :call FormatCode(visualmode(), "Chromium")<CR> nnoremap <leader>lf :call FormatCode("", "LLVM")<CR> vnoremap <leader>lf :call FormatCode(visualmode(), "LLVM")<CR>
  func! FormatCode(exe_mode, style) range   if a:exe_mode == ""     let firstline_no = 1     let lastline_no = line("$")   else     let firstline_no = a:firstline     let lastline_no = a:lastline   endif   let l:save_formatdef = g:formatdef_clangformat   let l:tmpa = join(["clang-format --lines=", firstline_no, ":", lastline_no], "")   let g:formatdef_clangformat = "'" . l:tmpa . " --assume-filename=' . bufname('%') . ' -style=" . a:style . "'"   let formatcommand = ":Autoformat"   exec formatcommand   let g:formatdef_clangformat = l:save_formatdef endfunc
 
  | 
 
这里利用 range 函数,根据调用时的所在的模式的不同,格式化整个文件,或者是在 Visual 模式下格式化选中的行。