2008-12-24 18 views
49

Quiero unir todas las líneas de un archivo en una sola línea. ¿Cuál es la forma más simple de hacer esto? He tenido mala suerte al tratar de usar la sustitución (\r\n o \n no parece ser recogido correctamente en el caso de s/\r\n// en Windows). El uso de J en una expresión de rango tampoco parece funcionar (probablemente porque el rango ya no está en 'sincronización' después de que se ejecuta el primer comando).En Vim, ¿cuál es la forma más simple de unir todas las líneas de un archivo en una sola línea?

Probé :1,$norm! J pero esto solo hizo la mitad del archivo, lo cual tiene sentido porque solo une cada línea una vez.

+0

Consulte también "[Cómo eliminar el '\ n' de cada línea en un archivo] (http://stackoverflow.com/q/6868335/254635)". –

Respuesta

55

Ah, encontré la respuesta.

:1,$join 

Funciona como un encanto.

EDITAR: Como se señaló en el comentario:

:%join -or- :%j 

... elimina el rango.

+0

Esto también se puede escribir como: :% unirse a –

+5

O abreviado como:% j –

+3

También es posible que desee utilizar la operación gJ en lugar de j. La operación gJ une las líneas sin insertar o eliminar ningún espacio. –

125

Otra forma:

ggVGJ 

"ggVG" selecciona visualmente todas las líneas, y "J" se une a ellas.

+0

Ejemplos como este muestran por qué vim es tan poderoso. "gg", "V", "G", "J" son todos comandos serparados. excelente –

+0

Como la respuesta aceptada señala, ':% j' funciona, es corto y no requiere el modo visual. –

7

manera críptica:

[email protected]@q 

(los primeros tres q 's borrar el registro q, la [email protected] graba una macro para el registro q que realiza una combinación, a continuación, llama q, y los últimos @q lo ejecuta .

+0

Por supuesto. :-p http://www.reddit.com/r/programming/comments/61no8/holy_shmoly_haskell_smokes_python_and_ruby_away/c02jz8x –

+0

¿Por qué querría borrar primero el registro q, cuando lo sobreescriba de todos modos? Eso es como hacer un montón de no-operaciones para alargar tu mandato. – Alf

+0

@Alf: porque si tiene algo en el registro q, ejecutará esa macro mientras graba 'J @ q'. –

12

Usted puede hacerlo en tres menos pulsaciones:

:1,$j 

no es ed grand?

+6

:% j es 5 menos ... –

8

Me sorprende que nadie siquiera se menciona a la inversa:

:%s/\n//

estoy igualmente sorprendido de que nadie ha señalado que el rango 1,$ tiene una taquigrafía que está escrito %.

(Esto no hace lo mismo que unir las líneas, pero depende de las circunstancias que de hecho pueden ser más apropiadas.)

28

usted puede hacerlo con 3 golpes de teclado a partir del modo normal:

:%j 
  • : entra en modo de comando
  • % se refiere a todas las líneas en el archivo
  • j ejecuta el comando
  • se unen

Ahora parece que esto agrega un spa ce entre las líneas. No estoy seguro si quieres esto.

Cuestiones relacionadas