vim自动格式化代码转载

让 Vim 在保存文件时自动格式化代码

2020 年 11 月 04 日 2020 年 11 月 05 日 Computer Skills 314
1.5k 3 分钟

写代码时,遵循一定的代码风格是很有必要的。对于这种机械性的工作,我们的主张是要寻找自动化的解决方案。

对于 Vim 和 C++ 的组合,这里推荐以下搭配,并辅以适当配置:

在mingw安装好之后,只需去llvm官网下载llvm软件就可以包含clang-format。同时用plug安装一下插件就好了。

Plug 'Chiel92/vim-autoformat'

安装llvm

官网地址: https://releases.llvm.org/download.html 选择pre-built,预构建好的安装包,并在安装过程中选择加入到系统路径。

配置分为两部分。一是实现在保存文件时自动格式化代码;二是实现在 visual 模式下格式化部分代码。

在保存文件时自动格式化代码
autocmd FileType c,cpp autocmd BufWritePre * :Autoformat

这里对 C 和 C++ 代码,在保存文件之前,自动执行 :Autoformat,以便使用 vim-autoformat 插件调用 clang-format 格式化代码。

在 visual 模式下格式化部分代码

" autoformat
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 模式下格式化选中的行。

这里的意思是,在可视模式选中行之后,就可以,cf对选中的代码格式化了。其中逗号是我定义的leader键。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值