![vim自定义弹出菜单](https://linux22.com/image/43200/vim%E8%87%AA%E5%AE%9A%E4%B9%89%E5%BC%B9%E5%87%BA%E8%8F%9C%E5%8D%95.png)
如何创建自定义完成弹出菜单。
我希望能够开始键入字符串的一部分,然后按自定义组合键以弹出仅特定字符串组的弹出完成。
我已经完成了 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