我有一个插件,其中包含以下映射:
:i <CR> <CR><Plug>DiscretionaryEnd
我还想为<CR>
创建我自己的表达式,这个表达式贯穿于这个原始映射。但是,当我做这样的事情时:
:inoremap <expr> <CR> test ? '<CR><Plug>DiscretionaryEnd' : '<Esc>'
CR 打印\n<Plug>DiscretionaryEnd
而不仅仅是\n
,然后是对插件的DiscretionaryEnd
功能的委派。
:h <Plug>
表示它用于内部映射,所以我可能会犯这个错误。但我认为有一种方法可以包装一个插件的行为,而不会潜入它的内部。我该怎么做?
答案 0 :(得分:2)
虽然通常建议use :noremap
,因为它使映射不受重映射和递归的影响,这是规则的一个例外。
在表达式映射中,映射适用于表达式本身,而不是返回的字符流。
:imap <expr> <CR> test ? '<CR><Plug>DiscretionaryEnd' : '<Esc>'