vim - texto - vi ir al final del archivo
Ajuste de palabra en Vim(preservando sangría) (4)
El parche breakindent tiene lo que estás buscando. Lo apliqué con éxito usando las instrucciones que se encuentran en este hilo:
Patch Vim con el parche breakindent en OS X con Homebrew
Específicamente, la fórmula Homebrew de echristopherson.
Sé que este hilo es antiguo, pero es popular en Google y lo encontré varias veces cuando trato de encontrar una solución.
EDITAR: Este parche ahora se incluye con vim como el parche 7.4.338. Ver: https://retracile.net/blog/2014/07/18/18.00
En Yosemite (Mac OS X), utilicé el comando snowbound con hombrew:
brew install macvim --with-features=huge --override-system-vim --HEAD
Solo estaba viendo esta publicación que describe cómo envolver palabras completas en vim. La solución aceptada fue esta:
:set formatoptions=l
:set lbr
Que toma este texto (las pestañas se muestran como / t):
*Inside of window *Outside of window
|---------------------------------------|
|/t/tthis is a like of text that will wr|ap here
|/t/tcan you see the wrap |
| |
|---------------------------------------|
Esto logra un comportamiento como este (las pestañas se muestran como / t):
*Inside of window *Outside of window
|---------------------------------------|
|/t/tthis is a like of text that will |
|wrap here |
|/t/tcan you see the wrap |
| |
|---------------------------------------|
Sin embargo, me gustaría redefinir esta función. Me gustaría que la línea envuelta tenga el mismo número de pestañas delante de ella que la línea de arriba tiene más uno. Es decir:
*Inside of window *Outside of window
|---------------------------------------|
|/t/tthis is a like of text that will |
|/t/t/twrap here |
|/t/tcan you see the wrap |
| |
|---------------------------------------|
¿Algunas ideas?
Esto no funcionó cuando la pregunta se realizó originalmente, pero a partir del 25 de junio de 2014, esto funcionará. (Suponiendo que actualice su vim a una versión más nueva que esa fecha)
Agregue a su .vimrc:
" Indents word-wrapped lines as much as the ''parent'' line
set breakindent
" Ensures word-wrap does not split words
set formatoptions=l
set lbr
¡Y eso es!
-
Algunas personas (yo incluido) comparten un solo .vimrc en varias computadoras. En ese caso, es importante que esta línea sea sólida (para evitar mensajes de error molestos). Esto es un poco mejor:
if has("patch-7.4.354")
" Indents word-wrapped lines as much as the ''parent'' line
set breakindent
" Ensures word-wrap does not split words
set formatoptions=l
set lbr
endif
De esta manera, si está en una versión anterior de vim, no obtendrá un mensaje de error.
Estoy de acuerdo con la respuesta que dice ''showbreak'' es la mejor opción. Por lo general, Showbreak no le permite poner caracteres no imprimibles (por ejemplo, espacios o pestañas) en la cadena showbreak, por lo que, como se usa habitualmente, solo le dará un indicador a lo largo del margen izquierdo, es decir, sin sangría real. Esto no es genial, ya que el objetivo principal de OP, creo, es darles a las líneas envueltas una sangría para evitar que abarroten el área del margen izquierdo y parezcan líneas propias.
Así que una forma de agregar una sangría (fea) usando showbreak es simplemente usar muchos caracteres, .eg, ": set showbreak => --------------->". Esto da como resultado algo que se ve así:
*Inside of window *Outside of window
|---------------------------------------|
|/t/tthis is a like of text that will |
|>--------------->wrap here |
|/t/tcan you see the wrap |
| |
|---------------------------------------|
Una mejor alternativa podría ser hacer uso de caracteres de espacio no separables (suponiendo que su instancia de Vim está habilitada para Unicode), cada uno de los cuales se puede ingresar en la secuencia de salto de pantalla usando la secuencia de teclas de ctrl-v, 160. De esta forma, puede ingresar una cadena de marcado que está en blanco en el lado izquierdo y que parece ser una sangría verdadera. Por ejemplo, ": set showbreak =........... >>" donde cada ''.'' en el comando es en realidad un carácter de espacio no separable ingresado al presionar ctrl-V, 160. De esta forma terminas con una envoltura muy bien grabada, como esta:
*Inside of window *Outside of window
|---------------------------------------|
|/t/tthis is a like of text that will |
| >>wrap here |
|/t/tcan you see the wrap |
| |
|---------------------------------------|
Aún no tienes la capacidad de variar el nivel de sangrado de acuerdo con la sangría de la línea anterior, pero al menos obtienes una sangría limpia de líneas envueltas sin mucho desorden visual a lo largo del margen izquierdo de la ventana. Todavía podría haber confusión si la sangría de una línea envuelta es menor que la del comienzo de una línea real, pero esto podría evitarse haciendo que la "sangría" de escarapela sea bastante grande (es decir, mayor que cualquier sangría que se encuentre comúnmente en su código). ) pero aún lo suficientemente pequeño como para proporcionar suficiente espacio para el ajuste legible del texto. Para muchos usos, creo que una sangría de showbreak de 40 o 50 espacios lo haría bastante bien.
Lo mejor que obtendrás es la opción showbreak
que pondrá una cadena fija en frente de cada línea envuelta (yo uso set showbreak=...
).