¿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?

Léo Léopold Hertz 준영
fuente
¿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.

sleske
fuente
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
Vlad Dogaru
fuente
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
Fritz G. Mehner
fuente
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
Swaroop CH
fuente
¿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.

kthy
fuente
2
Esto me salvó el día al resucitar un certificado OpenSSL. Gracias
Cengiz Can