У меня есть стандартная функция
function! Eatchar(pat)
let c = nr2char(getchar(0))
return (c =~ a:pat) ? '' : c
endfunction
и абривиатура
iab <buffer> guard
\ #ifndef <C-R>=toupper(expand('%:t:r'))<CR>_H<CR>
\#define <C-R>=toupper(expand('%:t:r'))<CR>_H<CR><CR><CR>
\#endif /* <C-R>=toupper(expand('%:t:r'))<CR>_H */
\<C-R>=Eatchar('[[:space:]]')<CR><Up><Up>
но функция ничего не делает, а долждна сьесть введенный мной символ который тригерит расширение абривеатуры
к примеру вот эти работают коректно
iab <buffer> inc #include <><Left><C-R>=Eatchar('[[:space:]]')<CR>
iab <buffer> incc #include ""<Left><C-R>=Eatchar('[[:space:]]')<CR>