2008-10-31 10 views

Respuesta

102

Con

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

EDITAR: para resumir los comentarios.

Este comando se puede ajustar tanto como desee.


Digamos que desea agregar números delante de las líneas de una selección visual (V + moverse), y desea que la numeración se inicia en 42.

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

Si desea agregar una cadena entre el número y el texto anterior de la línea, simplemente concatenar (con . en VimL) a la expresión de número:

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

Si necesita este para ordenar en forma de texto, es posible que desee almohadilla cero los resultados, los cuales se pueden hacer usando printf para 0001, 0002 ... en lugar de 1, 2 ... ej:

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

De todos modos, si desea obtener más información, basta con abrir vim ayuda: :h :s y seguir los enlaces (|subreplace-special|, ..., |submatch()|)

+0

Probado haciendo esto en una selección visual (donde 1 sería la primera línea en la selección) sin embargo, comienza el número en ese numerador de línea en el archivo. ¿Alguna forma de modificar el número de inicio? ¡Gracias! – Jason

+2

Por supuesto. Cambia "line ('.')" To "(offset + line ('.'))". –

+2

@Jason 'offset' puede ser' 1-line ("'<") '. Preguntándome por qué apareció esa pregunta tan antigua en mi RSS. – ZyX

32

cat -n agrega números de línea a su entrada. Puede canalizar el archivo actual a cat -n y reemplazar el búfer actual con lo que imprime en stdout. Afortunadamente esta solución complicada es menos de 10 caracteres en vim:

:%!cat -n 

O, si sólo desea una subselección, seleccionar visualmente la zona, y escribe esto:

:!cat -n 

Eso pondrá automáticamente el visual marcadores de selección, y se verá así después de haber tecleado:

:'<,'>!cat -n 

para borrar los números de línea, recomiendo el uso de control-v, lo que permitirá Para seleccionar visualmente un rectángulo, puede eliminar ese rectángulo con x.

+0

Lo que si quieres los números de línea comienzan con 0 en lugar de 1? – Nils

+0

Borrar la primera línea, numerar el resto. Primero se leyó la primera línea con un '0' inicial. ;) – sjas

+0

¡ESA es la respuesta! – user3751385

5

Con entorno tipo Unix, puede usar cat o awk para generar un número de línea fácilmente, porque vim tiene una interfaz amigable con shell, por lo que todo funciona tanto en vim como en shell.
De Vim Tip28:

:%!cat -n 

o

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

Pero, si se utiliza vim en MS-DOS, de win9x, Win2000, que la pérdida de estos kit de herramientas. aquí es una manera muy sencilla para archivar esto sólo por vim:

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

O, una secuencia compuesta con el alfabeto es tan fácil como antes:

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

También puede utilizar un subst:

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

puede también sólo desea imprimir las líneas sin agregarlos al archivo:

"A veces puede resultar especialmente útil editar grandes archivos fuente para imprimir los números de línea en papel.
Para hacerlo, puede usar la opción :set printoptions=number:y para activar y :set printoptions=number:n para desactivar esta función.
Si el número de línea se debe imprimir siempre, colocar la línea set printoptions=number:y en el vimrc "

+0

¿Quisiste decir 'gato' en lugar de 'llamar' en el primer ejemplo? –

+0

@Lance: dos años después, no estoy muy seguro: la revisión 3 de esta publicación me muestra revertir una corrección de 'cat' a' call' ... (la fuente probablemente sea Vim tip28 como en http: //neuron.tuke .sk/~ hudecm/VimTips-OFFLINE-nov02.txt) – VonC

+0

OK, la línea awk era lo que necesitaba de todos modos. ¿Sabes cómo implementaría eso para que me diera 3 o 4 números de letras, como comenzar con 100 o 1000? –

19

En un sistema GNU:. Con el nl externa binaria:

:%!nl 
+2

cool nl -v le permite especificar dónde debe comenzar la numeración, por lo que si desea que la primera línea sea la línea 0 en lugar de 1 use nl -v 0 – Nils

3

ElEl complemento 210 es bueno para insertar columnas de números incrementales en general (o letras, fechas, números romanos, etc.). Puede controlar el formato de número, el relleno, etc. Así que inserte un "1" delante de cada línea (a través de :s o :g o inserción de bloque visual), resalte esa columna en el modo de bloque visual y ejecute uno de los comandos del complemento.

4

En primer lugar, puede quitar los números de línea existentes si es necesario:

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

A continuación, puede agregar números de línea. NR se refiere al número de línea actual que comienza en uno, por lo que puede hacer algunas operaciones matemáticas para obtener la numeración que desea. El siguiente comando le da cuatro números de línea dígitos:

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