universal-ctags provide readtags to filter tags:
Read all members of a struct:
readtags -Q '(and (eq? $kind "member") (eq? $scope-name "struct_name") )' -l
(and (...) (...)): (...) and (...)
(eq? $kind "member") restrict kind to member
(eq? $scope-name "struct_name") restrict scope-name to struct_name, your tag fields must include Z for this to ...
SnipMate and UltiSnips are the two most popular snippet engine for Vim. Both are inspired from TextMate's snippet syntax. UltiSnips can run all SnipMate snippets but also have additional syntax to make it more powerful.
A good rule of thumb is that if your Vim has python support, then use UltiSnips. If not, then use SnipMate.
In my .vimrc, I load (using ...
When you register it this way, your new autocommand will be triggered after all other autocommands registered on the same event, in particular after the one that sources your ftplugin -- I suppose you define the mapping in an ftplugin (*).
You could change that, probably by changing the order between this line and the :filetype xxxx in your .vimrc, but this ...
At this time, I have something extremely similar in my lh-cpp plugin for C++. Within a class context, I type :Constructor init, and my plugin will fetch all the member data (thanks to the API of two other plugins of mine: lh-dev + lh-tags) and generate the constructor. We aren't far from what you wish to accomplish.
The first step will be to extract the ...
UltiSnips#SnippetsInCurrentScope return all snippets whose trigger matches the current word, I think the match here means =~, not ==. You need to check word before cursor and the triggers by yourself:
" get word before cursor
let word = matchstr(getline('.'), printf('\v\w*%%%dc\w', col('.') - 1))