Pregunta

¿Cómo puedo agregar números de línea a un rango de filas en vim? No como en ": set nu " - esto solo muestra números, pero no los agrega al archivo.

¿Fue útil?

Solución

Con

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

EDITAR: para resumir los comentarios.

Este comando se puede modificar tanto como quieras.


Supongamos que desea agregar números delante de las líneas desde una selección visual ( V + mover), y desea que la numeración comience en 42.

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

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

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

Si necesita esto para ordenar como texto, es posible que desee rellenar los resultados en cero, lo que se puede hacer usando printf para 0001, 0002 ... en lugar de 1, 2 ... por ejemplo:

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

De todos modos, si desea más información, simplemente abra vim help: : h: s y siga los enlaces ( | subreplace-special | , ..., < código> | submatch () | )

Otros consejos

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 se imprime en la salida estándar. Afortunadamente, esta solución compleja tiene menos de 10 caracteres en vim:

 :%!cat -n

O, si solo desea una subselección, seleccione visualmente el área y escriba esto:

 :!cat -n

Eso colocará automáticamente los marcadores de selección visual y se verá así después de que lo hayas escrito:

 :'<,'>!cat -n

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

En un sistema GNU: con el binario externo nl :

:%!nl

Con un entorno similar a 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 en vim tan bien como en shell.
De Vim Tip28 :

:%!cat -n

o

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

Pero, si usa vim en MS-DOS, de win9x, win2000, perderá estas herramientas. Aquí hay una forma muy simple de archivar esto solo por vim:

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

O, una secuencia compuesta con alfabeto es tan fácil como la anterior:

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

También puedes usar un subst:

<*>

También es posible que solo desee imprimir las líneas sin agregarlas al archivo:

  

" A veces podría ser útil, especialmente, editar archivos de origen grandes 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 debe imprimirse siempre, coloque la línea set printoptions = número: y en vimrc . & Quot;

Primero, puede eliminar los números de línea existentes si necesita:

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

Luego, puedes agregar números de línea. NR se refiere al número de línea actual que comienza en uno, así que puedes hacer algunos cálculos para obtener la numeración que deseas. El siguiente comando le da números de línea de cuatro dígitos:

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

El " VisIncr " es un complemento adecuado para insertar columnas de números incrementales en general (o letras, fechas, números romanos, etc.). Puede controlar el formato del 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 desde plugin.

Si alguien quiere poner una pestaña (o algunos espacios) después de insertar los números de línea utilizando la esta excelente respuesta , Aquí hay una manera. Después de entrar en el modo de escape, haz:

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

^ significa el comienzo de una línea y % s es la directiva para la sustitución. Por lo tanto, decimos que coloque un número de línea al comienzo de cada línea y agregue 4 espacios y luego ponga el contenido de la línea antes de la sustitución, y haga esto para todas las líneas del archivo.

Esto lo sustituirá automáticamente. Alternativamente, si desea que el comando le solicite confirmación, haga lo siguiente:

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

P.S: poder de vim :)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top