2012-11-17 14 views
5

Ho una lista enorme di numeri e vorrei aggiungere il contenuto alla fine di ogni riga. E 'qualcosa di simile:Aggiunta/generazione di contenuto automaticamente in Vim

Prima:

123123 
123123 
13234 
124125 
12634 
5234 

Dopo:

123123, 1 
123123, 2 
13234, 3 
124125, 4 
12634, 5 
5234, 6 

Un paio di punti:

  1. So che :range s/oldpattern/newpattern/ sostituirà il oldpattern dal nuovo uno.

  2. So che for i in range(begin, end) | something | endfor può generare quei numeri extra.

Tuttavia, non so se è possibile combinare loro di fare ciò che voglio (o se c'è un modo diverso di farlo). Qualcuno sa come posso aggiungere automaticamente quei valori extra? Sono abbastanza sicuro che sia possibile utilizzare Vim, ma non so come.

risposta

5

Si può fare questo selezionando visivamente l'area quindi digitando

:s/$/\=', '.(line('.')-line("'<")+1)<CR> 

(gamma viene aggiunto automaticamente quando si digita : dalla modalità visiva). La modalità visuale è necessaria per ottenere la cosa line("'<"), se stai bene digitando il numero di linea al posto di utilizzare qualsiasi intervallo.

2

farei

:%!nl 
:%s/\v^\s*(\d+)\s+(.*)$/\2, \1/g 

volontà nl (per impostazione predefinita) saltare la numerazione righe vuote

O come un oneliner

:exec "%!nl"|%s/\v^\s*(\d+)\s+(.*)$/\2, \1/g 
+0

Nota che 'nl' non numera le righe vuote, quindi potrebbe essere necessario usare' nl -ba', a seconda del comportamento desiderato. –

0
:%!awk '{print $0", "NR}' 

o

:%!perl -lpe '$_.=", $."'