1 votes

VIM : Comment vérifier si le script actuel est en cours d'exécution dans une macro ?

Dans un certain nombre de cas, j'ai un script de vim que je ne veux exécuter que lorsqu'il n'est pas exécuté dans une macro. Par exemple, dans certains cas, je fais clignoter le curseur pour me rappeler où il se trouve maintenant (ce qui est inutile lorsqu'il est exécuté dans une macro, et ne fait que rendre la macro 10x plus longue).

Dans ce cas, j'aimerais donc vérifier s'il s'agit d'une macro et éviter d'effectuer une opération inutile dans ce cas. J'ai parcouru l'aide un peu mais je n'ai pas trouvé de drapeau pour détecter cela. Est-ce possible ?

2voto

jopa Points 800

Il n'y a pas de fonction comme mode() ou spécial v:macro_running variable, et beaucoup soutiendraient que cela ne ferait qu'encourager les mauvaises pratiques.

Ce que vous pouvez faire, c'est utiliser le comportement de feedkeys() dont les clés passées sont généralement exécutées juste après la commande / le mappage, mais seulement à la toute fin de l'exécution de la macro. Si vous y placez vos commandes longues, elles ralentiront directement les commandes normales comme d'habitude, mais seulement (cumulativement) après l'exécution de la macro (et vous pouvez généralement l'interrompre avec <C-C> ).

Exemple

let @q = ',a,b'

Au lieu de :

nnoremap ,a aHello<Esc>2gs
nnoremap ,b aWorld<Esc>2gs

utiliser

nnoremap ,a aHello<Esc>:call feedkeys('2gs', 'n')<CR>
nnoremap ,b aWorld<Esc>:call feedkeys('2gs', 'n')<CR>

Cela insérera immédiatement l'ensemble du HelloWorld le texte à l'intérieur d'une macro.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X