web-dev-qa-db-fra.com

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

Je suis un utilisateur de longue date de Vim (3 ou 4 ans) qui a récemment commencé à traiter du code profondément imbriqué. Ce code est mis en retrait avec des espaces, pas des tabulations. Je voudrais une indication d'indentation propre et non gênante pour aider à garder trace du bloc de code dans lequel je me trouve lorsque je regarde quelque chose de très profond. 

:set list 

Affiche uniquement les caractères de tabulation et de fin. J'ai trouvé un plug-in (ne semble pas pouvoir le déterrer pour le moment) qui mettra en évidence chaque niveau d'indentation dans des couleurs progressivement plus sombres, mais c'est visuellement peu attrayant. Idéalement, j'aimerais voir de fines lignes verticales à chaque niveau d'indentation. Beaucoup de nouveaux éditeurs ont cette fonctionnalité mais je ne suis pas prêt à abandonner Vim pour l'instant.

Est-ce que quelqu'un sait comment cela peut être réalisé?

45
mjn12

NOTE: Cette réponse est un peu en retard pour la fête et aussi une prise éhontée :)

Quoi qu'il en soit, essayez mon Indent-Guides.vim plugin. Il a été créé pour me gratter des soucis concernant l’absence de guides de retrait dans Vim. J'en avais marre d'attendre que quelqu'un d'autre vienne et le construise, alors je l'ai fait moi-même. 

Caractéristiques:

  • Peut détecter les styles de retrait par tabulation et espace.
  • Inspecte automatiquement votre palette de couleurs et choisit les couleurs appropriées (gVim uniquement).
  • Met en évidence les niveaux de retrait avec des couleurs alternées.
  • Prise en charge complète de gVim et prise en charge de base de Terminal Vim.
  • Semble fonctionner sur Windows gVim 7.3 (pas encore fait de tests approfondis).
  • Taille personnalisable pour les repères de retrait, par exemple. guides maigres (soft-tabs uniquement).
  • Niveau de retrait personnalisable.

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

66
Nate K

Si vous indentez du code avec des espaces, vous pouvez essayer le plugin my: https://github.com/Yggdroot/indentLine , il affiche des lignes verticales minces mais pas des lignes verticales épaisses, comme indiqué dans les réponses précédentes. Si vous indentez le code avec une tabulation, il suffit de :set list lcs=tab:\|\ (here is a space)

27
Yggdroot

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
26
Nikolay Frantsev

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?

15

La solution la plus efficace serait probablement de "dessiner" des guides d'indentation En mettant en évidence les correspondances. Pour comprendre comment cela aide, regardez cet exemple:

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

Elle met en surbrillance (en utilisant Recherche groupe de surbrillance, il est possible d’utiliser tout Autre, bien sûr) la première, la cinquième, la neuvième (et on peut continuer). le début de la ligne. Ainsi, cela produit une indentation de quatre espaces mettant en évidence Pour trois niveaux de profondeur.

Pour généraliser cette idée, il ne reste plus qu'à générer le motif tel que Mentionné ci-dessus en fonction de la variable textwidth et shiftwidth Du tampon courant (pour gérer des niveaux de retrait plus profonds et une largeur de retrait appropriée). Cette tâche pourrait être simplement automatisée, comme indiqué 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 avez besoin de guides d'indentation dans un tampon, celui-ci peut être activé avec :call ToggleIndentGuides(). Bien sûr, vous pouvez modifier le groupe de surbrillance .__ (ou en créer un spécial à utiliser uniquement dans les guides d'indentation), configurer un mappage pratique 1 pour cela et/ou appelez-le à partir de autocmd pour certains types de fichiers


1 Guides d'indentation soulignant la configuration de mon .vimrc Fichier: https://Gist.github.com/734422

15
ib.

Essayez ce plugin VIM BlockHL Il code de manière différente l’indentation de chaque niveau.

EDIT: Quel lanaguge utilisez-vous? Ce plugin est destiné aux langues de style C.

1
prestomation

utilisez le plugin Indent-Guides.vim, et utilisez ig chaque fois que vous en avez besoin. Parfois, cela peut être agaçant cependant :)

0
kevin