在较新的inoremap序列中重用早期的inoremap序列

时间:2016-10-23 01:35:42

标签: vim

我使用的插件在初始化时执行多个*noremap操作。我将以下映射添加到YCM / UltiSnips后:

inoremap <expr> <CR> pumvisible() ? "<C-R>=<SID>ExpandSnippetOrReturn()<CR>" : "\<CR>"

我已经打破了其他插件查看<Enter>密钥的能力,或者说我覆盖/破坏了原始的inoremap。我想重新启用该功能,但不禁用使用Enter键从自动完成菜单中选择片段的功能。这个键映射实际上是说&#34;如果菜单可见,请选择该选项,否则模拟<Enter>键&#34;。我需要它说的是#34;如果菜单可见,选择该选项,否则执行任何命令<Enter>键已经映射到&#34;。所以基本上,在声明这个inoremap时,我需要将这个键的现有inoremap扩展到else。

我看过<C-R>=feedkeys('<CR>')<CR><C-R>=mapcheck('\<CR>', 'i')<CR>,但无法开始工作。有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

终于弄清楚了......这比我一天所需要的更多vim故障排除。

function! LoadPumvisibleEnter()
    let smartmap = maparg("<Enter>", "i")
    execute printf('inoremap <script> <expr> <CR> pumvisible() ? "<C-R>=<SID>ExpandSnippetOrReturn()<CR>" : %s', smartmap)
endfunction
au VimEnter * :execute LoadPumvisibleEnter()
  • 把它扔进一个函数让我保持理智的逃避和我在
  • 的模式
  • 自动命令是必需的,因为vim显然在加载任何插件(Does Vim load plugins after loading vimrc?)之前运行vimrc,所以如果没有它,地图将不会被设置
相关问题