【问题标题】:Remapping tab completions in vim在 vim 中重新映射选项卡完成
【发布时间】:2013-03-26 17:07:42
【问题描述】:

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

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

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

我想映射到 tab 和 shift + tab,而不会丢失 sn-p 功能。任何帮助都会动摇!

更新:我也尝试过这个,现在很幸运。它没有明显的效果。

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>

【问题讨论】:

  • 在 php/java/c 文件中说,你在 cmets 中有“当它被调用时”,然后你输入 wh&lt;tab&gt;,你想要什么? while?或while loop snippet?
  • while 循环 sn-p。这对我来说不是很常见,但我希望 sn-p 优先。

标签: vim tab-completion


【解决方案1】:

我同意你的观点,映射 &lt;tab&gt; 在 vi​​m 中是一件令人头疼的事情。

我个人有 SuperTab、Neocompletecache、Snipmate 和 pydiction....确实花了一些时间让他们一起工作,与&lt;tab&gt;...即使不(可能)完美,也足以满足我的日常使用。

回到您的问题,您可以考虑安装一个名为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>"

那么......祝你好运......我希望它可以满足您的要求。

【讨论】:

  • 谢谢,肯特!我看着 SuperTab。这对我来说是一大笔开销,我对它所做的一切都没有用处。不过谢谢!
  • @Costa 我建议先安装它,然后将这些行复制到您的 vimrc 中,然后进行测试,最好对多个文件类型进行测试。如果它按您的预期工作。浏览帮助文件,看看它为什么起作用以及它能做什么......说实话,我只是注释掉了我的 neocomp 和 pydict 插件,并且还对 supertab 设置做了一些小改动。 似乎有效,我刚刚在 vim ft 和 java ft 中进行了测试。我觉得你的问题可以在不安装 superTab 的情况下得到解决。但我没有尝试......祝你好运!
  • 谢谢,肯特,我去看看。
猜你喜欢
  • 2015-12-07
  • 2011-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多