说,我有以下
: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>
,而是提供 <
、 P
、 l
、 u
、 g
、 >
。正确的语法是
: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/