vim 사용자 정의 팝업 메뉴

vim 사용자 정의 팝업 메뉴

사용자 정의 완성 팝업 메뉴를 만드는 방법.

문자열의 일부를 입력한 다음 사용자 정의 키 조합을 눌러 해당 특정 문자열 그룹에 대해서만 팝업 완성 기능을 사용할 수 있기를 원합니다.

이미 옴니 설정을 마쳤으며 해당 목록에 추가하고 싶지 않습니다.

예를 들어 다음과 같은 목록이 있습니다.
spo
spe
spa

sp를 입력한 다음 Ctrl+>를 누르면 해당 특정 목록에 대한 완성 상자가 나타나도록 하고 싶습니다.

답변1

  inoremap <F5> <C-R>=ListMonths()<CR>

    func! ListMonths()
      call complete(col('.'), ['January', 'February', 'March',
            \ 'April', 'May', 'June', 'July', 'August', 'September',
            \ 'October', 'November', 'December'])
      return ''
    endfunc

그것을 발견! 그들이 우리에게 말하려는 것은 마법의 책에 숨겨진 문서들입니다 =)

======================== 내 최종 스크립트는 다음과 같습니다

inoremap <F5> <C-R>=CustomComplete()<CR>

        func! CustomComplete()
                echom 'move to start of last word'
                normal b
                echom 'select word under cursor'
                let b:word = expand('<cword>')
                echom '->'.b:word.'<-'
                echom 'save position'
                let b:position = col('.')
                echom '->'.b:position.'<-'
                normal e
                normal l
                echom 'move to end of word'     

                let b:list = ["spoogle","spangle","frizzle"]
                let b:matches = []


                echom 'begin checking for completion'
                for item in b:list
                echom 'checking '
                echom '->'.item.'<-'      
                        if(match(item,'^'.b:word)==0)
                        echom 'adding to matches'
                        echom '->'.item.'<-'      
                        call add(b:matches,item)
                        endif
                endfor
                call complete(b:position, b:matches)
                return ''
        endfunc

답변2

단어 목록 만들기: $HOME/wordlistvim에 사전을 추가합니다.

:set dictionary+=$HOME/wordlist

단어 목록 활성화:

:set complete-=k complete+=k

<CTRL>-P이제 및를 사용하여 단어를 자동 완성할 수 있습니다.<CTRL-N

편집하다:별도의 단어 목록을 얻으려면 다음과 같은 여러 목록을 만들 수 있습니다.

$HOME/firstlist
$HOME/secondlist

특정 작업 목록을 선택하려면 키 바인딩을 할당하세요.

noremap <F5> :set dictionary=$HOME/firstlist<CR>:set complete-=k complete+=k<CR>
noremap <F6> :set dictionary=$HOME/secondlist<CR>:set complete-=k complete+=k<CR>

이것의 장점은 원하는 목록을 선택하고 나면 <CTRL>-P익숙한 단축키와 단축키를 사용할 수 있다는 것입니다.<CTRL>-N

관련 정보