在vim重映射选项卡落成(Remapping tab completions in vim)

2019-10-17 22:12发布

我有一个疯狂的小的挑战。 我想重新映射选项卡,然后在vim + Tab键Shift基本选项卡落成。 下面是我起步的地方:

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

这没有任何影响的,同时我也意识到这可能会搞乱了我的片段插件。 我去谷歌上搜索了一圈,发现这一点: http://vim.wikia.com/wiki/Smart_mapping_for_tab_completion ,但有一点运气实施任何的建议。

我想映射到标签和Shift + Tab键,而不会丢失片段的功能。 任何帮助将摇滚!

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

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>

Answer 1:

我同意你说的映射<tab>是Vim头疼的事情。

我个人有SUPERTAB,Neocompletecache,Snipmatepydiction ....真的花了一些时间,让他们一起工作,以<tab> ...即使没有(也许)完美的,这是足以让我的日常使用。

回到你的问题,你可以考虑安装一个叫做插件superTab ( https://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>"

然后....好运气......我希望它为您的要求。



文章来源: Remapping tab completions in vim