1

我有一个疯狂的小挑战。我想将 tab 和 shift + tab 重新映射到 vim 中的基本选项卡完成。这是我开始的地方:

set completeopt=
inoremap <tab> <C-n>
inoremap <S-tab> <C-p>

这根本没有任何效果,我也意识到它可能会弄乱我的片段插件。我四处搜寻,发现了这个:http://vim.wikia.com/wiki/Smart_mapping_for_tab_completion,但实施任何建议都没有运气。

我想映射到选项卡和 shift + 选项卡,而不会丢失片段功能。任何帮助都会摇滚!

更新:我现在运气也试过了。它没有明显的效果。

fu! InsertTabWrapper(direction)
  let char_before = col('.') - 1
  if !char_before || getline('.')[char_before - 1] !~ '\k'
    return "\<tab>"
  elseif "backward" == a:direction
    return "\<c-p>"
  else
    return "\<c-n>"
  endif
endfu
inoremap <tab> <c-r>=InsertTabWrapper("forward")<cr>
inoremap <s-tab> <c-r>=InsertTabWrapper("backward")<cr>
4

1 回答 1

1

我同意你的观点,映射<tab>在 vim 中是一件令人头疼的事情。

就我个人而言,我有SuperTabNeocompletecacheSnipmatepydiction .... 让它们一起工作确实需要一些时间,<tab>即使不(也许)完美,也足以满足我的日常使用。

回到您的问题,您可以考虑安装一个名为superTabhttps://github.com/ervandew/supertab)的插件,并在您.vimrc添加以下行:

let g:SuperTabDefaultCompletionType = 'context'
let g:SuperTabContextTextOmniPrecedence = ['&omnifunc','&completefunc']
let g:SuperTabRetainCompletionType=2

inoremap <expr><Enter>  pumvisible() ? "\<C-Y>" : "\<Enter>"
inoremap <expr><TAB>  pumvisible() ? "\<C-n>" : "\<TAB>"

然后....祝您好运...我希望它可以满足您的要求。

于 2013-03-26T17:53:11.467 回答