vi [m] lee el rango de líneas de otro archivo

9

En Linux, editando file_Ben vim quiero agregar la línea 10-25 file_A. Ejemplo: uno tiene un conjunto completo de documentos HTML con el mismo encabezado y sí, uno podría crear una plantilla y comenzar desde allí, pero aún así:

Estoy buscando una manera simple [y elegante] de insertar un rango de líneas de un archivo y agregarlo al archivo que estoy editando actualmente. En vim.

Las soluciones que he encontrado hasta ahora, pero no son exactamente lo que estoy buscando, son

  • dentro file_B del comando :read file_Aagregará * todo el archivo_A * en el archivo_B. Demasiado
  • hay copiar y pegar dentro de vim, pero para esto debe haber abierto file_A
  • dentro del archivo_A :10,25w! file_B'enviará' el rango de líneas dado a file_B.
    Esto parece bastante parecido a copiar y pegar
  • se pueden abrir varias ventanas en vim
    Pero como trabajo en una pantalla de 8 pulgadas, varias ventanas dificultan la orientación

Como no pude encontrar una solución cómoda, me pregunto si simplemente entendí mal algo o las formas que encontré hasta ahora se usan comúnmente y se toman como la forma estándar.

erch
fuente
¡Vea esta pregunta SO , la respuesta de @ Bernhard fue la respuesta aceptada a esa pregunta allí también!
slm
@slm Estaba al tanto de esta respuesta, pero como no la puse en la lista de soluciones que encontré, gracias por la pista. Todavía estoy buscando algo construido dentro vim. Pero esto parece fuera de alcance. Y realmente me pregunto si esto solo se puede lograr a través de comandos externos, porque hasta donde llegué vimahora, llegué a pequeñas restricciones hasta aquí.
erch
@ cellar.dweller Podrías hacer algún tipo de función si realmente quieres algo más fácil.
Bernhard

Respuestas:

11

La mejor solución que se me ocurre es llamar externamente sedy combinar eso con:read !

:r !sed -n -e '10,25p' fileB
Bernhard
fuente
No funciona aquí, pero ¿por qué? Primero, gracias por tu ayuda. Lo que obtengo es 'E34: sin comando anterior' [traducido más o menos] como si vim intenta repetir un comando. Hasta donde lo entiendo, paso a paso: :res la abreviatura de readvim. No tengo conocimiento acerca de sedcómo usarlo. Por supuesto, lo reemplacé fileBcon el archivo real :)
erch
@ cellar.dweller Mi respuesta fue actualizada por alguien, recibí el mismo error por ese código. Lo hice retroceder. Vea si esto funciona para usted.
Bernhard
@Stephane Bueno para acortar las respuestas, pero su sugerencia no funcionó.
Bernhard
¡Ahora funciona! Para agregar un poco de myslef: comenzando con :10retc. colocará el contenido de la línea diez en [mientras exista]. Funciona como un encanto ahora. Excelente. ¡Muchas gracias!
erch
2
Ups, lo siento. Olvidé la expansión de vim de! Que debería haber sido :r!sed 10,25\!d. Tenga en cuenta que no necesita las -ecomillas, por lo que también puede escribirlas :r!sed -n 10,25ppara abreviar. :r sed '10,$\!d;25q'para evitar leer todo el archivo.
Stéphane Chazelas