Me he estado preguntando si Vim tiene la capacidad de ajustar de forma inteligente líneas de código, de modo que mantenga la misma sangría que la línea que está sangrando. Lo he notado en algún otro editor de texto, como el editor de texto electrónico, y descubrí que me ayudó a comprender más fácilmente lo que estoy viendo.
Por ejemplo en lugar de
<p>
<a href="http://www.example.com">
This is a bogus link, used to demonstrate
an example
</a>
</p>
aparecería como
<p>
<a href="somelink">
This is a bogus link, used to demonstrate
an example
</a>
</p>
:set autoindent
y:set smartindent
Respuestas:
Esta función se implementó el 25 de junio de 2014 como parche 7.4.338. Siguieron algunos parches que refinaron la función, siendo el último 7.4.354, por lo que esa es la versión que querrá.
Extractos de la ayuda de vim a continuación:
También es relevante para esto la
showbreak
configuración, esto agregará como sufijo la cantidad de su turno con los caracteres que especifique.Configuración de ejemplo
Nota sobre el comportamiento
Si no especifica la
sbr
opción,showbreak
cualquier carácter que se agregue a la sangría. La eliminaciónsbr
del ejemplo anterior provoca una sangría efectiva de 4 caracteres; con esa configuración, si solo desea usarshowbreak
sin sangría adicional, especifiqueshift:0
.También puede dar un desplazamiento negativo, lo que tendría el efecto de arrastrar
showbreak
caracteres y texto envuelto de nuevo a cualquier espacio de sangría disponible.Al especificar un
min
valor, la cantidad desplazada se aplastará si el ancho de su terminal es más estrecho, pero losshowbreak
caracteres siempre se conservan.fuente
set breakindent
a su configuración de vim hará que la línea se salte y se ajuste en la sangría, en lugar de romper y comenzar en la siguiente línea como si fuera una nueva línea.set breakindentopt=shift:4
a su configuración de vim sangrará 4 espacios adicionales.breakindentopt
. La sintaxis no es obvia en el documento de ayuda. Gracias @fritzo por el ejemplo en tu comentario.Hay un parche para esto, pero ha estado persistiendo durante años y la última vez que revisé no se aplicó limpiamente. Consulte la entrada "Sangría correcta de líneas envueltas" en http://groups.google.com/group/vim_dev/web/vim-patches . Realmente desearía que esto se incluyera en la línea principal.
Actualización: ese enlace parece haberse roto. Aquí hay una versión más actualizada del parche .
Actualización 2: se ha fusionado en sentido ascendente (a partir de 7.4.345), por lo que ahora solo tiene que hacerlo
:set breakindent
.fuente
No creo que sea posible tener exactamente la misma sangría, pero aún puede obtener una mejor vista configurando la opción 'showbreak'.
Ejemplo:
Lo real se ve mejor que el código de ejemplo anterior, porque Vim usa un color diferente para '>>>'.
fuente
:set showbreak=\ \ \ \ \ \ \ \ \ \ \ \ \ \
(la combinación de espacio de barra invertida crea el espacio de carácter de ruptura. Por lo tanto, podría agregar suficientes espacios para que sean más profundos que la mayoría de su código envuelto (por ejemplo, 10 espacios serían más profundos que 2 pestañas de cuatro espacios y 14 serían más profundos que 3 pestañas de cuatro espacios); una buena característica del espacio es que distrae menos visualmente (si eso es lo que quieres)set showbreak=\ \ \ \ \ \ \ \ \ \ \ \ \ \
es mucho menos legible quelet &showbreak=repeat(' ', 14)
ACTUALIZACIÓN: En junio de 2014, se fusionó un parche para admitir una
breakindent
opción en Vim (versión 7.4.346 o posterior para obtener el mejor soporte).También puede probar
:set nowrap
lo que permitirá a vim mostrar líneas largas desplazándose hacia la derecha. Esto puede resultar útil para examinar la estructura general de un documento, pero puede resultar menos conveniente para editarlo.Otras opciones cercanas a lo que estás buscando son
linebreak
yshowbreak
. Conshowbreak
, puede modificar lo que se muestra en el margen izquierdo de las líneas que están ajustadas, pero desafortunadamente no permite una sangría variable según el contexto actual.fuente
La única forma que conozco de que podría hacer esto sería usar un carácter de retorno (como lo menciona Cfreak) y combinar la
textwidth
opción con las diversas opciones de sangría. Si su sangría está configurada correctamente (como está por defecto con la sintaxis html, creo, pero de lo contrario vea las opcionesautoindent
ysmartindent
), puede:Si tiene alguna personalización de la
formatoptions
configuración, puede ser mejor simplemente hacer:Que hace esto:
Tenga en cuenta que esto no es lo mismo que un ajuste suave: ajustará las líneas en el archivo fuente así como en la pantalla (¡a menos que no lo guarde, por supuesto!). Hay otras configuraciones que se pueden agregar y
formatoptions
que se formatearán automáticamente a medida que escribe: detalles en:help fo-table
.Para más información, ver:
fuente
Creo que todavía tienes que usar una devolución
fuente
Si su HTML está lo suficientemente bien formado, ejecutarlo a través de xmllint podría ayudar:
fuente
Una solución macro:
Editar:
Operan
gq{motion}
formatos automáticos a lo que sea que esté configurada la variable "textwidth". Esto es más fácil / mejor que usar el80lBi^M
que tengo para mi macro.Si ha habilitado la sangría automática
Luego, ingresar una declaración al final de una línea sangrará la siguiente línea con la misma cantidad. Puede usar esto para ingresar de manera forzada en linewraps si lo desea. La siguiente macro aprovecha esto para sangrar automáticamente su texto:
establecer el registro z en:
y establezca el registro x en:
Entonces hazlo
para activar las macros. Después de unos segundos, todo su texto estará en líneas con sangría adecuada de 80 caracteres o menos.
Explicación:
Aquí hay una disección de las macros:
Parte 1 (macro z):
Parte 2 (macro x):
Advertencias:
Esta macro se romperá si hay una PALABRA de 80 caracteres o más.
Esta macro no hará cosas inteligentes como sangrar líneas después de etiquetas.
Utilice la configuración de lazyredraw (: set lazyredraw) para acelerar esto
fuente