Cómo detener el salto de línea en vim

257

Me gusta que las líneas largas se muestren en más de una línea terminal; No me gusta que vim inserte nuevas líneas en mi texto real. ¿Qué parte de .vimrc debería cambiar?

Haiyuan Zhang
fuente
77
Para mayor claridad: le gusta que las líneas largas se muestren en más de una línea terminal; no le gusta que vim inserte nuevas líneas en su texto real? Si es así, entonces :set nowrapes lo contrario de lo que quieres :(.
Andrew Aylett
@ Andrew: sí, su resumen es exactamente lo que quiero
Haiyuan Zhang

Respuestas:

304

Utilizar

:set wrap

Para ajustar las líneas visualmente, es decir, la línea sigue siendo una línea de texto, pero Vim la muestra en varias líneas.

Utilizar

:set nowrap

Para mostrar líneas largas como una sola línea (es decir, debe desplazarse horizontalmente para ver la línea completa).

Brian Rasmussen
fuente
3
Gracias por los consejos chicos. Fui con: set nowrap y: set textwidth = 0 funciona muy bien
Robert Beltran
55
Cuando escribo, todavía quiero ver el límite "visual" de 80 columnas y no quiero que vim agregue automáticamente el avance de línea cuando escribo después de la columna 80. ¿Como lo hago?
Olivier Pons
77
Esta es exactamente la respuesta que estaba buscando, pero no es la respuesta a la pregunta de OP. Es un poco engañoso tener esto como la respuesta principal. No sé cómo solucionar esta situación. Simplemente editaría su respuesta para responder también la pregunta original. Pero ya hay una respuesta adecuada que es casi tan votada. Así que voté para cambiar las dos respuestas.
Daniel Darabos
3
Esta es exactamente la respuesta que no buscaba, y es no la respuesta a la pregunta del PO.
peeol el
Esta no es una respuesta a la pregunta.
194

Me gusta que las líneas largas se muestren en más de una línea de terminal.

Este tipo de ajuste de línea visual / virtual se habilita con la wrapopción de ventana:

set wrap

No me gusta que vim inserte nuevas líneas en mi texto real.

Para desactivar el ajuste de línea física, desactive las opciones de búfer textwidthy wrapmargin:

set textwidth=0 wrapmargin=0
Laurence Gonsalves
fuente
1
¡Gracias! set textwidth=0 wrapmargin=0funciona pero si lo pongo .vimrc, no tiene un efecto, por ejemplo, para archivos de texto sin formato. ¿Cómo descubro y elimino la sobrescritura?
qubodup
77
@qubodup Puede probar si algo sobrescribe su configuración .vimrc abriendo un archivo donde ve el problema e ingresando :verbose set textwidth? wrapmargin?. Esto le dirá sus valores actuales y también dónde se establecieron. Es posible que tenga un complemento que los anula. En ese caso, puede desinstalar ese complemento o intentar anular la configuración del complemento más adelante en su runtimepath (por ejemplo:) ~/.vim/aftero con su propio autocomando. El enfoque correcto dependerá de dónde / cómo se restablezca.
Laurence Gonsalves
set wrapy set linebreakes lo que hizo por mí
Ilia Choly
36

No estoy seguro de entender por completo, pero es posible que esté buscando la configuración de 'formatoptions'. Intenta algo como :set formatoptions-=t. La topción insertará saltos de línea para hacer que el texto se ajuste al ancho establecido por textwidth. También puede poner este comando en su .vimrc, simplemente elimine los dos puntos ( :).

Erik Hesselink
fuente
3
Esta me parece la mejor opción para abordar el deseo del OP. Me gusta el hecho de que vim todavía muestra una línea vertical en tw.
mitchus
3
Esta es la única respuesta que realmente aborda la pregunta de OP. La mayoría de los demás hacen lo contrario. OP todavía quiere que se muestren líneas largas envueltas, pero para que vim no inserte saltos de línea automáticamente.
sebastian
33

Uso :set nowrap... funciona como un encanto!

Vatsala
fuente
10
Excepto que hace lo contrario de lo que el OP define como comportamiento deseado ...: P
Morlock
55
@Morlock, pero responde la pregunta que tenía y google me trajo aquí :)
Ben Usman
¿Hay algún atajo de teclado para esto?
Pini Cheyni
@PiniCheyni, agregue a su archivo .vimrc: nnoremap <Cw>: configure invwrap <CR> Luego puede usar Ctrl + W para alternar el ajuste de texto.
reas0n
30

