2009-08-18 20 views
63

Voglio eseguire una macro che ho appena registrato nel registro "x" su ogni singola riga di un buffer aperto, dal mio cursore alla fine del buffer, in vim. Come lo faccio?riprodurre una macro vim fino alla fine del buffer

so di poter riprodurre le macro n volte:

[email protected] 

... o semplicemente tenere premuto @ fino a raggiungere l'l'ultima riga, ma voglio appena colpito pochi tasti e da fare con esso.

Grazie in anticipo.

+0

15 @ x non funziona su Windows gvim –

risposta

77

Personalmente vorrei fare

VG:normal @x 

Edit: ha cambiato registro a quello specificata.

+0

Bello. Mi piace che questa soluzione funzioni solo sull'area selezionata. – Kevin

+0

L'ho mappato a nnoremap <[email protected]> VG: norm @ q PAS

5

[email protected], a meno che non si dispone di un buffer di grandi dimensioni ...

+3

perché no solo '%: normale @ x' o '1, $: normale @ x'? –

+3

questa è sicuramente la soluzione più elegante - Immagino che '99999 @ x' sia solo la cosa naturale che ti viene in mente quando sei di fretta :) – Peter

+1

Non 9999999 @ x eseguirlo molte volte nell'ultima riga a meno hai esattamente 999999 linee? –

17

fare macro ricorsiva:

[email protected] 

es:

[email protected] 

Sarà upcase prima parola da riga corrente la fine del file con singolo @a. ma assicurarsi che "il registro è vuoto:

let @a="" 
+3

Eccellente. Questo approccio è più utile dell'approccio '%: normal' in quanto rispetta qualsiasi movimento di linea all'interno della macro, quindi è utile laddove le linee non sono identiche nella forma. Trovo più facile creare una macro 'a' per definire l'azione e quindi fare in modo che la macro 'b' faccia il bit ricorsivo, cioè qb @ a @ bq. –

+2

Evita questo se la tua macro implica una ricerca, poiché continuerà dall'alto. 'ctrl-c' per interrompere se ciò accade! –

+2

@IainBallard, ': set nowrapscan' lo fa fallire e si ferma quando raggiunge la fine del file. – ericbn

53

Si può fare (in modalità di comando)

:%normal @x 
0

Da vim wiki, versione abbreviata: qqqqq per registrare la macro @qq per terminare la registrazione @q per eseguirlo (e durerà fino alla fine del file)

+1

Si prega di aggiungere un riferimento alla documentazione? – aturegano

+1

@aturegano Penso che l'autore intendesse usare una macro ricorsiva. Vedi [The Vim Wiki: Registra una macro ricorsiva] (http://vim.wikia.com/wiki/Record_a_recursive_macro) per maggiori informazioni. – dylnmc

Problemi correlati