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.

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

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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.