ต่อไปนี้เป็นเพียงคำตอบที่จำลองได้อย่างรวดเร็ว (เช่นใช้งานได้จนกว่าจะไม่มีหรือจนกว่าจะมีบางสิ่งบางอย่าง :)) แต่มันแสดงให้เห็นว่า "เป็นไปได้":
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 ที่เหลือจะถูกลบทิ้ง (ซึ่งจะถือว่าบางสิ่งเกี่ยวกับตำแหน่งเคอร์เซอร์)
(ฉันค่อนข้างมั่นใจว่ามีวิธีที่ฉลาดกว่าในการทำสิ่งเหล่านี้ให้สำเร็จและฉันต้องการเห็นพวกเขา!)