Hoàn thành từ thông minh khi ở giữa một từ


9

Hãy xem xét một tệp có hai dòng sau:

someLongFunction
someFunction

Khi tôi ở chế độ chèn ở giữa từ thứ hai

some|Function

và tôi nhấn Ctrl-n, tôi nhận được

someLongFunctionFunction

Có cách nào để cấu hình Vim để tôi có được sự hoàn thành "thông minh" sau đây không?

someLongFunction

Câu trả lời:


5

Sau đây chỉ là một câu trả lời mô phỏng nhanh (nghĩa là chức năng cho đến khi nó không hoặc cho đến khi nó phá vỡ một cái gì đó :)), nhưng nó cho thấy rằng "nó có thể":

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

Những gì đoạn mã trên cố gắng làm là: sau khi hoàn thành, xác minh xem WORD dưới con trỏ có dài hơn từ đã hoàn thành hay không, và nếu vậy, nó sẽ kiểm tra thêm xem 'phần còn lại' có khớp với phần cuối của quá trình hoàn thành hay không (trong ví dụ của bạn, "Chức năng"). Nếu có, phần còn lại của WORD sẽ bị xóa (điều này giả định một số điều về vị trí con trỏ).

(Tôi khá chắc chắn rằng có nhiều cách thông minh hơn để thực hiện tất cả điều này và tôi muốn xem chúng!)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.