Bir kelimenin ortasındayken akıllı kelime tamamlama


9

Aşağıdaki iki satırı içeren bir dosya düşünün:

someLongFunction
someFunction

İkinci sözcüğün ortasında ekleme modundayken

some|Function

ve basıyorum Ctrl-n, anladım

someLongFunctionFunction

Vim'i aşağıdaki "akıllı" tamamlamayı alacak şekilde yapılandırmanın bir yolu var mı?

someLongFunction

Yanıtlar:


5

Aşağıdaki sadece hızlı bir mock-up cevabıdır (yani, bir şey kırılmadan veya bir şeyi kırana kadar işlevseldir), ancak "mümkün" olduğunu gösterir:

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

Yukarıdaki kodun yapmaya çalıştığı şey: tamamlandıktan sonra , imlecin altındaki WORD'ün tamamlanmış kelimeden daha uzun olup olmadığını doğrular ve eğer öyleyse, 'kalanının' tamamlamanın son kısmı ile eşleşip eşleşmediğini kontrol eder (örneğin, "Fonksiyon"). Varsa, WORD'nin geri kalanı silinir (bu, imleç konumu hakkında bazı şeyler varsayar).

(Tüm bunları başarmanın daha akıllıca yolları olduğundan eminim ve onları görmek istiyorum!)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.