Далі - лише швидка макетна відповідь (тобто функціональна, поки вона не зробить або поки щось не зламається :)), але це показує, що "це можливо":
augroup completion
autocmd!
autocmd CompleteDone * call PostCompletion()
augroup END
function! PostCompletion()
if !empty(v:completed_item)
"check if text after current cursor position is part of the match
let crt_word = expand('<cWORD>')
let compl_word = v:completed_item['word']
let lcw = len(compl_word)
let leftover = strpart(crt_word, lcw)
let lfl = len(leftover)
if lfl > 0
let endcompl = strpart(compl_word, lcw - lfl)
if leftover ==# endcompl
let cpos = getcurpos()
normal dW
call setpos('.', cpos)
endif
endif
endif
endfunction
Намагається зробити вищезазначений код: після завершення перевіряє, чи слово WORD під курсором довше завершеного слова, і, якщо так, то він додатково перевіряє, чи відповідає "залишок" останній частині завершення (у вашому прикладі, "Функція"). Якщо це так, решта слова WORD видаляються (це передбачає деякі речі щодо положення курсору).
(Я впевнений, що є більш розумні способи досягти всього цього, і я хотів би їх побачити!)