Lorsque j'enregistre une macro avec q
et que j'ai terminé, je peux taper:
q
pour arrêter l'enregistrement si je suis en mode normal ou visuel.<c-o>q
pour arrêter l'enregistrement si je suis en mode insertion...
Comment arrêter l'enregistrement si ma macro se termine en mode commande?
command-line
register
macro
iago-lito
la source
la source
:'<,'>s/toBeReplaced//g
puis place le curseur entre les deux//
pour que tout ce que j'ai à faire soit de tapernewString<cr>
et j'ai terminé. :)Réponses:
Une autre solution consiste en mode ligne de commande, utilisez
Ctrl-f
et appuyez surq
pour arrêter l'enregistrement.Ctrl-f
vous permet d'ouvrir la fenêtre de ligne de commande, dans laquelle vous pouvez modifier la commande en mode normal. Pour valider la commande, utilisez simplement enter.Par conséquent, après avoir ajouté quelque chose comme:
dans votre
.vimrc
, vous pouvez utiliser<c-q>
pour arrêter l'enregistrement d'une macro en mode commande.Florent
la source
^F
) à la fin de la macro, non? C'est du moins ce que je vois.qqSTARTMACRO:STARTCOMMANDLINEPART<c-f>i<c-o>q
et donc l'enregistrement s'est réellement arrêté pendant que vous tapiez la partie commande. Pour utiliser la macro:@qFINISHYOURCOMMAND<cr>
et vous avez terminé: pas besoin de la modifier. Malheureusement, cela ne semble pas fonctionner en mode visuel (ou cela perd la sélection) .. ou ai-je oublié quelque chose?@q
et la plage a été ajoutée au démarrage de la commande'<,'>
- tant que la macro a commencé avec:
....'<,'>
) correspond toujours à la sélection lors de la validation de la commande.Une façon de le faire:
qq
... d'autres caractères)ESC
sur pour sortir du mode cmdline,q
pour terminer votre macro.ESC
de votreq
registre (*): vous pouvez le coller dans un tampon, supprimer le^[
caractère, sélectionner à nouveau tout le contenu (par caractère) et le reculer pour vous enregistrerq
.@q
.En gros, vous "post-traitez" un peu votre macro, car elle est stockée dans un registre :)
(*) Un moyen rapide de supprimer le dernier caractère d'une macro stockée dans le registre
q
serait:la source
:let @q = @q[:-2]
s'il vous plaît? Surtout comment ça[:-2]
marche? :-)@q
ci-dessus). Quelques exemples iciAprès avoir lu votre commentaire sur le cas d'utilisation, il semble que vous pourriez utiliser un mappage de clé au lieu d'une macro.
J'ai cette ligne dans mon .vimrc (je ne me souviens pas où je l'ai trouvée):
Il a un effet similaire au cas d'utilisation que vous avez décrit, vous mettant sur la ligne de commande de sorte que la seule chose que vous ayez à faire est de taper le remplacement et d'appuyer sur Entrée, mais dans ce cas, en remplaçant toutes les occurrences du mot qui était sous votre curseur .
Pour simplement remplacer le bloc actuel, je pense que quelque chose comme ce qui suit devrait fonctionner:
Bien sûr, vous pouvez le mapper à la clé de votre choix.
Ce que cela fait: marquer la position actuelle à l'aide du marqueur sans nom, sélectionner visuellement le bloc actuel, quitter le mode visuel et ramener le curseur à la position enregistrée (les marqueurs de sélection visuels sont toujours définis), entrer en mode commande et taper la commande de remplacement , en insérant le mot qui se trouvait sous le curseur avec
<C-r><C-w>
et en positionnant votre curseur pour taper le remplacement.la source
toBeReplaced
modèle n'est pas aussi simple que "le mot sous le curseur", c'est pourquoi j'ai besoin d'une petite macro spécifique que je pourrais créer en déplacement. Et puis encore: trop spécifique pour une carte: \ Merci quand même :)toBeReplaced
partie (au lieu du mot actuel sous le curseur, ce qui est plus limitant).va{:s/<C-r>0//g<Left><Left>
avec cela, vous pouvez tirer à l'avance le motif dont vous avez besoin, puis appuyez simplement sur la touche mappée pour remplacer ce motif par quelque chose dans le courant bloquer.