Berikut ini hanya jawaban mock-up cepat (yaitu berfungsi sampai tidak, atau sampai rusak :)), tetapi itu menunjukkan bahwa "itu mungkin":
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
Apa yang coba dilakukan oleh kode di atas adalah: setelah selesai, memverifikasi apakah WORD di bawah kursor lebih panjang daripada kata yang selesai, dan, jika demikian, ia memeriksa lebih lanjut apakah 'sisanya' cocok dengan bagian terakhir dari penyelesaian (dalam contoh Anda, "Fungsi"). Jika ya, sisa WORD dihapus (ini mengasumsikan beberapa hal tentang posisi kursor).
(Saya cukup yakin ada lebih banyak cara pintar untuk menyelesaikan semua ini, dan saya ingin melihatnya!)