Aggiungi numeri di riga al codice sorgente in vim

Come posso aggiungere numeri di linea a un intervallo di righe in vim? Non come in “: set nu” – questo mostra solo i numeri, ma non li aggiunge al file.

Con

:%s/^/\=line('.')/ 

EDIT: per riassumere i commenti.

Questo comando può essere ottimizzato quanto vuoi.


Diciamo che vuoi aggiungere numeri davanti alle linee da una selezione visiva ( V + muovi) e vuoi che la numerazione inizi a 42.

 :'<,'>s/^/\=(line('.')-line("'<")+42)/ 

Se vuoi aggiungere una stringa tra il numero e il vecchio testo dalla riga, basta concatenare (con . In VimL) con l'espressione numero:

 :'<,'>s/^/\=(line('.')-line("'<")+42).' --> '/ 

Se hai bisogno di questo per ordinare come testo, potresti voler azzerare i risultati, che possono essere fatti usando printf per 0001, 0002 ... invece di 1, 2 ... es .:

 :%s/^/\=printf('%04d', line('.'))/ 

Ad ogni modo, se vuoi maggiori informazioni, apri help vim :h :s e segui i link ( |subreplace-special| , ..., |submatch()| )

cat -n aggiunge i numeri di riga al suo input. È ansible redirect il file corrente a cat -n e sostituire il buffer corrente con quello che stampa su stdout. Fortunatamente questa soluzione contorta è inferiore a 10 caratteri in vim:

  :%!cat -n 

Oppure, se vuoi solo una sottosezione, seleziona visivamente l’area e digita:

  :!cat -n 

Questo inserirà automaticamente i marcatori di selezione visuale e apparirà dopo averlo digitato:

  :'<,'>!cat -n 

Per cancellare i numeri di riga, ti consiglio di utilizzare control-v , che ti consentirà di selezionare visivamente un rettangolo, quindi puoi eliminare quel rettangolo con x .

Su un sistema GNU: con il binario nl esterno:

 :%!nl 

Con l’ambiente Unix, puoi usare cat o awk per generare facilmente un numero di riga, perché vim ha un’interfaccia amichevole con shell, quindi tutto funziona in vim e nella shell.
Da Vim Tip28 :

 :%!cat -n 

o

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

Ma, se usi vim in MS-DOS, di win9x, win2000, perdi questi toolkit. ecco un modo molto semplice per archiviare questo solo da vim:

 fu! LineIt() exe ":s/^/".line(".")."/" endf 

Oppure, una sequenza composta con l’alfabeto è facile come sopra:

 exe "s/^/".nr2char(line("."))."/" 

Puoi anche usare una sotto:

 :g/^/exe ":s/^/".line(".")."^I/" 

Puoi anche solo stampare le righe senza aggiungerle al file:

“A volte può essere utile in particolare modificare i file di origine di grandi dimensioni per stampare i numeri di linea su carta.
Per fare ciò è ansible utilizzare l’opzione :set printoptions=number:y per triggersre e :set printoptions=number:n per distriggersre questa funzione.
Se il numero di riga deve essere stampato sempre, posizionare la riga set printoptions=number:y nel vimrc . ”

Innanzitutto, puoi rimuovere i numeri di linea esistenti se è necessario:

 :%s/^[0-9]*// 

Quindi, è ansible aggiungere numeri di linea. NR fa riferimento al numero di riga corrente a partire da uno, quindi puoi fare alcuni calcoli su di esso per ottenere la numerazione desiderata. Il seguente comando ti fornisce numeri di linea a quattro cifre:

 :%!awk '{print 1000+NR*10,$0}' 

Il plugin “VisIncr” è utile per inserire colonne di numeri incrementali in generale (o lettere, date, numeri romani ecc.). È ansible controllare il formato numerico, il riempimento e così via. Quindi inserisci un “1” davanti a ogni riga (tramite :s o :g o l’inserto del blocco visivo), evidenzia quella colonna in modalità visual-block ed esegui uno dei comandi dal plugin.