【问题标题】:Can I use cppcheck when I execute :wq in Vim editor for c/c++我可以在 C/c++ 的 Vim 编辑器中执行 :wq 时使用 cppcheck
【发布时间】:2011-08-08 12:01:07
【问题描述】:

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

例子:

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

在这种情况下请帮助我。

提前致谢。

【问题讨论】:

    标签: vim cppcheck


    【解决方案1】:

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

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

    查看:help autocmd查看完整列表

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

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

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

    您没有覆盖“w”的默认行为,而是使用“钩子”添加自定义命令。

    【讨论】:

      【解决方案2】:

      我不会那样做。它迫使我们(实际上是您)仅在文件真正可编译时才保存——当我们不得不中止当前的编辑时,这是没有意义的,因为我们已经忘记的催促会议即将开始;在这种情况下保存文件是正常的处理方式。

      此外,在: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>
      

      【讨论】:

        【解决方案3】:
        <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 复制的,我更改了它

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-12-30
            • 2018-06-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-09-06
            • 1970-01-01
            相关资源
            最近更新 更多