2012-01-14 41 views
7

说,我有以下Vim的<Plug>基于映射不工作:正常命令

: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,从命令模式(实际上是一个函数)。任何黑暗的黑客需要这个?

回答

10

他们不正常,你就是不能提供它<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是否已经改变。

+0

是的,这工作。其实,我确实尝试过,但用单引号。我现在感到非常愚蠢!感谢这个美好的回答。从来不知道报价的用法有所不同。 – 2012-01-14 18:20:58