2010-05-21 13 views

Respuesta

12

hay dos enfoques que conozco:

  • Conjunto textwidth a algo grande y dar nuevo formato:

    :set tw=1000000 
    gggqG 
    
  • Uso sustituto (esto es más adecuado si quiere hacerlo de una mapping):

    :%s/.\zs\n\ze.//
    

Explicación de este último:

:%s  " Search and replace across the whole file 
/  " Delimiter 
.\zs\n\ze. " Look for a character either side of a new-line (so ignore blank lines). 
      " The \zs and \ze make the replacement only replace the new-line character. 
//  " Delimiters and replace the new-line with a space. 
+0

el enfoque de expresiones regulares es una especie de oscuro. pero bueno. El enfoque tw = gana en la simplicidad – sehe

0

Tal vez debería establecer textwidth a un valor muy grande (como 99999999) (0 no funciona por alguna razón) y usar gggqG?

// No puedo decirle una forma de volver a formatear su párrafo con :g sin saber exactamente cuál es el párrafo. Tal vez alguien más pueda.

2

Si sus párrafos de texto están separadas por una línea en blanco, esto parece funcionar:

:g!/^\s*$/normal vipJ 

:g mundial (multi-repetición)

!/^\s*$/ Que todas líneas excepto líneas en blanco y las que contienen solo espacios en blanco.

normal entra en el modo 'normal'

vip párrafo interno seleccionar visualmente

J líneas de unión

+0

+1: Esto es casi perfecto. Las líneas con cero o más de un carácter en blanco también pueden considerarse vacías. Sugiero '/^\ s * $ /'. También tenga en cuenta que ': v' es equivalente a': g! ' Para que pueda obtener su" par vim "a solo 17:': v/^ \ s * $/norma vipJ'. – Johnsyweb

+0

@Johnsyweb: Buena captura. Se suponía que debía haber un '*' allí ... lo actualizaré. Gracias por la propina ': v' también. –

+0

Noté que da un resultado incorrecto cuando las líneas ya están unidas. Elimina una línea vacía. Este no: '% s/\ (\ S \ s * \) \ n \ (\ s * \ S \)/\ 1 \ 2' – Reman

Cuestiones relacionadas