किसी शब्द के बीच में होने पर स्मार्ट शब्द पूरा होना


9

निम्नलिखित दो पंक्तियों वाली फ़ाइल पर विचार करें:

someLongFunction
someFunction

जब मैं दूसरे शब्द के बीच में इन्सर्ट मोड में हूँ

some|Function

और मैं दबाता हूं Ctrl-n, मुझे मिलता है

someLongFunctionFunction

क्या विम को कॉन्फ़िगर करने का एक तरीका है ताकि मुझे इसके बजाय निम्नलिखित "स्मार्ट" पूरा हो सके?

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 को हटा दिया जाता है (यह कर्सर स्थिति के बारे में कुछ बातें मानता है)।

(मुझे पूरा यकीन है कि यह सब पूरा करने के लिए अधिक चतुर तरीके हैं, और मैं उन्हें देखना चाहूंगा!)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.