Forum Programmation.autre vim & indentation fichiers source

Posté par  .
Étiquettes : aucune
0
30
jan.
2008
salut à tous;

bossant à plusieurs sur des sources C, je me retrouve avec des fichiers mal indentés, et c'est pas évident à lire :/

j'utilise vim, et j'ai trouvé la superbe commande qui permet de ré-indenter mon fichier correctement via la commande :
gg=G.

Cependant, mon indentation est de 8 espaces, et j'aurai voulu qu'elle soit de 4.

Comment bien régler cela ?
Plus généralement, comment bien régler :
- l'indentation à 4 espaces
- faire que mes lignes ne fassent pas plus de 80 caracteres (par ex..)
- comment voir la valeur des champs "tabstop" par ex ?

dans mon fichier .vimrc, j'ai les settings suivants :
- set tabstop=4
- set expandtab

Merci !
  • # tab ou espaces ?

    Posté par  (site web personnel) . Évalué à 1.

    Pourquoi n'utilises-tu pas des tabulations plutôt que des espaces ? Surtout lorsqu'on est plusieurs à travailler avec des éditeurs différents, souvent j'ai une préférence pour les tabulations car certains veulent que les tabulations fassent 3 espaces, d'autre 4 ou encore même 8.

    Du coup avec les tab, chacun configure son éditeur comme il veut pour afficher comme ça l'arrange et tout le monde il est content.

    Après bon, suffit de remplacer tes espaces par des tabulations, généralement, un simple :
    :%s/ /\t/g

    et voila. (avec autant d'espaces que nécessaire)
    • [^] # Re: tab ou espaces ?

      Posté par  . Évalué à 5.

      :%s/ /\t/g


      Surtout pas !!! C'est le meilleur moyen de tout flinguer.

      Par exemple, appliquée sur une ligne de code comme printf("toto tata") ca flingue l'affichage.

      Autant utiliser indent ou une regexp beaucoup plus évoluée que ça.
      • [^] # Re: tab ou espaces ?

        Posté par  (site web personnel) . Évalué à 1.

        C'est parce que mes espaces ont été flingués dans le commentaire. J'avais mis 4 espaces et c'est rare dans du code source d'avoir 4 espaces collés à la suite autre que pour l'indentation.
        Bien sûr, à manipuler en faisant gaffe. Après ouais, ya sans doute de meilleurs moyens :).
        • [^] # Re: tab ou espaces ?

          Posté par  (site web personnel) . Évalué à 5.

          Oui, il y a de meilleurs moyens : ":retab!" qui te remets tous les groupes de n espaces en début de ligne en tabulations (à condition d'avoir noexpandtab). L'opération inverse se fait avec ":retab".
    • [^] # Re: tab ou espaces ?

      Posté par  . Évalué à 1.

      Du coup avec les tab, chacun configure son éditeur comme il veut pour afficher comme ça l'arrange et tout le monde il est content.
      Fausse bonne idée: ceci ne marche que pour les débuts de lignes. Exemple: tu veux aligner les conditions d'un if:
      if (firstConditionFulfilled() &&
          secondConditionFulfilled() &&
          thirdConditionFulfilled())
      
      La première ligne est collée à gauche. Les deux suivantes ne peuvent être correctement alignées avec la première ligne que si la tabulation est à 4. Le premier développeur qui passe avec une tabulation différente de 4 va voir un alignement moche voire illisible, placer deux tabs au lieu d'une, et flinguer l'indentation pour le développeur suivant. Ce n'est pas juste une question de goût: un code mal indenté est une source fertile de bugs dès qu'on travaille à plusieurs.
      • [^] # Re: tab ou espaces ?

        Posté par  (site web personnel) . Évalué à 2.

        Franchement, je ne trouve pas ça plus laid avec des tabs à 8 qu'avec des tabs à 4... Si la condition est trop longue pour tenir sur une ligne, elle ne sera de toute façon pas lisible, alignement ou pas.
  • # indent

    Posté par  . Évalué à 1.

    Si tu arrives à écrire la liste des options qui t'intéressent dans celles que propose la commande indent, tu peux aussi faire :
    :%!indent <tes options d'indent>

    Après, si tu es motivé, ça doit être possible de mapper cette commande dans ton .vimrc, et tu pourras indenter tout un fichier sur une simple pression de touche ! =)
  • # mon .vimrc

    Posté par  . Évalué à 4.

    Pour avoir des lignes de 80 caractères ajoute dans le .vimrc :
    set textwidth=80
    Et pour avoir une indentation de 4 espaces, il vaux mieux rajouter :
    set shiftwidth=4
    • [^] # Re: mon .vimrc

      Posté par  . Évalué à 1.

      merci,

      textwidth fonctionne bien, j'ai bien 4 espaces

      par contre, pour textwidth, comment cela fonctionne-til ?
      ce parametre est-il pris en compte lors de la ré-indentation auto ? J'ai pas l'impression.. ?
      • [^] # Re: mon .vimrc

        Posté par  . Évalué à 4.

        ce parametre est-il pris en compte lors de la ré-indentation auto ? J'ai pas l'impression.. ?
        textwidth n'est pas pris en compte au moment de la réindentation de tout un fichier, tous simplement parceque l'indentation n'est pas un formatage, cette fonction va juste définir le nombre d'espaces ou de tabulations rajouter en début de ligne, ni plus ni moins.

        Si tu veux vraiment couper les lignes à 80, il vaut mieux utiliser un indenteur tel que indent (ou bcpp plus adapté au C++) qui offrent un paramétrage beaucoup plus fin. Il est facile de filtrer le code avec
        :%!indent

        Tu peux même automatiser l'indentation à l'ouverture d'un fichier .c ou .h avec, dans le vimrc

        au BufRead *.c,*.h :silent %!indent -kr -ts4 -l80 -lc80


        Il faut que tu vois quelle option tu veux passer à indent ou créer ton fichier indent.pro


        Etienne
      • [^] # Re: mon .vimrc

        Posté par  (site web personnel) . Évalué à 6.

        Tu as découvert gg=G qui te réindente tout ton fichier, découvre maintenant gggqG qui te "wrappe" tout ton fichier au nombre de caractères donné par textwidth. Mais aussi gqap qui te wrappe un paragraphe ou gqq qui te wrappe une ligne.

        En résumé, = indente et gq formatte.

        Et pour qu'il wrappe pendant que tu tapes, regardes ':help formatoptions'.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.