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 rigaset printoptions=number:y
nelvimrc
. ”
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.