Smart word เสร็จสิ้นเมื่ออยู่ตรงกลางคำ


9

พิจารณาไฟล์ที่มีสองบรรทัดต่อไปนี้:

someLongFunction
someFunction

เมื่อฉันอยู่ในโหมดแทรกตรงกลางคำที่สอง

some|Function

และฉันกดCtrl-nฉันได้รับ

someLongFunctionFunction

มีวิธีการกำหนดค่า Vim เพื่อให้ฉันได้รับ "smart" ที่สมบูรณ์แทนหรือไม่

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.