vim benutzerdefiniertes Popup-Menü

7

Wie erstelle ich ein benutzerdefiniertes Popup-Menü für die Fertigstellung?

Ich möchte in der Lage sein, einen Teil einer Zeichenfolge einzugeben und dann eine benutzerdefinierte Tastenkombination zu drücken, um eine Popup-Vervollständigung nur einer bestimmten Gruppe von Zeichenfolgen aufzurufen.

Ich habe Omni bereits vollständig eingerichtet und möchte dieser Liste nichts hinzufügen.

Zum Beispiel habe ich die Liste:
spo
spe
spa

Ich möchte in der Lage sein, sp einzugeben, dann Strg +> drücken und ein Abschlussfeld für genau diese bestimmte Liste anzeigen lassen.

James
quelle

Antworten:

6
  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

Fand es! Versteckt in diesem Grimoire, das sie uns sagen wollen, sind docs =)

======================= Mein letztes Skript ist so etwas wie

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
James
quelle
Ich wage Sie jedoch, eine Dokumentation zu finden, die so vollständig ist wie die Vim-Dokumentation.
Schweizer
Vim ist Wahnsinn. Kompletter Wahnsinn, was du damit machen kannst.
James
4

Erstellen Sie eine Liste mit Wörtern: $HOME/wordlistund fügen Sie das Wörterbuch zu vim hinzu.

:set dictionary+=$HOME/wordlist

Aktivieren Sie die Wortliste:

:set complete-=k complete+=k

Jetzt können Sie die Wörter mit <CTRL>-Pund automatisch vervollständigen<CTRL-N

Bearbeiten: Um separate Wortlisten zu haben, erstellen Sie mehrere Listen, z

$HOME/firstlist
$HOME/secondlist

und weisen Sie Tastenkombinationen zu, um eine bestimmte Arbeitsliste auszuwählen:

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>

Dies hat den Vorteil, dass Sie die Verknüpfungen <CTRL>-Pund <CTRL>-Nwie gewohnt verwenden können, sobald Sie die gewünschte Liste ausgewählt haben.

Marco
quelle
Kann ich separate Wörterbücher haben? Ich möchte einen Hotkey nur für eine bestimmte Liste. Ich benutze bereits ein Wörterbuch.
James
@ JamesAndino Ich habe meine Antwort aktualisiert.
Marco