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.