53 votes

Est-il possible d'afficher des guides d'indentation dans Vim?

Je suis un vieil utilisateur de Vim (3 ou 4 ans) qui a récemment commencé à traiter avec certains profondément imbriquée code. Ce code est indenté avec des espaces, pas d'onglets. Je tiens un peu de nettoyage et de non-distraction indication de l'indentation pour aider à garder la trace de bloc de code je suis quand je suis à la recherche de quelque chose de beaucoup de niveaux de profondeur.

:set list 

Seulement onglet affichage, et de la ligne de caractères. J'ai trouvé un plug-in (ne semblent pas pour le creuser jusqu'à l'instant) qui mettra en évidence chaque niveau d'indentation au fur et à mesure des couleurs plus sombres, mais c'est visuellement attrayant. Idéalement, je voudrais voir de fines lignes verticales à chaque niveau d'indentation. De nombreux un nouveau genre éditeurs ont cette fonctionnalité, mais je ne suis pas prêt à renoncer à Vim pour l'instant.

Personne ne sait comment cela peut être réalisé?

73voto

noname- Points 801

NOTE: Cette réponse est un peu tardive pour le parti et aussi un plug sans vergogne :)

Indépendamment de cela, essayez mon Tiret-Guides.vim plugin. Il a été créé pour gratter ma propre démangeaisons liées à l'absence de tiret guides dans vim. Je suis assez d'attente pour quelqu'un d'autre de venir et de le créer, alors je l'ai fait moi-même.

Caractéristiques:

  • Peut détecter à la fois de l'onglet et de l'espace, tiret styles.
  • Inspecte automatiquement votre colorscheme et prend des couleurs appropriées (gVim seulement).
  • Mettra en évidence des niveaux de retrait avec l'alternance des couleurs.
  • Support complet pour gVim et de support de base pour le Terminal de Vim.
  • Semble fonctionner sur Windows gVim 7.3 (n'ai pas fait des tests).
  • La taille personnalisable pour le retrait des guides, par exemple. skinny guides (soft-tabs seulement).
  • De démarrage personnalisable niveau d'indentation.

Voici quelques captures d'écran du plugin en action: placez votre souris et cliquez sur.

37voto

Yggdroot Points 101

Si vous indentez du code avec des espaces, vous pouvez essayer mon plugin: https://github.com/Yggdroot/indentLine , il affiche des lignes verticales minces mais pas des lignes verticales épaisses comme le mentionne la réponse ci-dessus. Si vous indiquez du code avec onglet, il suffit de: définir la liste lcs = onglet: \ | \

30voto

Nikolay Frantsev Points 534

vous pouvez utiliser des onglets pour afficher les guides d'indentation et les supprimer avant de sauvegarder le fichier:

 " use 4 spaces for tabs
set tabstop=4 softtabstop=4 shiftwidth=4

" display indentation guides
set list listchars=tab:❘-,trail:·,extends:»,precedes:«,nbsp:×

" convert spaces to tabs when reading file
autocmd! bufreadpost * set noexpandtab | retab! 4

" convert tabs to spaces before writing file
autocmd! bufwritepre * set expandtab | retab! 4

" convert spaces to tabs after writing file (to show guides again)
autocmd! bufwritepost * set noexpandtab | retab! 4
 

18voto

Cela montrera des points pour indiquer votre niveau d'indentation pendant que vous tapez. Les points disparaissent comme par magie lorsque vous quittez la ligne.

 set list listchars=tab:»-,trail:·,extends:»,precedes:«
 

Par exemple:

 def test():
....print('indentation level 1')
 

Assez cool hein?

17voto

ib. Points 14520

Probablement la solution la plus efficace serait de "tracer" indentation guides à l'aide de match-mettre en évidence. Pour comprendre comment cela peut aider, regardez cet exemple:

:match Search /\%(\_^\s*\)\@<=\%(\%1v\|\%5v\|\%9v\)\s/

Il met en évidence (à l'aide de la Recherche mettant en évidence groupe, il est possible d'utiliser tout d'autres, bien sûr) les premier, cinquième, neuvième (et on continue) colonne virtuelle de l'espace occupé par le symbole précédent, mais rien d'espaces de le début de la ligne. Donc, ce produit quatre-espace de l'indentation en soulignant pour les trois niveaux de profondeur.

Pour généraliser cette idée, il ne reste plus qu'à générer schéma comme celui mentionnés ci-dessus selon le tampon courant de l' textwidth et shiftwidth (pour traiter les plus profonds niveaux de retrait et le bon de retrait de la largeur). Cette tâche pourrait être simplement automatisé, comme illustré dans la fonction ci-dessous.

function! ToggleIndentGuides()
    if exists('b:indent_guides')
        call matchdelete(b:indent_guides)
        unlet b:indent_guides
    else
        let pos = range(1, &l:textwidth, &l:shiftwidth)
        call map(pos, '"\\%" . v:val . "v"')
        let pat = '\%(\_^\s*\)\@<=\%(' . join(pos, '\|') . '\)\s'
        let b:indent_guides = matchadd('CursorLine', pat)
    endif
endfunction

Chaque fois que vous devez à l'indentation des guides dans la mémoire tampon, il peut être activé par :call ToggleIndentGuides(). Bien sûr, vous pouvez changer en soulignant groupe (ou en créer un spécial pour une utilisation dans l'indentation guides seulement), le programme d'installation pratique cartographie1 , et/ou de l'appeler à partir d' autocmd pour certains fichiers les types.


1 Indentation guides mettant en évidence la configuration de mon .vimrc fichier: https://gist.github.com/734422

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X