Vim 即使我不在片段中,UltiSnips 插件也会在插入模式下重新映射 <CR>(回车键)

Vim UltiSnips plugin remaps <CR> (Enter key) in insert mode even when I'm not in a snippet

每当我在插入模式下按 Enter 时,什么也没有发生,这很烦人,您可能会想像到。

我用 :imap 检查了映射,结果是 UltiSnips 映射 <CR>:

i  <CR>        * <C-R>=UltiSnips#ExpandSnippetOrJump()<CR>

如果我 iunmap <CR>,我的回车键又开始工作了,但 UltiSnips 停止工作(我想这是有道理的)。

我没有使用任何预制片段,我只有一个 tex.snippets 文件在工作。我已尝试删除文件中的所有内容,以检查我的代码段定义是否有问题。

所有文件类型都会出现此行为。

这是我的 UltiSnips 配置:

let g:UltiSnipsSnippetsDir         = '~/.vim/ultisnips'
let g:UltiSnipsSnippetDirectories  = [$HOME.'/.vim/ultisnips']

let g:UltiSnipsExpandTrigger       = '<C-m>'
let g:UltiSnipsJumpForwardTrigger  = '<C-m>'
let g:UltiSnipsJumpBackwardTrigger = '<C-n>'

let g:UltiSnipsEditSplit           = "vertical"

为什么 UltiSnips 映射 <CR> 的功能?

感谢您对此的任何帮助,因为这使我无法使用 UltiSnips。

那是因为<CTRL-M><CR>(回车)一样,见:help keycodes

notation    meaning         equivalent  decimal value(s)    ~
-----------------------------------------------------------------------
...
<Tab>       tab             CTRL-I      9   *tab* *Tab*
                                            *linefeed*
...
<CR>        carriage return CTRL-M      13  *carriage-return*
<Return>    same as <CR>                    *<Return>*
<Enter>     same as <CR>                    *<Enter>*
<Esc>       escape          CTRL-[      27  *escape* *<Esc>*
...

同理,例如CTRL-I表示tabCtrl-[表示Esc。所以你实际上是这样配置的 - let g:UltiSnipsExpandTrigger = '<C-m>'.