사용자 정의 완성 팝업 메뉴를 만드는 방법.
문자열의 일부를 입력한 다음 사용자 정의 키 조합을 눌러 해당 특정 문자열 그룹에 대해서만 팝업 완성 기능을 사용할 수 있기를 원합니다.
이미 옴니 설정을 마쳤으며 해당 목록에 추가하고 싶지 않습니다.
예를 들어 다음과 같은 목록이 있습니다.
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