Salva l'ultima azione (.) In una macro


9

Caso d'uso

Sono in modalità normale. Non ho pensato esplicitamente di registrare una macro, ma apporto un singolo cambio di comando. Ora posso ripetere questa azione usando il punto.

Ora mi rendo conto che è un'azione utile da salvare in una macro da utilizzare in seguito anziché digitare ogni volta l'intero comando. Posso occuparmi di tutte le modifiche che richiedono questo comando in questo momento usando il punto, oppure posso continuare con la modifica e usare questo comando in un secondo momento salvandolo in una macro.

Quest'ultimo è quello che voglio fare, ma il modo più semplice che posso pensare di farlo non è facile: annulla la mia modifica, avvia la registrazione di una macro e digita nuovamente il comando per apportare la modifica richiesta e interrompere la registrazione della macro.

Cosa ho provato finora:

La registrazione del punto in una macro non funziona perché registra il punto e non la modifica che il punto esegue. (Ad esempio, supponiamo che il comando memorizzato nel punto fosse d5wSe avvii la registrazione di una macro e esegui l'azione tramite. Mi aspettavo che eliminasse 5 parole ogni volta che esegui la macro, quindi non accadrà. La prossima volta che eseguirai la macro farà un punto e non il comando d5w. Ciò significa che se hai apportato qualche altra modifica dopo aver registrato la macro, ad esempio elimina 3 parole utilizzando d3wed è stata l'ultima modifica eseguita, quindi quando esegui la macro eliminerà 3 parole e non 5, perché è solo in esecuzione .)


Faccio fatica a capire sia cosa vuoi fare, sia perché non fai quello che è con una macro.

1
@DrEval L'OP si rende conto dopo aver eseguito un comando in modalità normale che avrebbero dovuto salvarlo in una macro e non vuole digitarlo di nuovo durante la registrazione della macro.
Ricco

Risposte:


2

Vim non conserva una cronologia dei tuoi normali comandi in modalità. Se si desidera conservare una cronologia della cronologia delle modalità normali, è possibile utilizzare quanto segue per salvarla in un file: https://vi.stackexchange.com/a/587/13848

I comandi in modalità normale sono in genere brevi, quindi le persone digitano semplicemente in modalità normale e non provano a creare macro. Tuttavia, se si desidera creare macro fuori dai normali comandi di modalità, è possibile convertirlo in un Excomando di modalità e quindi salvarlo in una macro come sottolineato da @wmmso. Puoi farlo usando il normcomando. Quindi, se si desidera eliminare 2 parole a partire dalla posizione corrente del cursore e utilizzare un comando in Exmodalità normale in modalità uso :norm d2w. (Rif .: http://vimdoc.sourceforge.net/htmldoc/various.html#:norm , Esegue il comando normale su intervallo )

È preferibile utilizzare un Excomando mode se è un comando complicato, in quanto consente di digitare l'intero comando in un buffer, assicurarsi che sia effettivamente corretto e anche salvarlo nella cronologia della riga di comando.

Ora che hai il tuo normale comando in modalità ex, puoi anche sfogliare il tuo comando come la cronologia usando q:e quindi copiarlo in un registro usando "ay$, mentre sulla riga contenente la riga di comando che vuoi salvare in una macro. Quindi, quando si desidera eseguire la macro, è possibile eseguirla utilizzando@a


Come scriveresti un normale comando in modalità nella riga di comando? per esempio d2w?
Peeyush Kushwaha,

Aggiunti alcuni chiarimenti nella risposta. Ti aiuta?
alpha_989,

0

copia il contenuto del registro ":" (quello che hai appena fatto) in un altro registro, ad es., registra un:

:let @a = @:

puoi eseguirlo di nuovo usando

@a

Questo non funziona per me in vim 7.4. Sembra che il registro :contenga l'ultimo comando eseguito tramite :command-name-goes-hereanziché un normale comando in modalità comed2w
Peeyush Kushwaha

2
Tale soluzione funziona solo con comandi ex e non con comandi in modalità normale. Non sono a conoscenza di un registro che contiene l'ultimo comando in modalità normale. Sarebbe utile
Steve,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.