是否可以映射以执行常规命令?

时间:2019-02-11 19:31:30

标签: vim

出现以下命令以调用所需的功能。

:execute "normal \<Plug>VimwikiAddHeaderLevel<CR>"

但是,将其放在映射中似乎会引起问题。

:nmap <buffer> = execute "normal \<Plug>VimwikiAddHeaderLevel<CR>"

这是我输入=时的输出。

E114: Missing quote: "normal \<Plug>VimwikiAddHeaderLevel
E15: Invalid expression: "normal \<Plug>VimwikiAddHeaderLevel

是否有一些特殊的语法可以让我执行此映射?

1 个答案:

答案 0 :(得分:1)

  • 您不会从正常模式映射进入命令行模式(对于:execute); :丢失。
  • <Plug><CR>已被映射评估;双引号不能保护它们。 <CR>提交了(不完整的,因为Vim没看到结尾的")命令行,这导致了E114
  • <转义为<lt>之后,您仍然需要另一个<CR>来结束:execute命令。
:nmap <buffer> = :execute "normal \<lt>Plug>VimwikiAddHeaderLevel\<lt>CR>"<CR>

正如我在您的other question中所指出的那样,如果您确实想解决该插件无法接受计数的问题,则需要一个:for循环。尽管可以在映射的右侧进行所有内联操作,但是强烈建议将循环分成单独的:function,以避免此类转义问题。在函数内部,插件调用很简单

:execute "normal \<Plug>VimwikiAddHeaderLevel"