vim text-formatting

¿Por qué Vim agrega espacios al unir líneas?



text-formatting (5)

Quiero desenvolver el texto en Vim. Cuando uní líneas, obtuve un espacio adicional entre oraciones.

¿Porqué es eso?


El formateo destruye la información. Hay muchos bloques de texto diferentes que darán como resultado el mismo formato una vez formateado. Por lo tanto, no hay forma de revertir la operación sin conocimiento previo (es decir, deshacer).

Sin formato:

Unformatted text could start out as either all one line, or several, yet look the same when formatted. Unformatted text could start out as either all one line, or several, yet look the same when formatted.

Formateado:

Unformatted text could start out as either all one line, or several, yet look the same when formatted.

Si quiere su párrafo todo en una línea, o si está de acuerdo con un pequeño toque manual, puede usar J para unir las líneas. Puede usar el modo visual para aplicar el comando J a varias líneas a la vez, tal vez combinado con ap o ip para seleccionar un párrafo, por ejemplo, vipJ . De nuevo, aún perderá algo de información: múltiples espacios en los saltos de línea antes de que el formateo termine colapsando en espacios únicos. (En realidad, puede unirse sin modificar espacios usando gJ lugar de J , pero ya los habrá perdido al formatear)

Si le molestan los espacios extra después de las oraciones (líneas que terminan en!,? O.), Apague los espacios de unión: set nojoinspaces


Supongo que la solución simple para unir las líneas sin espacios entre es:

:j!

Con ! la unión no inserta ni elimina ningún espacio. Para todo el archivo, use :%j! .

Ver:: :help :join .


Tengo la sensación de que esto es lo que realmente quieres: gJ

De :h gJ :

gJ Join [count] lines, with a minimum of two lines. Don''t insert or remove any spaces. {not in Vi}

Esto es útil si ha copiado algo de un terminal y lo ha pegado como un gran bloque rectangular en vim, en lugar de una sola línea.

Usualmente lo uso en modo visual. Cosas de Hilight, gJ .


Todavía obtuve el espacio extra después de unirme, si la línea en la que trabajamos no termina con espacio. Por lo general, este es el comportamiento deseado. Ejemplo

first line without space second line

después de unirse con J , convertirse

first line without space second line

Aunque en algún caso, no deseamos aplicarlo,

myInstance->methodA() ->methodB()

Y desearíamos que la unión se convirtiera en myInstance->methodA()->methodB() sin ningún espacio intermedio.

Aquí el mapeo de ayudantes que uso

nmap <leader>jj Jx

La tecla <líder> se puede verificar con :let mapleader , predeterminado a la clave / yo crea.

entonces en el modo normal, solo /jj para realizar la unión sin ningún espacio extra!


This es la respuesta que terminó trabajando para mí, ninguna de las anteriores funcionó en mi caso de uso.

Básicamente, use gJ como muchos otros lo han dicho, pero resalte todo el archivo, de modo que en el modo de comando escriba ggVGgJ .