단어 중간에 스마트 단어 완성


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가 삭제됩니다 (커서 위치에 대한 일부 사항이 가정 됨).

(이 모든 것을 달성 할 수있는 더 영리한 방법이 있다고 확신합니다. 그들을보고 싶습니다!)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.