У меня есть следующий код в моем проекте:
class RangeConverter {
private:
struct Converter {
double MinimumInput;
double MaximumInput;
double MinimumOutput;
double MaximumOutput;
template <typename RangeType>
RangeType Convert ( RangeType invalue ) const {
double v = static_cast<double> ( invalue );
if ( v < MinimumInput ) {
v = MinimumInput;
} else if ( v > MaximumInput ) {
v = MaximumInput;
}
double interpolationfactor = ( v - MinimumInput ) / ( MaximumInput - MinimumInput );
return static_cast<RangeType> ( ( interpolationfactor * ( MaximumOutput - MinimumOutput ) ) + MinimumOutput );
}
};
.....
После форматирования этого кода с помощью AStyle я получаю следующее:
class RangeConverter {
private:
struct Converter {
ngeConverter {
private:
struct Converter {
double MinimumInput;
double MaximumInput;
double MinimumOutput;
double MaximumOutput;
template <typename RangeType>
RangeType Convert ( RangeType invalue ) const {
double v = static_cast<double> ( invalue );
if ( v < MinimumInput ) {
v = MinimumInput;
} else if ( v > MaximumInput ) {
v = MaximumInput;
}
double interpolationfactor = ( v - MinimumInput ) / ( MaximumInput - MinimumInput );
return static_cast<RangeType> ( ( interpolationfactor * ( MaximumOutput - MinimumOutput ) ) + MinimumOutput );
}
};
.....
Команда astyle:
astyle
\ --style=java
\ --indent=force-tab=2
\ --indent-classes
\ --indent-switches
\ --indent-labels
\ --indent-preprocessor
\ --indent-col1-comments
\ --pad-oper
\ --pad-paren
\ --delete-empty-lines
\ --add-brackets
\ --align-pointer=type
\ --align-reference=type
Это ошибка в стиле, или я забыл какие-либо варианты?
Если это ошибка, что вы могли бы предложить отформатировать код C ++ с VIM?
Конечно, это ошибка. AStyle не поддерживается в наши дни. Есть много ошибок, которые сидели там вечно и никогда не были решены. Не стоит ожидать улучшения ситуации в ближайшее время. Я настоятельно рекомендую перейти на Uncrustify. Конечно, у него тоже есть некоторые проблемы, но они не такие неприятные и не нарушают ваш код, как это делает AStyle. Он имеет сотни вариантов конфигурации — гораздо более гибкий, чем AStyle — поэтому наберитесь терпения, вам придется потратить немало времени, чтобы настроить его под свои вкусы и условности.
Когда вы закончите и если вы хотите правильно интегрировать его с 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, особенно для C ++, и добавить туда следующую строку:
autocmd BufWritePre <buffer> :call Uncrustify('cpp')
Это в основном добавляет ловушку перед сохранением. Теперь, когда вы сохраняете файл с кодом C ++, он будет автоматически отформатирован Uncrustify с использованием файла конфигурации, который вы указали ранее.
НОТАВсе представленное здесь хорошо проверено и используется мной каждый день.
Других решений пока нет …