2009-05-05 20 views
89

Hablemos de medidas relativas. Mi Vim se parece a:¿Cómo puedo ajustar el texto a cierta longitud en Vim?

aaaaaaaaaaaaa 
bbbbbbbbbbbbb 
ccccccccccccc 
etc 

me gustaría que sea más pequeño:

aaaaa 
aaaaa 
bbbbb 
bbbbb 
ccccc 
ccccc 
etc 

¿Cómo puedo conseguirlo? ¿Y cómo puedo administrar la configuración de la longitud de dicho bloque?

+0

¿Se refiere a texto envolvente y no a sangría? –

+0

lc: No sé la diferencia. Iba a escribir la envoltura como me recomendaron, pero nunca lo he hecho funcionar. –

Respuesta

164

Usted realmente puede hacer dos cosas:

  1. permiten realizar un formateo vim (es decir, cambie) su texto para tener líneas más cortas, insertando saltos de línea
  2. Dejar líneas como son, pero pantalla las envolvió

¿Qué desea?

Opción 1 se lograría configurando textwidth (por ejemplo :set textwidth=30 (de la respuesta de Swaarop)). Luego puede formatear el texto resaltándolo (en modo visual) y escribiendo gq.

La opción 2 se puede activar ejecutando :set wrap o :set nowrap.

Ambos son independientes.

+30

+1 para el comando de teclado gq desde el modo visual, eso es realmente útil –

+23

También es útil el formato 'gq}' - al final del párrafo. –

+3

FYI 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

21

Usando veces (1) es una posibilidad:

:%!fold -w5 

Resultado:

aaaaa 
aaaaa 
aaa 
bbbbb 
bbbbb 
bbb 
ccccc 
ccccc 
ccc 
+4

Esto supone que está instalado un comando 'fold'. –

+1

Esto tampoco respeta los espacios para doblar – Lionel

+7

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

14
:set textwidth=30 
+0

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

+3

@Andy 'textwidth' no manejará una situación sin espacios. Puedes escribir tu propia función 'formatexpr' para hacer eso. –

+0

Gracias, echaré un vistazo a formatexpr – Andy

54

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

Consejos útiles:

gqgq (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 de qué se trataba. Esto es tan útil. – user176121

+4

Creo que el segundo comando debería ser 'gq}'. – Martey

+0

Creo que el primer comando se puede simplificar a 'gq $' – wil93

7

Si tiene texto sin espacios que desea romper en una cierta longitud, no es ni necesario el uso externo fold ni escribir su propio formatexpr.

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

romperá todas las líneas a 80 caracteres.

+1

Esto me salvó el día mientras resucitaba un certificado de OpenSSL. Gracias –

Cuestiones relacionadas