ste*_*anB 6 c++ vim templates pretty-print indentation
有没有人知道或者知道vim插件/宏/函数是否能很好地缩进c ++模板?
当我在vim .hpp/.h文件中突出显示模板定义并用'='缩进它时,我得到这样的结果:
> template <
> class TFilter,
> class TParser,
> class TConsumer,
> class TDataProcessor,
> class TDataFeed,
> class TSymbolMap
> >
> struct DataFeedTraits
> {
> typedef TFilter Filter;
> typedef TParser<TSymbolMap> Parser;
> typedef TConsumer<Parser> Consumer;
> typedef TDataProcessor<Filter,Consumer> DataProcessor;
> typedef TDataFeed<Filter,DataProcessor,Parser,Ccnsumer> DataFeed;
> };
Run Code Online (Sandbox Code Playgroud)
我认为cindent将struct/class声明与结束括号">"对齐.我想最终得到类似的东西,或类似的,确切的格式无关紧要,只要格式化:
template <
class TFilter,
class TParser,
class TConsumer,
class TDataProcessor,
class TDataFeed,
class TSymbolMap
>
struct DataFeedTraits
{
typedef TFilter Filter;
typedef TParser<TSymbolMap> Parser;
typedef TConsumer<Parser> Consumer;
typedef TDataProcessor<Filter,Consumer> DataProcessor;
typedef TDataFeed<Filter,DataProcessor,Parser,Ccnsumer> DataFeed;
};
Run Code Online (Sandbox Code Playgroud)
我的解决方案:
" 不要缩进命名空间和模板 功能!CppNoNamespaceAndTemplateIndent() 让 l:cline_num = line('.') 让 l:cline = getline(l:cline_num) 让 l:pline_num = prevnonblank(l:cline_num - 1) 让 l:pline = getline(l:pline_num) while l:pline =~# '\(^\s*{\s*\|^\s*//\|^\s*/\*\|\*/\s*$\)' 让 l:pline_num = prevnonblank(l:pline_num - 1) 让 l:pline = getline(l:pline_num) 最后 让 l:retv = cindent('.') 让 l:pindent = 缩进(l:pline_num) if l:pline =~# '^\s*template\s*\s*$' 让 l:retv = l:pindent elseif l:pline =~# '\s*类型名称\s*.*,\s*$' 让 l:retv = l:pindent elseif l:cline =~# '^\s*>\s*$' 让 l:retv = l:pindent - &shiftwidth elseif l:pline =~# '\s*类型名称\s*.*>\s*$' 让 l:retv = l:pindent - &shiftwidth elseif l:pline =~# '^\s*命名空间.*' 让 l:retv = 0 万一 返回l:retv 结束函数 如果有(“autocmd”) autocmd BufEnter *.{cc,cxx,cpp,h,hh,hpp,hxx} setlocal indentexpr=CppNoNamespaceAndTemplateIndent() 万一
您可以使用identexpr选项通过计算表达式(即编写 vim 脚本函数)来指定缩进。这个函数应该接受一个字符串——行——并返回要缩进的空格数。这使您可以灵活地返回此模板条件的缩进级别,或者在正常的类似 C 的情况下回退到autoindent、smartindent或cindent。
这是一个为处理 Qt 的信号和槽扩展而创建的示例。它演示了 cindent 函数的回退。