Подтвердить что ты не робот

Использование Uncrustify с VIM

В моем vimrc я вызываю Uncrustify с помощью этой команды:

%!uncrustify -l CPP -c D:\uncrustify\default.cfg

После этого на каком-то коде я получаю Неустранимая ошибка Windows:

Но когда я вызываю uncrustify на тот же код в консоли, используя опцию -f, ошибки нет.

Как я могу изменить vimrc, чтобы избежать таких ошибок в будущем? Что может вызвать эту ошибку?

4b9b3361

Ответ 1

Чтобы правильно интегрировать Uncrustify с Vim, добавьте следующее к вашему .vimrc:

" Restore cursor position, window position, and last search after running a
" command.
function! Preserve(command)
  " Save the last search.
  let search = @/

  " Save the current cursor position.
  let cursor_position = getpos('.')

  " Save the current window position.
  normal! H
  let window_position = getpos('.')
  call setpos('.', cursor_position)

  " Execute the command.
  execute a:command

  " Restore the last search.
  let @/ = search

  " Restore the previous window position.
  call setpos('.', window_position)
  normal! zt

  " Restore the previous cursor position.
  call setpos('.', cursor_position)
endfunction

" Specify path to your Uncrustify configuration file.
let g:uncrustify_cfg_file_path =
    \ shellescape(fnamemodify('~/.uncrustify.cfg', ':p'))

" Don't forget to add Uncrustify executable to $PATH (on Unix) or 
" %PATH% (on Windows) for this command to work.
function! Uncrustify(language)
  call Preserve(':silent %!uncrustify'
      \ . ' -q '
      \ . ' -l ' . a:language
      \ . ' -c ' . g:uncrustify_cfg_file_path)
endfunction

Теперь вы можете сопоставить эту функцию (Uncrustify) с комбинацией клавиш, или вы можете сделать удобный трюк, который я использую. Создайте файл ~/.vim/after/ftplugin/cpp.vim, где вы можете переопределить любые настройки Vim, особенно для С++, и добавить туда следующую строку:

autocmd BufWritePre <buffer> :call Uncrustify('cpp')

В основном это добавляет крюк предварительного сохранения. Теперь, когда вы сохраняете файл с кодом С++, он будет автоматически отформатирован Uncrustify, используя ранее созданный файл конфигурации.

Например, то же самое можно было бы сделать для Java: в ~/.vim/after/ftplugin/java.vim добавить:

autocmd BufWritePre <buffer> :call Uncrustify('java')

Вы поняли.

ПРИМЕЧАНИЕ: Все, что представлено здесь, хорошо проверено и используется мной каждый день.