vi / vim, ¿cómo puedo escribir varias líneas en un nuevo archivo?

30

Tengo un montón de líneas que quiero escribir en un archivo diferente.
¿Cómo puedo hacer eso?

Michael Durrant
fuente

Respuestas:

44

Tu puedes hacer

:100,200w filename

Por supuesto, 100.200 es el rango de líneas que desea escribir.

Bernhard
fuente
¿Las direcciones son inclusivas o exclusivas?
Marcin
3
Inclusivo. También incluye si usa patrones:: / ^ something /, / ^ else / w filename, o marcas: 'a,' bw filename incluye las líneas marcadas 'a' y 'b'.
Bruce Ediger
Hola @ Bernhard, ¿qué pasa si quiero cortar líneas del archivo actual?
Ravi Sevta
19

El mas general:

  1. Mueva el cursor a la primera línea del grupo que desea escribir. Golpe m y asecuencial. Eso es "establecer marca llamada 'a'".

  2. Mueva el cursor a la última línea del grupo, presione 'm' y 'b'.

  3. Cambia al modo de comando hit: como una secuencia, haz :'a,'b w filenameclic en return.

Eso funcionará en vi, nvi y vim.

Otro método, funciona en vim más moderno:

  1. Coloque el cursor en la primera línea del grupo de líneas que desea escribir. Pulse V, para "iniciar bloque visual de líneas".

  2. Mueva el cursor a la parte inferior del grupo de líneas. Vim resaltará con video inverso cada línea.

  3. Escribir. Presiona :para entrar en el modo de línea de comando. Eso le dará un aviso en la parte inferior de la pantalla que se verá así: :'<,'> Eso significa desde el comienzo del bloque visual hasta el final. Escriba wy el nombre del archivo y presione regresar.

Puede agregar líneas individuales al final del archivo según lo necesite colocando el cursor en la línea que desea escribir y luego escribiendo: :.w >> filenamey presionando la tecla de retorno.

Los comandos "escribir un grupo de líneas" también funcionan con ">> nombre de archivo" en lugar de solo "nombre de archivo". El ">>" hace que vi o vim se agregue al archivo, en lugar de simplemente escribirlo.

Bruce Ediger
fuente
8

Para agregar a la respuesta de Bernhard, también puede seleccionar una región usando el modo visual y luego ingresar :w filename.

noffle
fuente
8

Si conoce los números de línea que desea escribir, puede hacerlo desde la línea de comando:

vim -c "100,200w new_file.txt" -c wq original_file.txt
Akavall
fuente
1

Un pequeño truco es usar un número de línea relativo. Por ejemplo:: + 0, + 99w nombre de archivo escriba las siguientes 100 líneas a nombre de archivo.

Guokai Ma
fuente
¿Eso no sobrescribirá el archivo original? El OP quisiera escribir en un archivo diferente.
SabreWolfy
1
@SabreWolfy No; quizás te perdiste 'nombre de archivo' después de los números de línea. Acabo de probar su versión y funcionó.
Felwithe