I'm tending to rely on vim more than a full IDE for working on projects, and one of the things I find myself doing on a regular basis is creating a new file(s) with derived values.

For example, creating a new c++ class involves creating a `.hpp` file and a `.cpp` file, adding file comments, the license, the author, ctor/dtor, copy, assign, move, etc...

.hpp
====

```
class %Object% {

public:

    explicit %Object%() = default;
    ~%Object%() = default;

    %Object%(%Object%&& rhs) = default;
    %Object%(const %Object%& rhs) = default;
    %Object%& operator=(%Object%&& rhs) = default;
    %Object%& operator=(const %Object%& rhs) = default;

protected:

private:

}

```

.cpp
====

```
#include "%Object%.hpp"

```

Another example would be a `.h` and a `.c` file in c.

I'm a little familiar with [UltiSnips](https://github.com/SirVer/ultisnips) and [muTemplate](https://github.com/LucHermitte/mu-template), which both seem to cut down on boilerplate a lot. However, I'm not clear if there's a way to use these, or something else, outside of a file scope. I wrote a really quick and dirty set of bash [scripts](https://github.com/uxcn/new) to do it, and I'm getting ready to re-implement it in python, but I'd rather use an existing plugin.

Is there a way to do this with UltiSnips, muTemplate, or something else? If not, is there a good way to extend an existing plugin?