En VIM, ¿cómo divido una línea realmente larga en varias líneas?


170

Digamos que tengo una línea super larga en el editor VIM (digamos alrededor de más de 300 caracteres). ¿Cómo dividiría eso en varias líneas para que los límites de las palabras se rompan aproximadamente en 80 caracteres?

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 ...

Respuestas:


254

Vim hace esto muy fácil (romper líneas en los límites de las palabras).

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

Te sugiero que eches un vistazo :help gqy :help gw.

También establecer textwidth ( tw) le dará un salto de línea automático cuando se exceda durante la escritura. También se usa gq, aunque si se deshabilita se gqrompe el tamaño de la ventana o 79, dependiendo de cuál sea el primero.

:set tw=80

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

:set fo+=t

55
Entonces, para su caso, el gqcomando sería <ESC>(salir del modo Insertar / Reemplazar / etc.), luegogq80l
MidnightLightning

66
Esto es lo opuesto a Ctrl + j (combina varias líneas en una).
Yzmir Ramirez

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

10
solo para la siguiente persona que encuentre esto, gq solo no dividirá una línea de texto sólido, necesita espacios en blanco para hacer lo suyo
stringy05

2
[corre gqq] aaaahhh, es hermoso
underscore_d

85

Primero configure su vim para que comprenda que desea 80 caracteres:

:set tw=80

entonces, crepúsculo la línea:

V

y haz que vim lo reformatee:

gq

17

Esto no está realmente relacionado con VIM, pero podría usar el programa fmt como en

$ fmt myfile

38
:%! fmt% "Puede hacerlo vim relacionado :)
Maxim Sloyko

2
Útil para vi, aunque preferiría gqq en vim.
WhyNotHugo

13

Para líneas continuas de texto, resalte el área usando v en modo normal, luego presione

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

Esto agregará una nueva línea al final de cada 80 caracteres.

: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

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

6

Si estás en * nix, probablemente tengas folddisponible.

Seleccione la región que desea usar v, luego puede dividir espacios en el ancho 80 usando:

!fold --spaces --width=80

Esto es esencialmente lo mismo que usar gq.

Sin embargo, si solo desea romper en el carácter 80 y no limitarse a espacios en blanco, puede usar:

!fold --width=80

Si lo desea con solo presionar una tecla, simplemente configure una asignación: he usado

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


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

en mac os, tuve que hacerlo! fold -w 80
user674669

5

Para dividir líneas largas en el documento completo sin eliminar los saltos de línea ya presentes, use:

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

4

Necesitaba formatear un archivo completo en lugar de una línea. Como señala Wernsey, podría haber usado 'fmt', pero la siguiente secuencia en vim también funcionó (tomando prestado de las diversas respuestas aquí):

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

3

Como rápido y desagradable, quizás pruebe el siguiente mapa:

map q 080lwbels<CR><ESC>

que dice:

  • comenzar una posición 0 de línea,
  • pasar al 80º char a la derecha,
  • ir al comienzo de la siguiente palabra,
  • volver a la palabra anterior
  • ir al final de la palabra actual,
  • ir un char a la derecha, y
  • sustituir un CR por ese personaje.

Luego, presionando q y CR dividirá la línea en trozos en el límite de la palabra.


-1

Inserté manualmente '\' (y luego CR / tab para formatear) en cada LONGLINE después del último espacio en blanco pero antes de la columna 80. Es decir:

1 this is a long, long, line

ahora parece

1 this is a long, \
        long line

y compila normalmente.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.