代码之家  ›  专栏  ›  技术社区  ›  merlin2011

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

vim
  •  0
  • merlin2011  · 技术社区  · 6 年前

    下面的命令将调用所需的函数。

    :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 回复  |  直到 6 年前
        1
  •  1
  •   Ingo Karkat    6 年前
    • 你不进去 命令行模式 (用于 :execute )来自 正常模式 映射; : 遗失了。
    • 这个 <Plug> <CR> 已经由映射进行了评估;双引号不保护它们。这个 <CR & GT; 提交(不完整,因为Vim没有看到尾随 " )命令行,这会导致 E114 .
    • 逃逸后 < 作为 <lt> 你还需要另一个 <CR & GT; 得出结论 执行 命令。
    :nmap <buffer> = :execute "normal \<lt>Plug>VimwikiAddHeaderLevel\<lt>CR>"<CR>
    

    正如我在你的 other question 你需要一个 :for 如果您真的想解决插件无法接受计数的问题,请循环。尽管可以在映射的右侧执行所有内联操作,但可以将循环分离为单独的 :function 强烈建议,以避免此类转义问题。在函数内部,插件调用是一个简单的

    :execute "normal \<Plug>VimwikiAddHeaderLevel"