Vim & l’indentation

Voir une mise à jour de l’article ici!

Hello,

S’il y a bien quelque chose qui me dérange dans les codes sources se sont les mélanges entre les tabulations et les espaces avec l’indentation. Une des justification de ne pas utiliser les deux façons de faire en même temps, est tout simplement le résultat d’un `diff`. La première colonne du `diff –unified` est réservée à un espace, un ‘-‘ ou alors un ‘+’. Ainsi lorsqu’un patch est lu et que les tabulations se mélangent avec les espaces, les éléments ne sont plus alignés comme dans cet exemple:

 void foobar (void)
 {
-        printf ("Hello ");
+	printf ("World!\n");
 }

Le premier printf utilisant 8 espaces et le second une tabulation. (à noter que l’affichage dans WordPress est faussé, à moins de regarder le code en cliquant sur le lien “view plain”)

Souvent dans les sources avec une indentation de 4 espaces, les tabulations sont utilisées pour chaque 8 espaces. Il y a donc régulièrement des lignes qui mélangent les deux en commençant par une tabulation, puis 4 espaces afin d’atteindre le 3ème niveau, et ainsi de suite.

Alors je n’ai rien contre les tabulations, mais seulement si elles sont utilisées pour représenter une indentation de 8 colonnes tel que c’est le cas dans le noyau Linux. Il y a même parfois pire. Certaines personnes changent la configuration du TAB afin qu’il fasse 4 colonnes au lieu de 8 (qui est la valeur par défaut). Ainsi pour les autres développeurs, la lecture du code est très difficile. Chose qui ne peut en aucun cas arriver avec des espaces.

Vim

VimMon but n’est pas d’ouvrir un troll entre Vi(m) et Emacs. En ce qui me concerne, j’utilise Vim pour une raison “historique”. C’est tout simplement le premier éditeur de texte évolué que j’ai utilisé sous Linux et je n’ai jamais eu l’envie de changer mes habitudes, celui-ci me donne entière satisfaction.

Afin de pouvoir travailler dans de bonnes conditions pour le développement, voici ma configuration actuelle de Vim (~/.vimrc).

" Global settings
:set nocompatible
:syntax on
:set hlsearch
:set shiftwidth=2
:set background=dark
:set cursorline

" Show line number
:set number
:highlight LineNr term=bold ctermfg=darkgray guifg=darkgray

" Special configuration for development
:filetype on
:autocmd FileType c,cpp,cxx,h set cindent|set cine=:0|set tabstop=8|set softtabstop=2|set expandtab
:autocmd FileType make setlocal noexpandtab

" Special highlighting for Doxygen
:let g:load_doxygen_syntax=1

" Show when a line exceeds 80 chars
:au BufWinEnter * let w:m1=matchadd('ErrorMsg', '\%>80v.\+', -1)

" Highlight Tabs and Spaces
:highlight Tab ctermbg=darkgray guibg=darkgray
:highlight Space ctermbg=darkblue guibg=darkblue
:au BufWinEnter * let w:m2=matchadd('Tab', '\t', -1)
:au BufWinEnter * let w:m3=matchadd('Space', '\s\+$\| \+\ze\t', -1)
:set list listchars=tab:»·,trail:·

En plus de la coloration syntaxique, il y a quelques paramètres pour éviter des bavures dans le code. L’un d’eux permet de montrer explicitement si une ligne dépasse les 80 caractères. Elles apparaissent en rouge mais ne sont pas coupées. Parfois il est voulu de dépasser cette limite. Deux autres paramètres mettent en évidence les espaces non désirés (à la fin d’une ligne par exemple), ainsi que les tabulations.

Il y a également des paramètres pour faciliter l’indentation. Celle-ci est définie pour 2 espaces tout en affichant les tabulations sur 8 colonnes. Il faut aussi être conscient que les “highlights” ont un prix et qu’ils ralentissent l’affichage de manière significative.

Vous pouvez voir ci-dessous un “screenshot” de Vim avec une tabulation et des espaces non-désirés (qui utilisent la configuration susmentionnée).

vim_highlight
Vim (cliquez sur l'image pour la voir à sa taille original)

A bientôt,

Mathieu SCHROETER

5 thoughts on “Vim & l’indentation

  1. Apparement tout le monde persiste a commencer son .vimrc par la commande ‘set nocompatible’. N’est-elle pas inutile?

    Extrait de la documentation de Vim concernant cette option:
    When a |vimrc| or |gvimrc| file is found while Vim is starting up, this option is switched off, and all options that have not been modified will be set to the Vim defaults.

  2. Sympa comme configuration, pour éviter les espaces inutiles c’est pratique.
    Sinon pourrais-je savoir quel est le colorscheme utilisé ? Il me plait beaucoup sur le screenshot.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s