Ho un file con queste righe:Duplicate ogni riga in VI
aa
bb
cc
dd
voglio convertire questo in:
aa
aa
bb
bb
cc
cc
dd
dd
Questo è possibile in VI?
Ho un file con queste righe:Duplicate ogni riga in VI
aa
bb
cc
dd
voglio convertire questo in:
aa
aa
bb
bb
cc
cc
dd
dd
Questo è possibile in VI?
Provate questo semplice:
:g/^/norm yyp
Ancora un altro (più breve):
:%s/.*/&\r&
Un altro:
:%!sed p
Grazie. Ha funzionato. – arunmoezhi
Grazie per l'opzione s, perché stavo cercando di fare questo per una selezione visiva e questo ha funzionato per me. – mmarchin
Utilizzare il comando globale g
di operare ogni riga nel file:
:g/^/norm yyp
Il comando g
funziona su tutte le linee che corrispondono a un modello. ^
è uno schema che corrisponderà a qualsiasi linea. norm
esegue il comando yyp
, che copia la linea corrente e la incolla. :g/^/norm Yp
funzionerà anche.
Vedere :help global
per ulteriori dettagli sul comando e vedere anche questa pagina vim wiki su g
.
Grazie per la spiegazione – arunmoezhi
O semplicemente ':% norm Yp' – Conner
@Conner: Non funziona, in quanto% scorre sull'intervallo originale, ma il comando aggiunge linee. Hai bisogno della logica "contrassegna prima, poi itera" di ': global' qui. –
mi piace g/^/t.
Il comando g
(per global
) cercherà tutte le righe che corrispondono a un modello.
Il modello specificato è ^
, che corrisponderà a tutte le linee. t
copia e incolla e infine
il dot
indica di incollare di seguito.
Vince per brevità?
+1 Troppi modi. Questo è il più corto, immagino. – kev
Grazie per la risposta. Ho svalutato lo – arunmoezhi
questo è quello che di solito uso – sehe
Probabilmente di interesse per molte persone che arrivano qui: http://stackoverflow.com/q/29368158/812102 –
Usa Tizio atomo !! :). Puoi farlo con Cmd + Shift + D (o Ctrl + Shift + D) –