Розумне завершення слова в середині слова


9

Розглянемо файл із наступними двома рядками:

someLongFunction
someFunction

Коли я перебуваю в режимі вставки в середині другого слова

some|Function

і натискаю Ctrl-n, дістаю

someLongFunctionFunction

Чи є спосіб налаштувати Vim, щоб я отримав наступне "розумне" завершення?

someLongFunction

Відповіді:


5

Далі - лише швидка макетна відповідь (тобто функціональна, поки вона не зробить або поки щось не зламається :)), але це показує, що "це можливо":

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 видаляються (це передбачає деякі речі щодо положення курсору).

(Я впевнений, що є більш розумні способи досягти всього цього, і я хотів би їх побачити!)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.