:set tw=0

VIM no insertará automáticamente saltos de línea, pero mantendrá el ajuste de línea.

orip
fuente
3
Quiero exactamente lo contrario ... cuando escribo todavía quiero ver el límite "visual" de 80 columnas y no quiero que vim agregue automáticamente el avance de línea cuando escribo después de la 80.a columna. ¿Como lo hago?
Olivier Pons
16

Puede que te resulte set lbrútil; con set wrapesto se ajustará pero solo se cortará la línea en el espacio en blanco y no en el medio de una palabra.

p.ej

without lbr the li
ne can be split on
a word

y

with lbr on the
line will be
split on 
whitespace only
davetapley
fuente
Se recomienda encarecidamente evitar abreviar opciones porque en el futuro tendrá que hacer una búsqueda en el sistema de ayuda para comprender lo que ha resuelto, así que use en set nolinebreaklugar deset lbr
SergioAraujo
12

set formatoptions-=t Mantiene el ancho de texto visual pero no agrega una nueva línea en el modo de inserción.

Jimmy Tran
fuente
4

Es extraño que un entorno tan simple requiera esta cantidad de 'hocus-pocus' para funcionar.

Para responder a su pregunta ahora, para mí parecía funcionar con la combinación de lo siguiente:

:set wrap linebreak nolist

(Esto parece evitar que las líneas existentes se rompan, solo ajuste).

Y

set formatoptions=l

(esto evita que las líneas nuevas / editadas se rompan, mientras que + = no lo hace por mí, ya que otras configuraciones / complementos parecen encontrar espacio y agregar sus propias opciones que anulan las mías).

petroslamb
fuente
4

Si, como yo, está ejecutando gVim en Windows, entonces su archivo .vimrc puede estar obteniendo otro archivo Vimscript 'de ejemplo' que se configura automáticamente textwidth(en mi caso, para 78) archivos de texto.

Mi respuesta a una pregunta similar a esta: cómo detener el texto de ajuste de gVim en la columna 80 , en el sitio Vi y Vim Stack Exchange :

En mi caso, el comentario de Vitor sugirió que ejecutara lo siguiente:

:verbose set tw?

Hacerlo me dio el siguiente resultado:

textwidth=78
      Last set from C:\Program Files (x86)\Vim\vim74\vimrc_example.vim

En vimrc_example.vim , encontré las líneas relevantes:

" Only do this part when compiled with support for autocommands.
if has("autocmd")

  ...

  " For all text files set 'textwidth' to 78 characters.
  autocmd FileType text setlocal textwidth=78

  ...

Y descubrí que mi .vimrc está buscando ese archivo:

source $VIMRUNTIME/vimrc_example.vim

En mi caso, no quiero textwidthconfigurar ningún archivo, así que solo comenté la línea relevante en vimrc_example.vim .

Kenny Evitt
fuente
1
En lugar de editar el archivo vimrc_example.vim, acabo de agregar autocmd FileType text setlocal textwidth=0al archivo vimrc y eso solucionó el problema cuando otras soluciones propuestas no lo hicieron.
GrandAdmiral
3

Es correcto que establecer nowrap le permitirá pegar en una línea larga sin vi / vim agregando nuevas líneas, pero luego la línea no se ajusta visualmente para una fácil lectura. En cambio, es solo una línea larga por la que debe desplazarse.

Para que la línea se ajuste visualmente pero no se inserten caracteres de nueva línea, establezca el ajuste (que probablemente sea el predeterminado, por lo que no es necesario establecer) y establezca textwidth = 0 .

En algunos sistemas, la configuración de textwidth = 0 es la predeterminada. Si no encuentra que ese sea el caso, agregue set textwidth = 0 a su archivo .exrc para que se convierta en el valor predeterminado del usuario para todas las sesiones vi / vim.

Cruciverbalista
fuente