2013-08-31 10 views
34

Recentemente ho trovato un plug-in vim utilizzando qualcosa chiamato <Plug>. Ad esempio c'è un comando <Plug>abc_def che vorrei eseguire.Esegui comandi <Plug> in vim

Ho provato tutto come :<Plug>abc_def e simili. Niente ha funzionato E :help <Plug> non ha fornito informazioni.

Tuttavia, sono stato in grado di eseguirlo creando una mappatura :map x <Plug>(unite_redraw). Quindi posso eseguirlo premendo x.

Ora, c'è un modo per eseguire :<Plug>abc_def senza creare una mappatura fittizia solo per eseguirlo? Il plugin vero e proprio che uso è Unite.

risposta

44

<Plug> mappature sono significava da mappare e chiamare tramite la mappa. Una mappa <Plug> è un dispositivo che espone all'utente un'interfaccia pulita di azioni del plugin.


Esempio: Invece di mappatura qualche chiave di qualche funzione plug-in codice rigido del plugin, come ad esempio "mappa zz all'azione 'cursore del centro estetico'",

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

è meglio esporre solo una mappatura <Plug> denominata che l'utente può quindi rimappare, senza dover copiare e incollare l'azione.

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

Questo è quindi facile da sostituire, riutilizzare, collegare dall'utente.


<Plug> mappature sono attivi solo nei modi che sono stati definiti per. Per eseguire una mappatura <Plug> definita per la modalità normale, è possibile eseguire come con qualsiasi normale comando: utilizzare :normal (senza il punto esclamativo).

:execute "normal \<Plug>NiceCenterCursor" 

Dal <Plug> rappresenta in realtà una chiave magica speciale, abbiamo bisogno di usare :normal insieme :execute e sfuggire alla <Plug>.

Il meccanismo <Plug> è descritto in profondità a :h 41.11. Vedi anche this article about this topic by a Vim master.

+4

Oh, quindi è essenziale che 'nmap' sia' nmap' e non 'nnoremap', perché penserà a' NiceCenterCursor' come a un'altra mappatura. Corretta? – Tarrasch

+4

@Tarrasch Esattamente, il lato destro della mappa deve essere rimappato affinché funzioni. Lo stesso con ': normal': è essenziale usare il (remapping)': normal', non il remapping ': normal!'. – glts