我可以在执行时使用cppcheck:wq在Vim编辑器中用于c / c ++

时间:2011-08-08 12:01:07

标签: vim cppcheck

我想覆盖wq / q / w!/ w / q!用户定义的命令及其功能。

示例:

如果我使用:wq退出,该命令应该对该特定c / c ++文件进行静态代码检查并退出。

请在这种情况下帮助我。

提前致谢。

4 个答案:

答案 0 :(得分:6)

您的问题的内置解决方案在Vim中称为“自动命令”。

这是一种在特定时间调用命令的方法,如打开,保存或关闭缓冲区。

有关完整列表,请参阅:help autocmd

在您的情况下,您应该添加.vimrc以下命令

autocmd BufWritePre *.cpp,*.hpp !cppcheck %

  • BufWritePre表示“在写入缓冲区之前”(您也可以使用BufWriteBufWritePost
  • *.cpp,*.hpp表示仅在保存cpp或hpp文件时应用auto命令。如果需要,您可以添加c和h文件。
  • %表示“当前缓冲区的路径”
  • cppcheck必须在您的路径中

您没有覆盖'w'的defaut行为,但您使用'hooks'来添加自定义命令。

答案 1 :(得分:3)

我不会这样做。它迫使我们(实际上,你实际上)只在文件真正可编辑时保存 - 当我们不得不中止当前编辑时没有任何意义,因为我们忘记的敦促会议即将开始;在这种情况下保存文件是正常的继续进行。

此外,在:wq上运行cppcheck的目的是什么?我们如何利用结果?

相反,我有一个运行cppcheck的映射,但是:make是为了利用vim quickfix功能(:h quickfix)

function s:Check()
  try
    let save_makeprg=&makeprg
    set makeprg=cppcheck
    " you may have to specify other files/extensions
    :make *.cpp *.hpp
  finally
    let &makeprg=save_makeprg
  endtry
endfunction
nnoremap <buffer> <c-f7> :call <sid>Check()<cr>

答案 2 :(得分:0)

<block>
function FunForQuickfix(makeprgIn, makeefmIn)
  try
    let save_makeprg=&makeprg
    let save_makeefm=&efm
    let &makeprg=a:makeprgIn
    let &efm=a:makeefmIn
    :wa
    :make
    :cw
  finally
    let &makeprg=save_makeprg
    let &efm=save_makeefm
  endtry
endfunction

function CompileAndRunTestCodeByScons()
  call FunForQuickfix('scons . -j8 -u', '%f:%l:%c:\ %m,%f:%l:\ %m,build/release64/%f:%l:%c:\ %m,build/release64/%f:%l:\ %m,%f\|%l\|,build/release64/%f:%s,%m:%l:Assertion,%sExpression:\ false,scons:\ building\ terminated\ because\ of\ errors,%sError%m')
endfunction
function CppCheck()
  call FunForQuickfix("cppcheck *.cpp -j 8 --enable=all", "\[%f:%l\]:\ %m")
endfunction
nmap ma :wa<CR>:call CompileAndRunTestCodeByScons()<CR>
nmap mc :wa<CR>:call CppCheck()<CR>
nmap <F3> :cp<cr>
nmap <F4> :cn<cr>

</block>

在〜/ .vimrc中添加,然后使用ma编译代码,使用mc运行cppcheck 这段代码是Luc Hermitte的副本,我改变了它

答案 3 :(得分:0)

你可能想要更好的东西,在vim中开发时使用cppcheck和其他检查。

安装并使用该vim插件:https://github.com/scrooloose/syntastic