Vim的基于<plug>的映射不适用于:normal command </plug>

时间:2012-01-14 12:43:42

标签: vim

说,我有以下

: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的任何内容。这需要黑暗的黑客吗?

1 个答案:

答案 0 :(得分:11)

他们确实正常工作,您只是提供<Plug>,提供<Plu,{{1 },g。正确的语法是

>

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

另请注意,执行call feedkeys("<Plug>Ls")后,execute "normal ".mapleader."L"实际上不应该被用作mapleader更改,然后此:nm <Leader>L <Plug>Ls会尝试调用不存在的映射({{ 1}}更改不会影响已创建的映射)。而且你无法知道:execute …是否已经改变。