単語の途中でスマートな単語補完


9

次の2行を含むファイルを考えます。

someLongFunction
someFunction

2番目の単語の途中で挿入モードにいるとき

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の残りの部分が削除されます(これは、カーソル位置についていくつかのことを想定しています)。

(私はこれをすべて達成するためのもっと賢い方法があると確信しています、そしてそれらを見てみたいです!)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.