我有一个疯狂的小挑战。我想重新映射tab并将+ tab移动到vim中的基本选项卡完成。这是我开始的地方:
set completeopt=
inoremap <tab> <C-n>
inoremap <S-tab> <C-p>
这根本没有任何影响,我也意识到它可能会弄乱我的代码插件。我去谷歌搜索,发现了这个:http://vim.wikia.com/wiki/Smart_mapping_for_tab_completion,但实施任何建议都没什么好运。
我想映射到标签页并切换+标签页,而不会丢失代码段功能。任何帮助都会摇滚!
更新:我现在也运气好了。它没有可察觉的效果。
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>
答案 0 :(得分:1)
我同意你的看法,映射<tab>
在vim中是一件令人头疼的事。
就个人而言,我有 SuperTab , Neocompletecache , Snipmate 和 pydiction ....这真的花了一些时间让他们一起工作,用 <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>"
然后......祝你好运......我希望它适合你的要求。