说,我有以下

:nm <Plug>Ls :ls<CR>
:nm <Leader>L <Plug>Ls

当我执行 ,L (, 是领导者)时,我确实得到了 :ls 命令的输出。我在执行 :normal ,L 时也得到输出,但在执行以下操作时我没有
:normal <Leader>L
:normal <Plug>Ls

我可以理解为什么第一个不起作用,我想我必须做类似 execute 'normal ' . mapleader . 'L' 的事情。我想不通的是第二个。它不会给我任何错误,它不会做任何事情,这就是让我发疯的原因。我在文档中也找不到任何关于此的内容。

我想要做的是从命令模式(实际上是在函数中)运行映射到 <Plug>Ls 的任何内容。这需要任何黑暗黑客吗?

最佳答案

它们确实可以正常工作,您只是不提供 <Plug> ,而是提供 <Plug> 。正确的语法是

:execute "normal \<Plug>Ls"

同样适用于 feedkeys() : call feedkeys("\<Plug>Ls") ,而不是 call feedkeys("<Plug>Ls")

还要注意,在执行 execute "normal ".mapleader."L" 后,mapleader 不应该真的被使用,好像 :nm <Leader>L <Plug>Ls 发生了变化,那么这个 :execute … 将尝试调用不存在的映射(mapleader 更改不会影响已经创建的映射)。而且您无法知道 mapleader 是否已更改。

关于Vim 基于 <Plug> 的映射不适用于 :normal command,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8862290/

10-11 05:29