完成尝试后,omnicppcomplete将在弹出菜单中显示所有可能的项目。要在菜单中选择某个项目,应使用<C-N>
和<C-p>
在不同项目之间来回切换。我觉得这很不方便。如果j
和k
可用于取代<C-N>
和<C-P>
,则应该非常酷。那我该怎么办?
答案 0 :(得分:9)
function! OmniPopup(action)
if pumvisible()
if a:action == 'j'
return "\<C-N>"
elseif a:action == 'k'
return "\<C-P>"
endif
endif
return a:action
endfunction
inoremap <silent>j <C-R>=OmniPopup('j')<CR>
inoremap <silent>k <C-R>=OmniPopup('k')<CR>
答案 1 :(得分:1)
我更喜欢使用tab键来完成(我不确定从哪里得到它):
"tab complete
function! InsertTabWrapper(direction)
let col = col('.') - 1
if !col || getline('.')[col - 1] !~ '\k'
return "\<tab>"
elseif "backward" == a:direction
return "\<c-p>"
else
return "\<c-n>"
endif
endfunction
inoremap <tab> <c-r>=InsertTabWrapper ("forward")<cr>
inoremap <s-tab> <c-r>=InsertTabWrapper ("backward")<cr>
答案 2 :(得分:1)
CTRL+J
和CTRL+K
代替:(因此您可以键入j
和k
)
inoremap <expr><C-J> pumvisible() ? "\<C-n>" : "\<C-J>"
inoremap <expr><C-K> pumvisible() ? "\<C-p>" : "\<C-K>"
奖金:<ENTER>
以选择选项
inoremap <expr><Cr> pumvisible() ? "\<C-y>" : "\<Cr>"