カスタム完成ポップアップメニューを作成する方法。
文字列の一部を入力し、カスタムキーの組み合わせをタップして、特定の文字列グループに対してのみポップアップコンプリート機能を使用できるようにしたいです。
すでにOmniの設定が完了しており、そのリストに追加したくありません。
たとえば、次のリストがあります。
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/wordlist
vimに辞書を追加します。
: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