<Plug> 函数失败,作为文字“<t_ý>S”插入
<Plug> function failing, inserting as literal "<t_ý>S"
要按回车键自动完成,我有以下地图设置可用于 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()
return 为真。 <c-y>
选择所选单词,将其插入到插入模式光标后,并关闭 neocomplete 弹出窗口。
我想扩展这个映射,这样当自动完成的单词是 "snippet" 单词时,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)`
我该如何解决这个问题并让它发挥作用?
可能相关的注意事项: 如果我 return 到代码的工作版本(上面的第一个),点击 "enter",然后手动输入 <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
要按回车键自动完成,我有以下地图设置可用于 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()
return 为真。 <c-y>
选择所选单词,将其插入到插入模式光标后,并关闭 neocomplete 弹出窗口。
我想扩展这个映射,这样当自动完成的单词是 "snippet" 单词时,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)`
我该如何解决这个问题并让它发挥作用?
可能相关的注意事项: 如果我 return 到代码的工作版本(上面的第一个),点击 "enter",然后手动输入 <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