Supongamos que ha escrito un documento largo en vim con salto de línea automático, por lo que todas las líneas se han dividido en, digamos, 79 caracteres. Incluso puede haber aplicado el formato a todo el documento para romper todas las líneas en esa longitud.
Los párrafos están delimitados en su documento por líneas en blanco.
Ahora decides que no quieres saltos de línea dentro de los párrafos.
¿Cómo puede eliminar todos los saltos de línea dentro de los párrafos sin eliminar por completo los límites de los párrafos?
He hecho este truco rápido e idiota, pero estoy buscando la forma correcta.
:%s/^\s*$/@@@@@ - replace blank lines with @@@@@
ggVGgJ - join all lines in the file
:%s/@@@@@/\r\r/g - replace @@@@@ with line breaks
vim
newlines
carriage-return
dggoldst
fuente
fuente
Respuestas:
Creo que esto hace lo que quieres: asegúrate de que haya una línea vacía al final del archivo, luego une cada párrafo (terminado por una línea vacía).
Explicación: primero vaya al final del archivo y agregue una línea vacía adicional con
:a
(tal vez haya una forma más elegante de hacerlo; interactivamente, puede reemplazar las primeras tres líneas cono<ESC>
). Luego, para cada línea que no esté en blanco que aún no se haya considerado (:g/^./
), aplique eljoin
comando al rango que comienza en la línea seleccionada (.
) y termina una línea antes de la siguiente línea vacía (/^$/-1
).Opcionalmente,
:g/^$/d
si no desea que quede ninguna línea en blanco (puede quitar la-1
).fuente
:g
, que aplica un comando a todas las líneas coincidentes; vea:help :g
y quizás este hilo sobre cómo se:g
comporta cuando elimina saltos de línea .:$pu _
al final coloque el registro de agujeros negros, lo que da como resultado una línea en blanco al final.Esto debería hacerlo:
tw
se establece en un valor al menos tan grande como el número de caracteres en el párrafo más largo.gg
mueve el cursor a la primera línea;gq
es el comando para formatear;G
mueve el cursor a la última línea, diciéndolegq
que vuelva a formatear desde la ubicación actual del cursor hasta la última línea.fuente
Coloque el cursor dentro del párrafo deseado.
Tipo:
vipJ
(
vip
resalta el párrafo actual,J
une todas las líneas)fuente
Puede que no sea la forma más limpia de hacerlo, pero esto es lo que usaría:
( Obras en VIM 7.2. )
Dependiendo exactamente de cómo se dividieron los párrafos cuando se formatearon originalmente, es posible que desee reemplazar el
gJ
comando (unir sin espacios) con elJ
comando (unir con espacios).El
999
recuento arbitrario solo debe ser al menos el número de párrafos en el archivo; puede seleccionar un número mayor si lo desea y no perder nada más que ciclos de procesador. Suponiendo una y solo una línea en blanco entre los párrafos, puede obtener un recuento de párrafos más preciso utilizando:fuente