web-dev-qa-db-fra.com

Exécuter les commandes <Plug> dans vim

J'ai récemment trouvé un plugin vim utilisant quelque chose appelé <Plug>. Par exemple, il y a une commande <Plug>abc_def Que je voudrais exécuter.

J'ai tout essayé comme :<Plug>abc_def Et similaire. Rien n'a fonctionné. Et :help <Plug> N'a donné aucune information.

Cependant, j'ai pu l'exécuter en créant un mappage :map x <Plug>(unite_redraw). Ensuite, je peux l'exécuter en appuyant sur x.

Maintenant, existe-t-il un moyen d'exécuter :<Plug>abc_def Sans créer un mappage factice juste pour l'exécuter? Le plugin que j'utilise est Unite.

46
Tarrasch

Les mappages <Plug> Sont signifiés à mapper et à appeler via la carte. Une carte <Plug> Est un appareil permettant d'exposer une interface propre d'actions de plugin à l'utilisateur.


Exemple: Au lieu de mapper une clé à une fonction de plugin dans le code dur du plugin, comme "mapper zz vers le centre d'action" curseur esthétique "",

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

il est préférable d'exposer uniquement un mappage nommé <Plug> que l'utilisateur peut ensuite remapper, sans avoir à copier et coller "l'action".

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

Ceci est ensuite facile à remplacer, à réutiliser, à brancher par l'utilisateur.


Les mappages <Plug> Ne sont actifs que dans les modes pour lesquels ils ont été définis. Pour exécuter un mappage <Plug> Défini pour le mode normal, vous pouvez faire comme avec n'importe quelle commande normale: utilisez :normal (Sans le point d'exclamation).

:execute "normal \<Plug>NiceCenterCursor"

Puisque <Plug> Représente en fait une clé magique spéciale, nous devons utiliser :normal Avec :execute Et échapper au <Plug>.

Le mécanisme <Plug> Est décrit en détail à :h 41.11 . Voir aussi cet article sur ce sujet par un maître Vim .

63
glts