2013-08-31 154 views
34

我最近發現了一個名爲<Plug>的vim插件。例如,我想執行一個命令<Plug>abc_def在vim中執行<Plug>命令

我試過像:<Plug>abc_def和類似的東西。沒有工作。而:help <Plug>沒有提供任何信息。

但是,我已經能夠通過創建映射:map x <Plug>(unite_redraw)來執行它。然後我可以按x執行它。

現在,有沒有辦法執行:<Plug>abc_def而不創建一個虛擬映射只是爲了運行它?我使用的實際插件是Unite。

回答

44

<Plug>映射是意味着要映射並通過映射調用。 A <Plug> map是一個向用戶公開一個乾淨的插件操作界面的設備。


實施例:相反映射的一些鍵在插件的硬代碼一些插件功能,如「映射zz的動作‘中心光標美學’」,

nnoremap <expr> zz 'zz'.float2nr(winheight(0)*0.1).'<C-E>' 

它是最好只公開一個名爲<Plug>的映射,用戶可以重新映射,而不必複製和粘貼「操作」。

nnoremap <expr> <Plug>NiceCenterCursor 'zz'.float2nr(winheight(0)*0.1).'<C-E>' 
nmap zz <Plug>NiceCenterCursor 

這很容易覆蓋,重新使用,由用戶插入。


<Plug>映射僅在它們已被定義的模式下處於活動狀態。要執行爲正常模式定義的<Plug>映射,您可以使用任何常規命令:使用:normal(不帶感嘆號)。

:execute "normal \<Plug>NiceCenterCursor" 

由於<Plug>實際上代表了一個特殊的法寶,我們需要與:execute一起使用:normal,逃離<Plug>

<Plug>機制在:h 41.11深度描述。另請參閱this article about this topic by a Vim master

+4

噢,所以'nmap'是'nmap'而不是'nnoremap'是非常重要的,因爲它會把'NiceCenterCursor'看作另一個映射。正確? – Tarrasch

+4

@Tarrasch確切地說,地圖的右側必須重新映射才能正常工作。與':normal'相同:使用(重新映射)':normal'而不是非重映射':normal!'是非常重要的。 – glts