vim - <Plug> 函数失败,作为文字 "<t_ý>S"插入

标签 vim vim-plugin

要通过按 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/

相关文章:

vim - 有没有一种方法可以在Vim中对图进行搜索

vim - 如何在 vim 文本文档中进行多重计算?

editor - 你能在 vi/vim 中抓取或删除括号之间的内容吗?

gradle - Eclipse JDT LS 和 Gradle - 资源异常 "Invalid project description"

linux - 使用sudo时如何自动加载当前用户的vim配置

plugins - 如何在 Ubuntu 下编译 gVim?

macos - 映射大写字母仅在 vim 中锁定?

Vim 功能在拆分之间切换

go - Windows 上的 VIM-Go Debugger 结果为 "Goroutine not found"