vim menu pop-up personalizado

6

Como faço para criar um menu pop-up personalizado de conclusão.

Eu gostaria de poder começar a digitar uma parte de uma string e pressionar uma combinação de teclas personalizada para exibir uma conclusão pop-up de apenas um determinado grupo de strings.

Já tenho omni completa configuração e não quero adicionar a essa lista.

Por exemplo, eu tenho a lista:
spo
spe
spa

Eu gostaria de poder digitar sp e pressionar Ctrl + > e ter uma caixa de conclusão para essa lista específica.

    
por Prospero 21.05.2012 / 20:01

2 respostas

5
  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

Encontrou! Escondido em que Grimoire eles estão tentando nos dizer são docs =)

======================= Meu script final é algo como

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
    
por 22.05.2012 / 05:29
4

Crie uma lista de palavras: $HOME/wordlist e adicione o dicionário ao vim.

:set dictionary+=$HOME/wordlist

Ative a lista de palavras:

:set complete-=k complete+=k

Agora você pode preencher automaticamente as palavras com <CTRL>-P e <CTRL-N

Editar: para ter listas de palavras separadas, você cria várias listas, por exemplo,

$HOME/firstlist
$HOME/secondlist

e atribua ligações de teclas para escolher uma lista de trabalho específica:

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>

Isso tem a vantagem de poder usar os atalhos <CTRL>-P e <CTRL>-N como você costumava, depois de escolher a lista desejada.

    
por 22.05.2012 / 01:05