Vim的基于<Plug>的映射不适用于:normal命令

Shr*_*rat 7 vim

说,我有以下内容

:nm <Plug>Ls :ls<CR>
:nm <Leader>L <Plug>Ls
Run Code Online (Sandbox Code Playgroud)

当我做,L(,作为领导者)时,我确实获得了:ls命令的输出.当我这样做时:normal ,L,我也得到了输出,但是在执行以下操作时我没有

:normal <Leader>L
:normal <Plug>Ls
Run Code Online (Sandbox Code Playgroud)

我能理解为什么第一个不起作用,我想我必须做一些事情execute 'normal ' . mapleader . 'L'.我无法弄清楚的是第二个.它没有给我任何错误,它只是没有做任何事情,这是让我发疯的原因.我在文档中找不到任何相关内容.

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

ZyX*_*ZyX 11

他们有正常的工作,你只是不提供它<Plug>,您提供的<,P,l,u,g,>.正确的语法是

:execute "normal \<Plug>Ls"
Run Code Online (Sandbox Code Playgroud)

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

另请注意,执行后execute "normal ".mapleader."L"不应该像使用mapleader更改一样:nm <Leader>L <Plug>Ls,这:execute …将尝试调用不存在的映射(mapleader更改不会影响已创建的映射).你没有办法知道是否mapleader有所改变.