2009-08-13 9 views
140

Supongo que tengo una línea muy larga en el editor VIM (digamos más de 300 caracteres). ¿Cómo dividiría eso en múltiples líneas para que los límites de las palabras rompan aproximadamente a 80 caracteres?En VIM, ¿cómo rompo una línea realmente larga en varias líneas?

Ejemplo:

This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line 

a

This is a really long line 
This is a really long line 
This is a really long line 
This is a really long line 
This is a really long line 
This is a ... 

Respuesta

213

Vim hace muy fácil (líneas de ruptura en los límites de palabra).

gq{motion} % format the line that {motion} moves over 
{Visual}gq % format the visually selected area 
gqq  % format the current line 
... 

me gustaría sugerir que echa un vistazo :help gq y :help gw.

También establecer textwidth (tw) le dará un salto de línea automático cuando se exceda al escribir. También se usa en gq, aunque si se deshabilita gq se rompe el tamaño de la ventana o 79 según lo que ocurra primero.

:set tw=80 

Al configurar las opciones de formato para incluir el ancho del texto, vim se romperá automáticamente en la configuración tw.

:set fo+=t 
+5

Así que para su caso, el comando' gq' sería '' (salir del modo Insertar/Reemplazar/etc.), luego 'gq80l' – MidnightLightning

+6

Esto es lo opuesto a Ctrl + j (combina varias líneas en una) –

+8

Vim nunca deja de sorprenderme. Esto es oro puro. – Jondlm

1

Como rápida y desagradable, tal vez tratar el siguiente mapa:

map q 080lwbels<CR><ESC> 

que dice:

  • iniciar una posición 0º de la línea,
  • traslado a Char 80º a la derecha,
  • Ir al comienzo de la siguiente palabra,
  • volver a la palabra anterior,
  • Ir al final de la palabra actual,
  • vaya one char right, y
  • sustituya un CR para ese char.

Luego, al presionar q y CR se dividirá la línea en trozos en el límite de palabras.

12

Esta realidad no está relacionada a VIM, pero se puede usar el programa FMT como en

$ fmt myfile 
+34

:!.%% FMT "puede hacer que Vim relacionado :) –

+2

Útil para vi, aunque yo preferiría GQQ en vim – WhyNotHugo

75

primer set de su vim para que entienda que desea 80 caracteres:

:set tw=80 

entonces, HiLight la línea:

V 

y crea vim reformatear que:

gq 
+0

agradable y simple. cheers – ropata

4

Necesitaba reformatear un archivo completo de rata ella de una líneaComo Wernsey señala, podría haber usado 'fmt', pero la siguiente secuencia en vim hizo el truco también (préstamos de las diversas respuestas aquí):

<ESC> 
:setl tw=80 fo=t 
1GVGgq 
5

Si estás en * nix es probable que tenga fold disponible.

Seleccione la región que desea utilizar v, entonces se puede romper en espacios al ancho 80 usando:

!fold --spaces --width=80

Ésta es absoluto se refiere a lo mismo que usar gq.

Sin embargo, si lo que desea es romper con el carácter de 80, y no limitarse a los espacios en blanco que puede utilizar:

!fold --width=80

Si lo desea, con sólo presionar una tecla acaba de establecer un mapeo - He usado

vmap <f1> !fold --width=80<CR>

+0

Esta es la respuesta que funciona para cadenas largas no separadas por espacios en blanco. Sin embargo, en macOS puede necesitar usar gfold en lugar de fold. –

+0

en mac os, tuve que hacer! Fold -w 80 – user674669

2

Para dividir líneas largas en el documento completo sin quitar ya presentes saltos de línea, utilice:

:set formatoptions+=w 
:set tw=80 
gggqG 
2

Para las líneas sólidas de texto resalte el área utilizando v en modo normal, a continuación, pulse

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

Esto añadirá una nueva línea al final de cada personaje 80a.

:s/  replaces within the current select 
\v  uses regular expressions 
(.{80}) selects 80 characters & placed them into group one 
\1\r  replaces group one with group one and a newline 
+0

Esta es la única solución que funcionó para una cadena base64 larga. – jviotti

Cuestiones relacionadas