如何解决Vim中`UltiSnips`插件TAB键映射的冲突问题?

12
我已将映射键设置如下:
" Easy indent for code blocks
  nmap <tab>      v>
  nmap <s-tab>    v<
  vmap <tab>      >gv
  vmap <s-tab>    <gv

那个方案不错。但是,当我通过vundle安装了UltiSnips时,Tab键不能作为缩进操作工作,它会删除我选中的多行代码。我知道这是由于UltiSnips的默认设置。我希望保留UltiSnips的Tab映射以触发其功能。如何解决使用TAB键缩进代码块的问题?谢谢!

2个回答

13

通过 :h UltiSnips-triggers 查看 UltiSnips 文档,会得到以下内容:

You can define the keys used to trigger UltiSnips actions by setting global
variables. Variables define the keys used to expand a snippet, jump forward
and jump backwards within a snippet, and list all available snippets in the
current expand context. The variables with their default values are: >
   g:UltiSnipsExpandTrigger               <tab>
   g:UltiSnipsListSnippets                <c-tab>
   g:UltiSnipsJumpForwardTrigger          <c-j>
   g:UltiSnipsJumpBackwardTrigger         <c-k>

因此,在您的 ~/.vimrc 文件中设置以下内容:

let g:UltiSnipsExpandTrigger = '<f5>'

然而,您可能需要重新考虑您的 <tab> 映射。我建议您将其删除并在正常模式下使用 >><< ,在可视化模式下使用 >< 来进行初始缩进/取消缩进,然后通过重复操作使用 .(点号)命令来重复该操作。如果您将缩进/取消缩进过多,则可以通过 u 撤消它。

欲了解更多帮助,请参见:

:h >>
:h .
:h u

2
在我的情况下,tab 与 supertab 插件发生了冲突。请注意,如果您正在使用 putty 上的 vim,则某些键组合可能无法直接使用,例如 <f5><c-tab>,在这种情况下,请尝试像 let g:UltiSnipsExpandTrigger = '<c-j>' 这样的东西,它还有一个更舒适的输入方式,比 <c-tab> 更方便。 - User
@PeterRincker 当我使用任何功能键,例如 <f5>,它只是在插入模式下输入 <f5>。它在 gvim 中有效,但我的 Putty 问题仍然存在 :/ - Jonathan Komar

2
您可以将默认的展开触发器更改为其他键,但我认为最好使用以下地图:
nnoremap > v>
nnoremap < v<
vnoremap > >gv
vnoremap < <gv

这对我很有效。

此外,你所选择的<Tab>删除多行代码是UltiSnips的一个功能。你可以在UltiSnips片段中使用选定的文本。在这里看一下。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接