9

我已将映射键设置如下:

" Easy indent for code blocks
  nmap <tab>      v>
  nmap <s-tab>    v<
  vmap <tab>      >gv
  vmap <s-tab>    <gv

效果很好。但是,当我UltiSnips通过 vundle 安装时,Tab 键不起作用作为缩进动作,它会删除我选择的多行代码。我知道这是因为UltiSnips. 我想保留 Tab 映射UltiSnips来触发其功能,如何解决使用 TAB 键缩进代码块的问题?谢谢!

4

2 回答 2

12

通过查看 UltiSnips 文档:h UltiSnips-triggers说:

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>映射。我建议您删除它们并在正常模式和或在可视模式下使用>>or来执行初始缩进/取消缩进,然后通过redo 命令重复操作。如果您缩进/取消缩进太远,那么只需通过.<<><.u

如需更多帮助,请参阅:

:h >>
:h .
:h u
于 2013-05-18T15:23:45.853 回答
2

您可以将默认扩展触发器更改为其他键,但我认为最好使用如下映射:

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

这对我来说很有用。

更重要的是,<Tab>删除您选择的多行代码是UltiSnips. UltiSnips您可以在片段中使用选定的文本。看看这里

于 2017-10-03T09:35:31.440 回答