<plug>函数失败,插入为文字“<t_ý> S”

时间:2015-12-28 02:55:55

标签: vim vim-plugin

要按Enter键自动完成,我可以使用以下地图设置来使用neocomplete.vim:

inoremap <silent> <CR> <C-r>=<SID>my_cr_function()<CR>
function! s:my_cr_function()
  return pumvisible() ? "\<c-y>" : "\<CR>"
endfunction

这很好用。为了解释,当neocomplete的PopUpMenu显示时,pumvisible()返回true。 <c-y>选择所选单词,在插入模式光标后插入,然后关闭新完成弹出窗口。

我想扩展此映射,以便当自动填充的单词是“片段”单词时,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)`

如何解决此问题并使其有效?

可能相关的注释:如果我返回到代码的工作版本(上面的第一个),点击“enter”,然后手动输入<C-k>(仍然处于插入模式) ,片段正确扩展。以下是<C-k>的映射设置:

imap <C-k> <Plug>(neosnippet_expand_or_jump)

1 个答案:

答案 0 :(得分:1)

<Plug>noremap版本的命令中没有意义,因为它们本身就是映射。所以你应该使用imap。第二件事是如果你想执行映射的结果,你应该使用表达式映射而不是表达式寄存器。

总的来说,这看起来像是

imap <silent> <expr> <CR> <SID>my_cr_function()

您可能希望查看:help :map-expression