¿Sangrado VIM para plantillas de C ++?

¿Alguien tiene o sabe sobre vim plugin / macro / function que sangra muy bien las plantillas de c ++?

Cuando destaco la definición de plantilla en el archivo vim .hpp / .h y la sangro con '=' obtengo algo como esto:

>     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;
>                   };

Creo que el cindent alinea la declaración de estructura / clase con el corchete de cierre '>'. Me gustaría terminar con algo como esto, o similar, el formato exacto no importa, siempre que esté formateado:

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;
};

Respuestas a la pregunta(2)

Su respuesta a la pregunta