Completamento intelligente delle parole nel mezzo di una parola


9

Prendi in considerazione un file con le seguenti due righe:

someLongFunction
someFunction

Quando sono nella modalità di inserimento nel mezzo della seconda parola

some|Function

e premo Ctrl-n, capisco

someLongFunctionFunction

Esiste un modo per configurare Vim in modo da ottenere invece il seguente completamento "intelligente"?

someLongFunction

Risposte:


5

Quella che segue è solo una risposta mock-up rapida (cioè funzionale fino a quando non lo fa, o fino a quando non si rompe qualcosa :)), ma mostra che "è possibile":

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

Ciò che il codice precedente tenta di fare è: dopo il completamento, verifica se la WORD sotto il cursore è più lunga della parola completata e, in tal caso, controlla ulteriormente se il suo "resto" corrisponde all'ultima parte del completamento (nel tuo esempio, "Funzione"). In tal caso, il resto della WORD viene eliminato (ciò presuppone alcune cose sulla posizione del cursore).

(Sono abbastanza sicuro che ci sono modi più intelligenti per realizzare tutto questo, e mi piacerebbe vederli!)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.