Affichage des onglets en tant que caractères

119

Lorsque je travaille sur des fichiers en python, je confonds parfois des tabulations pour des espaces et inversement. Est-il possible que Vim affiche un caractère pour un onglet au lieu d'un onglet?

Dom
la source
Juste comme remarque, vous pouvez configurer pour convertir tous les onglets en espaces à retabchaque fois que vous enregistrez le fichier.
0xc0de
Si vous avez installé vim-faq , vous pouvez y obtenir une réponse hors ligne: :h vim-faqet effectuer une recherche /invisible. Le tag difficile à mémoriser est :h faq-19.8.
Hotschke le

Réponses:

119

Oui, utilisez listchars:

set list
set listchars=tab:>-

Si vous mettez ces deux lignes dans votre fichier .vimrc, les onglets seront affichés comme >pour la position de départ et à -travers le reste de l'onglet.

(Sidenote: les listchars peuvent également afficher des espaces de fin trail:x(remplacer xpar le caractère que vous souhaitez utiliser pour un espace de fin), ce qui peut également être utile.)

Poignée de porte
la source
6
Note: J'aime utiliser set listchars=tab:!·,trail:·, IMHO ·est beaucoup plus clair qu'un -... Vous avez besoin d'une version assez récente de Vim pour que cela fonctionne (mais vous ne savez pas exactement quoi, je pense que je pense 7.3.x) ...
Martin Tournoij
8
J'aime utiliser le caractère unicode car il est légèrement plus petit que >. Actuellement, je vois un espace blanc derrière en marquant le eol (bien que je puisse essayer ce qui précède). Mes réglages sont: set listchars=eol:¬,tab:▸\ et
Martin York
58

La réponse de base est la suivante :set list: les onglets s'affichent ainsi ^I.

Cependant, je recommande d'aller au-delà de cela. C'est juste :set listproblématique en ce qu'il ne parvient pas à préserver l'alignement visuel à l'écran. Par exemple:

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

ne semble pas bon, surtout quand vous attendez le gde g++à paraître sous le premier pde cpp( en supposant tabstop=8).

Par conséquent, je suggère que .vimrcvous mettiez quelque chose comme :set listchars=tab:␉· ceci (pour que tout soit clair, il s’agit du caractère Unicode U + 2409, symbole de la tabulation horizontale suivi de U + 00B7 point milieu .)

Comme expliqué dans :help listchars, un paramètre à deux caractères pour tab:xypréserver l'alignement visuel:

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.

L'exemple ci-dessus apparaît à l'écran comme suit:

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

Personnellement, je vais à fond avec listchars:

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

Ces caractères sont suffisamment distinctifs pour apparaître rarement dans le texte du document.

Pour taper ces caractères spéciaux dans votre vimrc, tapez Ctrl-vu23CEen mode Insertion, comme expliqué dans :help utf-8-typing.

200_success
la source
2
Voir aussiset lcs=tab:├─
sch
cela m'a juste donné un? à eol
WendyG
14

Surbrillance des onglets

Mise en Tabévidence temporaire

Pour une utilisation occasionnelle, il suffit de mettre en évidence tous les onglets d’un document à l’aide de la /commande de recherche suivante :

/\t

Pour supprimer la surbrillance, tapez simplement :nohce qui est court pour «pas de :nohlsearchforte luminosité».

permanente Tabmise en évidence

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

Onglet surligné dans vim

Plus de mise en évidence

Pour plus de ces commandes de surbrillance utiles - y compris combinées avec des espaces et des espaces de fin et les rendre permanentes - voir le wiki Vim .

Serge Stroobandt
la source
4
Vous pouvez également utiliser :match Error /\t/pour mettre en surbrillance des onglets (ou tout autre motif) indépendamment du registre de recherche et de hlsearch (tapez :matchpour le supprimer).
Martin Tournoij
1
@Carpetsmoker On peut trouver beaucoup plus de ces commandes de surbrillance utiles (y compris combinées avec des espaces à la fin!) Sur le wiki de Vim sur la mise en surbrillance des espaces non souhaités .
Serge Stroobandt
9

Personnellement , j'aime bien l'utilisation du plugin indentLine , qui affiche une ligne verticale aux niveaux d'indentation.

Cela est très utile, surtout en python, où l'indentation est importante.

(Image prise du lien ci-dessus)

Entre autres choses, il fournit une commande à bascule, qui peut être associée à une combinaison de touches, afin que vous puissiez l'éteindre lorsque vous n'en avez pas besoin.

Mike
la source
2
Je crois que ce plugin est destiné aux espaces indentés bien?
Jake Byman
5

Vous voudrez peut-être afficher les onglets différemment dans un terminal standard et dans gvim.

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

(Ajoutant pour compléter, au cas où d'autres le trouveraient utile).

idéesman42
la source
4

La méthode la plus simple consiste à :set listafficher les onglets au ^Idébut et à la fin $.

J'aime utiliser un mapping qui appelle

:set invlist 

pour basculer entre l’affichage normal et l’affichage de la liste.

Par exemple:

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

Cela me permet de vérifier rapidement s'il y a des problèmes de tabulation par rapport à l'espace, puis de revenir à un affichage normal.

John O'M.
la source