Ответ 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')
Вы поняли.
ПРИМЕЧАНИЕ: Все, что представлено здесь, хорошо проверено и используется мной каждый день.