我的项目中有以下代码:
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
这是astyle的错误,还是我忘了任何选择? 如果它是一个错误,你有什么建议用VIM格式化C ++代码?
答案 0 :(得分:1)
当然,这是一个错误。如今,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自动格式化。
注意:此处展示的所有内容都经过了充分测试,并且每天都在使用。