如何在vim中映射弹出菜单的键

时间:2010-01-31 00:08:02

标签: vim

完成尝试后,omnicppcomplete将在弹出菜单中显示所有可能的项目。要在菜单中选择某个项目,应使用<C-N><C-p>在不同项目之间来回切换。我觉得这很不方便。如果jk可用于取代<C-N><C-P>,则应该非常酷。那我该怎么办?

3 个答案:

答案 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+JCTRL+K代替:(因此您可以键入jk

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>"