Strappi e incolla durante l'incremento


14

Sto modificando un file .sql in Vim:

INSERT INTO apps_forms (app_id, form_id) VALUES
(1, 1),

Quello che sto cercando di fare è strappare la (1, 1),linea e incollarla 137 volte; tuttavia, voglio che il secondo numero tra parentesi venga incrementato ogni volta. L'output sarebbe simile a:

INSERT INTO apps_forms (app_id, form_id) VALUES
(1, 1),
(1, 2),
(1, 3),
...
(1, 137),

C'è un modo per farlo in Vim e, in tal caso, quale comando dovrei usare?

Grazie!

Risposte:


11

Posiziona il cursore sulla (1, 1),riga quindi digita:

qaVypt)<C-a>q135@a

Spiegazione :

qainizia la registrazione di una macro all'interno del registro a (è possibile scegliere un'altra lettera).

Vyp duplica la riga corrente, selezionando l'intera riga (V), copiandola (y) e incollandola di seguito (p).

t) sposta il cursore appena prima della successiva parentesi chiusa, in modo che si trovi sul secondo numero.

<C-a>( Ctrle a) incrementa il numero.

q termina la registrazione della macro.

135@aripete la macro memorizzata nel registro a 135 volte.

Modifica: Peter Rincker ha un comando più breve:

qqYpW<c-a>q135@q

Le differenze sono:

utilizza il registro q per memorizzare la macro (più veloce da digitare qqrispetto al qafatto che è la stessa chiave),
copia la riga con una sola sequenza di tasti Y(anziché due Vy)
e sposta il cursore sul secondo numero con una sola sequenza di tasti W(invece di t)).


4
Golf Vim: qqyypW<c-a>q135@q. Ancora più breve se si utilizza Yinvece di yy.
Peter Rincker,

9

I Vims recenti hanno imparato ad aumentare le aree visivamente selezionate e a creare una sequenza. Quindi puoi farlo dopo aver incollato la linea 137 volte:

1) visivamente block-select ( Ctrl-V) il secondo 1 a partire dalla riga 3.

2) premere gCtrl-A

Ho registrato un cast dello schermo qui

Disclaimer: questo richiede un Vim 7.4.900 o giù di lì.


Testato con successo in Vim 7.4.826 su Debian / sid.
Dubu,

Il tuo screencast è scomparso ma questo metodo è FANTASTICO! Grazie.
david_nash,

2

Il modo facile da capire / facile da ricordare / facile da adattare ad altre situazioni per farlo: usa il plug-in VisIncr (se preferisci usare una versione che funziona davvero bene con i gestori di pacchetti di questo secolo invece di trattare con vimballs , puoi ottenerlo da GitHub ). Con esso:

  • vai alla (1, 1),linea e strappalo:Vy
  • incollalo 136 volte: 136p
  • vai alla seconda colonna di 1e contrassegnala verticalmente:C-vGf)h
  • eseguire l'incremento: :II
  • leggere il manuale per scoprire le altre chicche: :help visincr.

1

Giocherei con g^a.

Prova 137i0^v137kg^a.


1
Benvenuti in Vi e Vim ! Ho formattato la tua risposta usando il markdown. Sarebbe ancora meglio se si modifica per spiegare come questo risponde alla domanda dei PO.
D. Ben Knoble,
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.