要按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)
答案 0 :(得分:1)
<Plug>
在noremap
版本的命令中没有意义,因为它们本身就是映射。所以你应该使用imap
。第二件事是如果你想执行映射的结果,你应该使用表达式映射而不是表达式寄存器。
总的来说,这看起来像是
imap <silent> <expr> <CR> <SID>my_cr_function()
您可能希望查看:help :map-expression