Mostrar pestañas como caracteres


119

Cuando trabajo en archivos en Python, a veces confundo las pestañas con espacios y viceversa. ¿Hay alguna manera de hacer que Vim muestre un personaje para una pestaña en lugar de una pestaña?


Como nota al margen, puede configurar para convertir todas las pestañas en espacios retabcada vez que guarde el archivo.
0xc0de

Si ha instalado vim-faq , puede obtener una respuesta sin conexión allí: :h vim-faqy buscar /invisible. La etiqueta difícil de memorizar es :h faq-19.8.
Hotschke

Respuestas:


119

Sí, usa listchars:

set list
set listchars=tab:>-

Si coloca estas dos líneas en su .vimrc, las pestañas se mostrarán >en la posición de inicio y -en el resto de la pestaña.

(Nota al margen: los listchars también pueden mostrar espacios finales con trail:x(reemplazar xcon el carácter que desea utilizar para un espacio final), que también puede ser útil).


66
Nota: Me gusta usar set listchars=tab:!·,trail:·, en mi humilde opinión ·es mucho más claro que un -... Necesitas una versión Vim bastante reciente para que esto funcione por cierto (no estoy seguro de cuál exactamente, creo que 7.3.x) ...
Martin Tournoij

8
Me gusta usar el carácter unicode ya que es un poco más pequeño que >. Actualmente veo un espacio en blanco al marcar el eol (aunque puedo probar lo anterior). Mi configuración es: set listchars=eol:¬,tab:▸\ y
Martin York

58

La respuesta básica es :set list, lo que hace que las pestañas se muestren como ^I.

Sin embargo, recomiendo ir más allá de eso. Simplemente :set listes problemático porque no puede preservar la alineación visual en la pantalla. Por ejemplo:

%.o: %.cpp
^Ig++ -c $<

no se ve bien, especialmente cuando esperas que aparezca gof g++debajo del primero pde cpp(suponiendo tabstop=8).

Por lo tanto, le sugiero que .vimrcponga algo como :set listchars=tab:␉· (Para ser claros, ese es el carácter Unicode U + 2409 SÍMBOLO PARA TABULACIÓN HORIZONTAL seguido de U + 00B7 PUNTO MEDIO ).

Como se explica en :help listchars, una configuración de dos caracteres para que se tab:xymantenga la alineación visual:

tab:xy        Two characters to be used to show a tab.  The first
              char is used once.  The second char is repeated to
              fill the space that the tab normally occupies.
              "tab:>-" will show a tab that takes four spaces as
              ">---".  When omitted, a tab is show as ^I.

El ejemplo anterior aparecería en la pantalla como:

%.o: %.cpp
␉·······g++ -c $<

Personalmente, hago todo lo posible con mi listchars:

:set listchars=eol:⏎,tab:␉·,trail:␠,nbsp:⎵

Estos caracteres son lo suficientemente distintivos que rara vez aparecen literalmente en el texto del documento.

Para escribir estos caracteres especiales en su vimrc, escriba Ctrl-vu23CEmientras está en Modo Insertar, como se explica en :help utf-8-typing.


2
Ver tambiénset lcs=tab:├─
sch

esto solo me dio un? en eol
WendyG

14

Pestañas destacadas

temporal Tabresaltado

Para uso ocasional, uno simplemente puede resaltar todas las pestañas en un documento usando el siguiente /comando de búsqueda :

/\t

Para eliminar el resaltado, simplemente escriba :nohque es la abreviatura de: :nohlsearchsin iluminación alta.

permanente Tabresaltado

" Highlight tabs as errors.
" https://vi.stackexchange.com/a/9353/3168
match Error /\t/

Pestaña resaltado en vim

Más resaltado

Para obtener más información sobre estos comandos de resaltado útiles, incluidos los espacios en blanco finales y hacer que esto sea permanente, consulte el wiki de Vim .


44
También puede usar :match Error /\t/para resaltar pestañas (o cualquier otro patrón para ese asunto) independientemente del registro de búsqueda y hlsearch (escriba :matchpara borrarlo).
Martin Tournoij

1
@Carpetsmoker One puede encontrar muchos más de estos comandos de resaltado útiles (¡incluso combinados con espacios en blanco al final!) En el wiki de Vim sobre resaltar espacios no deseados .
Serge Stroobandt

9

Personalmente, me gusta el uso del complemento indentLine , que muestra una línea vertical en los niveles de sangría.

Es de gran ayuda especialmente en python, donde la sangría es importante.

(Imagen tomada del enlace de arriba)

Entre otras cosas, proporciona un comando de alternar, que se puede asignar a una combinación de teclas, para que pueda desactivarlo cuando no lo necesite.


2
¿Creo que este complemento está destinado a la sangría de espacios?
Jake Byman

5

Es posible que desee mostrar las pestañas de manera diferente en un terminal regular y gvim.

set list!
if has('gui_running')
    set listchars=tab:▶\ ,trail:·,extends:\#,nbsp:.
else
    set listchars=tab:>.,trail:.,extends:\#,nbsp:.
endif

(Sumando para completar, en caso de que otros lo encuentren útil).


4

El método más fácil es hacerlo :set list, que mostrará pestañas como ^Iy final de línea como $.

Me gusta usar un mapeo que llama

:set invlist 

para alternar entre visualización normal y visualización de lista.

Por ejemplo:

:nmap <leader>l :set invlist<cr>

Esto me permite verificar rápidamente si hay problemas de tabulación vs espacio y luego volver a una pantalla normal.