Sostituisci un modello con il numero di riga corrente


15

Vorrei sostituire 'x' in questo file con il numero di riga corrente. Cioè, cambia

x
x
x

per

1
2
3

Per ora, uso un one-liner Perl:

perl -pi -e '$x=$.; s/x/$x/' myfile.txt

Penso che UltraEdit possa farlo con una selezione e sostituzione verticale. Questo può essere fatto in vim? (Il mio esempio qui presuppone che 'x' sia tutto ciò che c'è su una riga. Ma le righe nel mio file reale sono molto più complicate.)

Risposte:


23

Sì, vim può farlo! Effettua una ricerca globale xe sostituiscila con \=printf("%d", line('.'). Per esempio:

:%s/x/\=printf("%d", line('.'))

Puoi anche passare xa un'altra ricerca, se necessario.

Spiegazione:

Questo sostituisce ogni ricorrenza di x(o qualunque cosa tu cerchi) con il registro di valutazione \=. Questo registro valuta il codice vimscript e restituisce una stringa. In questo caso, il codice da valutare è "Stampa la riga su cui ci troviamo come numero decimale"


9

Dato che hai menzionato la selezione e la sostituzione verticale, puoi farlo anche tu. Utilizzare CtrlVper selezionare il blocco di testo che si desidera sostituire, quindi cdigitare 0, per sostituirlo con 0s. Quindi, seleziona quegli 0:

inserisci qui la descrizione dell'immagine

Quindi premere g<c-a>( g+ Ctrla):

inserisci qui la descrizione dell'immagine

Se hai sostituito una singola colonna, puoi utilizzare gvper riselezionare rapidamente la stessa area.

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.