Sé que hay formas de configurar automáticamente el ancho de texto en vim usando set textwidth
(como las preocupaciones de diseño de columna Vim 80 ). Lo que estoy buscando es algo similar a =
(el comando de línea de sangría) pero para ajustar a 80. El caso de uso es a veces editar texto con ancho de texto y después de unir líneas o eliminar / agregar texto sale mal envuelto.
Idealmente, este comando reorganizaría por completo las líneas que selecciono y cortaría las líneas largas mientras las agrego a las cortas. Un ejemplo:
long line is long!
short
Después de ejecutar el comando (suponiendo que el ajuste era de 13 cols):
long line is
long! short
Si esto no es posible con un verdadero comando vim, ¿tal vez haya un programa de línea de comandos que haga esto al que pueda canalizar la entrada?
Después de buscar, encontré esta referencia que tiene algunas opciones más: http://www.cs.swarthmore.edu/help/vim/reformatting.html
par
. ¡Es fantástico!gq
- Trimestral de caballero . (Disculpas por antropomorfizar al hombre, pero el mnemotécnico funciona.)Respuestas:
Establezca
textwidth
en 80 (:set textwidth=80
), vaya al inicio del archivo (se puede hacer con Ctrl- Homeogg
) y escribagqG
.gqG
formatea el texto comenzando desde la posición actual y hasta el final del archivo. Se unirá automáticamente a líneas consecutivas cuando sea posible. Puede colocar una línea en blanco entre dos líneas si no desea que esas dos se unan.fuente
V}gq
. De esta manera, verá lo que va a formatear antes de formatearlo.q
por sí mismo?set tw=80
lugar deset textwidth=80
ahorrar tiemposet textwidth=76
sus líneas se ajusten automáticamente mientras escribe. Mi queja es que no hace nada a las líneas existentes que se están editando. PeroV}gq
es extremadamente útil en ese sentido.V
ingresa al modo de selección visual,}
selecciona hasta el siguiente salto de párrafo ygq
ejecuta el formateador actual en él (o se usagw
para llamar explícitamente al formateador vi). Además,{
seleccionará hacia arriba. Puede seleccionar todo el documento y el formato,ggVGgq
aunque tal vez haya una manera más fácil. Guarde eso como una macro usando@
para hacerlo más fácil. Se usavipgq
para establecer el párrafo actual.La solución de Michael es la clave, pero a menudo encuentro que quiero reformatear el resto del párrafo actual; para este comportamiento, use
gq}
.fuente
Se puede usar
gq
con cualquier operador de movimiento. Por ejemplo, si solo desea volver a formatear al final de la línea actual (es decir, para ajustar la línea en la que está el cursor) puede usargq$
También puede volver a formatear seleccionando texto en modo visual (usando `v y moviéndose) y luego escribiendo gq.
También hay otras opciones para forzar el ajuste de líneas.
Si desea que vim ajuste sus líneas mientras inserta texto en ellas en lugar de tener que esperar hasta el final para reestructurar el texto, encontrará útiles estas opciones:
(No se desvía por
wrap
ylinebreak
, que solo formatea el texto que se muestra en la pantalla y no cambia el texto en el búfer)fuente
wrapmargin
ayuda: cuando 'textwidth' no es cero, esta opción no se usa.Gracias a un comentario de DonaldSmith, encontré esto, ya que la
textwidth
opción no formateó mi larga línea de texto (estaba convirtiendo el juego con conversiones de hexadecimal a byte)::%!fold -w 60
Eso reformuló todo el archivo (que era una línea para mí) en líneas de longitud 60.
fuente
Si está buscando una forma que no sea Vim , siempre están los comandos UNIX fmt y par .
Notas:
par
en su webcast.Así es como usaríamos ambos para su ejemplo.
Para usar desde el interior de Vim:
También puede establecer
:formatprg
par o fmt y anulargq
. Para más información, llame:help formatprg
dentro de Vim.fuente
Casi siempre lo uso
gq
en modo visual. Les digo a mis alumnos que significa "Gentlemens 'Quarterly", una revista para gente fastidiosa.fuente