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

时间:2013-05-18 09:15:30

标签: vim ultisnips

我按如下方式设置了映射键:

" 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 个答案:

答案 0 :(得分:9)

通过: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

答案 1 :(得分:0)

您可以将默认展开触发器更改为其他键,但我认为最好使用以下地图:

nnoremap > v>
nnoremap < v<
vnoremap > >gv
vnoremap < <gv

它适用于我。

此外,<Tab>删除您选择的多行代码是UltiSnips的一项功能。您可以在UltiSnips代码段中使用所选文字。看看here