要通过按 Enter 键自动完成,我有以下 map 设置来使用 neocomplete.vim:
inoremap <silent> <CR> <C-r>=<SID>my_cr_function()<CR>
function! s:my_cr_function()
return pumvisible() ? "\<c-y>" : "\<CR>"
endfunction
这很好用。解释一下,pumvisible()
当 neocomplete 的 PopUpMenu 显示时返回 true。 <c-y>
选择选定的单词,将其插入到插入模式光标之后,然后关闭 neocomplete 弹出窗口。
我想扩展此映射,以便当自动完成的单词是“片段”单词时,neosnippet.vim 插件将自动扩展它。这是我尝试过的:
inoremap <silent> <CR> <C-r>=<SID>my_cr_function()<CR>
function! s:my_cr_function()
return pumvisible() ? "\<c-y>\<Plug>(neosnippet_expand_or_jump)" : "\<CR>"
endfunction
这不会扩展代码片段,而是将以下内容直接插入到光标所在的文本中:
<t_ý>S(neosnippet_expand_or_jump)`
我该如何解决这个问题并使其正常工作?
可能相关的注释:如果我返回到代码的工作版本(上面的第一个版本),请按“回车”,然后手动输入 <C-k>
(仍处于插入模式时),代码片段可以正确扩展。这是 <C-k>
的映射设置:
imap <C-k> <Plug>(neosnippet_expand_or_jump)
最佳答案
<Plug>
在 noremap
中没有意义命令的版本,因为它们本身就是映射。所以你应该使用imap
。第二件事是,如果您想执行映射的结果,您应该使用表达式映射而不是表达式寄存器。
总的来说,这看起来像
imap <silent> <expr> <CR> <SID>my_cr_function()
您可能想查看:help :map-expression
关于vim - <Plug> 函数失败,作为文字 "<t_ý>S"插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34487155/