Domanda

Come posso aggiungere numeri di riga a un intervallo di righe in vim? Non come in ": imposta nu " - visualizza solo numeri, ma non li aggiunge al file.

È stato utile?

Soluzione

Con

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

EDIT: per riassumere i commenti.

Questo comando può essere modificato quanto vuoi.


Supponiamo che tu voglia aggiungere numeri prima delle linee da una selezione visiva ( V + sposta) e desideri che la numerazione inizi a 42.

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

Se vuoi aggiungere una stringa tra il numero e il vecchio testo della riga, concatenalo (con . in VimL) per l'espressione numerica:

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

Se hai bisogno di questo per ordinare come testo, potresti voler azzerare i risultati, cosa che puoi fare usando printf per 0001, 0002 ... invece di 1, 2 ... ad esempio:

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

Comunque, se vuoi maggiori informazioni, apri vim help: : h: s e segui i link ( | subreplace-special | , ..., < code> | submatch () | )

Altri suggerimenti

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

 :%!cat -n

Oppure, se si desidera solo una sottoselezione, selezionare visivamente l'area e digitare questo:

 :!cat -n

Ciò inserirà automaticamente i marcatori di selezione visiva e apparirà così dopo averlo digitato:

 :'<,'>!cat -n

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

Su un sistema GNU: con il binario esterno nl :

:%!nl

Con un ambiente simile a Unix, puoi usare cat o awk per generare facilmente un numero di linea, perché vim ha un'interfaccia amichevole con la shell, quindi tutto funziona in vim così come nella shell.
Da Vim Tip28 :

:%!cat -n

o

:%!awk '{print NR,
fu! LineIt()
  exe ":s/^/".line(".")."/"
endf
}'

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

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

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

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

Puoi anche usare un subst:

<*>

Puoi anche solo stampare le linee senza aggiungerle al file:

  

" A volte potrebbe essere utile soprattutto la modifica di file di origine di grandi dimensioni per stampare i numeri di riga su carta.
  Per fare ciò puoi usare l'opzione : imposta printoptions = numero: y per attivare e : imposta printoptions = numero: n per disattivare questa funzione.
  Se il numero di riga deve essere sempre stampato, posizionare la riga set printoptions = number: y nel vimrc . & Quot;

Per prima cosa, puoi rimuovere i numeri di riga esistenti se devi:

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

Quindi, è possibile aggiungere numeri di riga. NR si riferisce al numero di riga corrente che inizia da uno, quindi puoi fare un po 'di matematica su di esso per ottenere la numerazione desiderata. Il seguente comando fornisce numeri di riga di quattro cifre:

:%!awk '{print 1000+NR*10,<*>}'

Il plug-in " VisIncr " è utile per l'inserimento di colonne di numeri in aumento in generale (o lettere, date, numeri romani ecc.). È possibile controllare il formato numerico, il riempimento e così via. Quindi inserire un " 1 " davanti a ogni riga (tramite : s o : g o inserimento del blocco visivo), evidenzia quella colonna in modalità blocco visivo ed esegui uno dei comandi dal plugin.

Se qualcuno desidera inserire una scheda (o alcuni spazi) dopo aver inserito i numeri di riga utilizzando questa eccellente risposta , ecco un modo. Dopo essere entrato in modalità escape, fai:

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

^ indica l'inizio di una riga e % s è la direttiva per la sostituzione. Quindi, diciamo che metti un numero di riga all'inizio di ogni riga e aggiungi 4 spazi ad essa e poi metti qualunque sia il contenuto della riga prima della sostituzione, e fallo per tutte le righe nel file.

Questo lo sostituirà automaticamente. In alternativa, se desideri che il comando ti chieda conferma, esegui:

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

P.S: potenza di vim :)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top