Respuestas:
Respuesta unificada:
Intentaría usar listchars:
:set listchars=tab:\|\
:set list
nota: hay un espacio después del último \
anterior.
Este método es bueno porque utiliza el soporte integrado de Vim para mostrar este tipo de cosas.
Salida de ejemplo:
| if (1) {
| | func();
| }
Sin embargo, esto no funciona para espacios iniciales. Como señaló @Josh Petrie, hay un parche para trabajar para espacios , pero luego tendrías que recompilar Vim, que está más allá del alcance de esta respuesta.
Vaibhav Sagar señala que el complemento indentLine realiza esta funcionalidad.
Instale de la manera normal (consulte la instalación de complementos ) y parece que mágicamente funciona sin más información. Si no le importan las barras ASCII, no necesita hacer nada con sus fuentes. Ejemplo de salida de su ejemplo después de establecer su configuración de sangría y ejecutar:IndentLinesReset
45 ¦ var move = function(direction) {
46 ¦ ¦ if(!initialized) { initialize(); }
47
48 ¦ ¦ if(shiftBoard(direction)) {
49 ¦ ¦ ¦ setTimeout(addRandomPiece, 100);
50 ¦ ¦ }
51 ¦ };
El complemento requiere Vim 7.3 o posterior, y hace un uso inteligente de la función Ocultar de esa versión. En lugar de ocultar el texto, reemplaza el texto con barras en la vista, pero no el búfer real. El resultado es que ve las barras pero no se guardan en el archivo (ya que en realidad son espacios)
Ambos métodos suponen código sangrado "correctamente". No colocan las líneas de sangría en el nivel de sangría cuando se abre un "bloque" (lo que parece ser sublime), sino que colocan líneas a intervalos regulares según la configuración de sangría. Además, solo muestra las barras en las líneas donde realmente hay espacio (razón por la cual la línea en la salida vim debajo de la primera if
no tiene barras, haciendo un espacio visual)
Otra opción que uso, que no es exactamente lo que pediste, pero cumple el mismo propósito de hacer que sea más fácil ver lo que está en la misma columna, es establecer lo siguiente en tu vimrc
:
set cursorcolumn
set cursorline
Esto tiene la desventaja de que debe mover el cursor a la columna que desea ver, pero obtiene menos desorden visual. Por lo general, cuando me importan los niveles de sangría, de todos modos mantengo mi lugar con el cursor. Mi camino tampoco es tan extraño en lenguajes como Python sin cerrar llaves.
En aras de la exhaustividad, también está el complemento Indent Guides , que muestra los niveles de sangría alternando los colores de los espacios en blanco. Requiere la versión 7.2 o posterior. Como utiliza las variables tabstop
y shiftwidth
, probablemente funcionará para la configuración de sangría de inmediato.
Una vez que se instala el complemento, simplemente puede usar :IndentGuidesEnable
o :IndentGuidesDisable
. Si está utilizando terminal vim, tenga en cuenta que, de acuerdo con el manual,
Por el momento, Terminal Vim solo tiene soporte básico. Esto significa que los colores no se calcularán automáticamente en función de su esquema de colores. En cambio, se usan algunos colores preestablecidos dependiendo de si el fondo está configurado en oscuro o claro.
Para cambiar los colores de las guías para la captura de pantalla, utilicé lo siguiente
let g:indent_guides_auto_colors=0
para que los colores no se vuelvan a calcular cuando se intercambian los búferes, y luego configure los colores usando
hi IndentGuidesEven ctermbg=238
hi IndentGuidesOdd ctermbg=236
Al igual que con las otras soluciones presentadas, solo muestra las guías de sangría en las líneas donde hay espacios.
let g:indent_guides_enable_on_vim_startup=1
a mi .vimrc para habilitar esto en el inicio.
He encontrado que el complemento indentLine es el mejor para esto. Sin embargo, necesita una fuente con los símbolos apropiados, encuentro que Consolas en Windows y Menlo en Mac OS X funcionan bien. Como se señala en la respuesta unificada anterior, funciona (ab) utilizando la conceal
función de vim para colocar barras verticales (de la fuente utilizada) en el lugar correcto. Estoy bastante contento con esta solución, pero la desventaja es que mis barras verticales son parte de los glifos de dibujo de caja y están alineadas al centro en lugar de alinearse a la izquierda como en otros editores. Me he acostumbrado, pero se puede arreglar parcheando manualmente su fuente o usando una fuente como Fantasque Sans Mono (observe cómo las capturas de pantalla en el repositorio de github vinculado usan indentLine).
El plugin indentLine tiende a ser bastante lento en archivos no pequeños, observable al hacer clic en enter, ya que se retrasa un segundo más o menos.
He descubierto que vim-indentguides es un complemento más rápido y visualmente similar, que también distingue visualmente las sangrías de tabulación frente a las sangrías de espacio.