2012-01-14 67 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