¿Cómo puedo ajustar el texto a cierta longitud en Vim?


102

Hablemos de medidas relativas. Mi Vim se ve así:

aaaaaaaaaaaaa 
bbbbbbbbbbbbb 
ccccccccccccc 
etc

Me gustaría que fuera más pequeño:

aaaaa
aaaaa
bbbbb
bbbbb
ccccc
ccccc
etc

¿Cómo puedo obtenerlo? ¿Y cómo puedo configurar la longitud de tal bloque?


¿Quiere decir ajustar texto y no sangrar texto?
lc.

lc: No conozco la diferencia. Iba a escribir wrap como me lo recomendaron, pero nunca lo logré.
Léo Léopold Hertz 준영

Respuestas:


177

De hecho, puedes hacer dos cosas:

  1. Deje que vim formatee (es decir, cambie) su texto para que tenga líneas más cortas, insertando saltos de línea
  2. Deje las líneas como están, pero muéstrelas envueltas

¿Cuál quieres?

La opción 1 se lograría estableciendo textwidth(por ejemplo :set textwidth=30(de la respuesta de Swaarop)). Luego, puede reformatear el texto resaltándolo (en modo visual) y escribiendo gq. ( textwidthse puede abreviar como tw, por lo tanto :set tw=30).

La opción 2 se puede alternar ejecutando :set wrap/ :set nowrap. Esto ajustará las líneas que son demasiado largas para la ventana.

Ambos son independientes.


33
+1 para el comando de teclado gq desde el modo visual, eso es increíblemente útil
Fire Crow

3
Para su información, esto se rompe en espacios y gqgq no hace nada en una línea como se muestra en la pregunta, incluso si tw = 5.
dlamblin

2
@Dlamblin: Correcto. Si desea doblar exactamente al ancho dado, sin respetar los espacios en blanco, use el foldcomando como en la respuesta de fgm.
sábado

Por lo que veo, tu opción no funciona. wrapse ajustará en el límite de la ventana, no en textwidth.
DerWeh

@DerWeh: Sí, el ajuste se ajustará al límite de la ventana. Edité para aclarar.
sleske

60

Una vez que establezca 'textwidth', puede seleccionar texto con modo visual y presionar gq para ajustarlo bien (también puede usar Q en algunas configuraciones antiguas / heredadas).

Algunos consejos útiles:

gqq (wrap the current line)
gq} (wrap this 'paragraph', i.e. until the next blank line)
:h gq

3
+1, accidentalmente presioné gq mientras estaba en vim, he pasado la última media hora tratando de ver qué fue lo que golpeé. Esto es muy útil.
user176121

gqqtambién envuelve la línea actual (en lugar de gqgqo gq$).
Ash

21

Usar fold (1) es una posibilidad:

:%!fold -w5 

Resultado:

aaaaa
aaaaa
aaa 
bbbbb
bbbbb
bbb 
ccccc
ccccc
ccc

1
Esto tampoco respeta los espacios para plegar
Lionel

7
@Lionel: Sí. Para respetar los espacios, agregue la opción "-s" al comando de plegado.
sleske

14
:set textwidth=30

¿Cómo lo maneja el ancho de texto cuando no hay espacios, como en el ejemplo del póster original? Tuve una jugada y solo parece formatear en función del ancho de texto si hay espacios (o supuestamente, si la variable breakat está configurada en otra cosa).
Andy

3
@Andy textwidthno manejará una situación sin espacios. Puede escribir su propia formatexprfunción para hacer eso.
Swaroop CH

8

Si tienes un texto sin espacios que quieres romper en una cierta longitud, no es necesario usar externo foldni escribir el tuyo propio formatexpr.

:%s/\(.\{80\}\)/\1\r/g

romperá todas las líneas a 80 caracteres.


2
Esto me salvó el día al resucitar un certificado OpenSSL. Gracias
Cengiz Can
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.