【问题标题】:how to map keys for popup menu in vim如何在vim中映射弹出菜单的键
【发布时间】:2010-01-31 00:08:01
【问题描述】:

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

【问题讨论】:

  • 只是一个建议。映射 j 和 k 将不允许完成包含 j 和 k 个字符的单词。你可能想用。 ctrl-j 和 ctrl-k 或类似的代替。

标签: vim


【解决方案1】:
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>

【讨论】:

    【解决方案2】:

    我更喜欢使用 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>
    

    【讨论】:

      【解决方案3】:

      改为CTRL+JCTRL+K:(这样你就可以输入jk

      inoremap <expr><C-J> pumvisible() ? "\<C-n>" : "\<C-J>"
      inoremap <expr><C-K> pumvisible() ? "\<C-p>" : "\<C-K>"
      

      奖励:&lt;ENTER&gt; 选择选项

      inoremap <expr><Cr>  pumvisible() ? "\<C-y>" : "\<Cr>"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-11
        • 1970-01-01
        • 1970-01-01
        • 2016-04-21
        • 2010-10-20
        • 1970-01-01
        • 2019-12-29
        • 2013-12-17
        相关资源
        最近更新 更多