Vim: come incollare un blocco di testo alla fine di più righe?


32

Di 'che ho un blocco di testo come questo:

// Commento 1
// Commento2
// Commento3

E voglio aggiungere ciascuna di queste righe alla fine di 3 righe di codice corrispondenti:

foo = 1;
bar = 2;
baz = 3;

In modo che il risultato finale sia

foo = 1; // Commento 1
bar = 2; // Commento2
baz = 3; // Commento3

C'è un modo semplice per farlo in Vim?


@Flimzy, purtroppo no. Di tanto in tanto commenti come i tuoi compaiono nelle domande di Vim, ma controlla questo: meta.stackexchange.com/q/25925/160504
sidyll

La community migliore per questa domanda è vi.stackexchange.com
thinwybk,

Risposte:


36

Utilizzare la modalità blocco visivo ( Ctrl+ v) per selezionare una serie di linee, quindi una yo entrambe d.

Quindi, se hai selezionato le linee foo, bar, baz usa di nuovo la modalità di blocco visivo per selezionare la prima colonna delle righe di commento e poi le Shift+ pin posizione (o se hai selezionato le righe di commento, seleziona l'ultima colonna della foo bar baz linee e ploro al loro posto.

Capire il posizionamento potrebbe richiedere un po 'di pratica, ma quando hai il talento sarai in volo. Quando hai selezionato un blocco puoi anche usare Shift+ Aper aggiungere, ad esempio, spazi al blocco (quando aggiungi, il nuovo testo apparirà solo nella riga superiore, ma quando premi esc apparirà magicamente in tutte le righe selezionate) . Allo stesso modo, Shift+ ifarà lo stesso all'inizio del blocco selezionato su ciascuna riga.

Tuttavia, dovrai ripulire le righe vuote in seguito.

C'è anche un grande episodio di vimcast che mostra queste tecniche in modo più dettagliato.


1
Trovo che questa soluzione abbinata :set ve=allsia molto versatile. Personalmente uso il plugin UnconditionalPaste ( vim.org/scripts/script.php?script_id=3355 ) perché si adatta alle mie esigenze un po 'meglio.
Peter Rincker,

1

Bene, se è facile o no, dimmelo tu. Passare a // Comment 1, premere ddper eliminare. Passa alla linea con foo = 1;e premi p, per incollare sotto la linea. Spostati di foonuovo verso l'alto e premi Jper unirti alla fila. Tada.


0

Quanto segue farà esattamente ciò che descrivi:

:%s@\(\w\s\+=\s\+\(\d\+\)\)@\=submatch(1) . " // Comment" . submatch(2)@

A seconda di ciò che è effettivamente necessario (al contrario dell'esempio), in pratica, potrebbe essere più semplice selezionare il blocco "// Comment1" ecc. Block ( Ctrlv), yank ( y), andare alla fine del codice bloccare e incollare.

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.