Могу ли я использовать cppcheck при выполнении: wq в редакторе Vim для c / c ++ - PullRequest
2 голосов
/ 08 августа 2011

Я хочу переопределить wq / q / w! / W / q! пользовательскую команду вместе с ее функциональностью.

Пример:

Если я использую: wq для выхода, команда должна выполнить статическую проверку кода этого конкретного файла c / c ++ и выйти.

Пожалуйста, помогите мне в этом случае.

Заранее спасибо.

Ответы [ 4 ]

6 голосов
/ 08 августа 2011

Встроенное решение вашей проблемы называется "автокомандой" в Vim.

Это способ вызова команды в определенное время, например, открытия, сохранения или закрытия буфера.

См. :help autocmd для получения полного списка

. В вашем случае вам необходимо добавить к .vimrc следующую команду

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

  • BufWritePre означает «перед записью в буфер» (вы также можете использовать BufWrite или BufWritePost)
  • *.cpp,*.hpp означает, что команда auto будет применяться только при сохранении файлов cpp или hpp.Вы можете добавить файлы c и h, если хотите.
  • % означает 'путь к текущему буферу'
  • cppcheck должен быть на вашем пути

Вы не переопределяете поведение по умолчанию 'w'но вы используете' hooks 'для добавления пользовательских команд.

3 голосов
/ 08 августа 2011

Я бы этого не делал. Это обязывает нас (ну, на самом деле, вы) сохранять только тогда, когда файл действительно скомпилирован - что не имеет смысла, когда мы должны прервать текущее редактирование, потому что начинается настоятельная встреча, о которой мы забыли; сохранение файла в этой ситуации - нормальный способ продолжить.

Кроме того, какова цель запуска cppcheck на :wq? Как мы можем использовать результат?

Вместо этого у меня будет отображение, которое запускает cppcheck, хотя: make для использования функции быстрого исправления vim (: 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>
0 голосов
/ 23 июня 2015

Возможно, вы захотите, чтобы некоторые вещи были еще лучше, используйте cppcheck и другие проверки во время разработки в vim.

Установите и используйте этот плагин vim: https://github.com/scrooloose/syntastic

0 голосов
/ 03 марта 2013
<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, и я изменил его

...