VIM et la configuration

lun. 20 août 2012

Il y a quelques jours je vous parlais de ma découverte de l'éditeur VIM. J'ai depuis un peu affiné la configuration de mon éditeur. Je vous la partage ici en vous expliquant chaque choix que j'ai effectué. À vous de voir ce qui vous intéresse ou ce qui est à jeter.

À noter que cette configuration est adapté au travail de texte. Je n'ai pas encore commencé à coder sous vim mais je compte le faire prochainement, ma configuration évoluera à ce moment-là.

!TODO!

Configuration général

L'option nocompatible me permet de stipuler à VIM que je ne veux pas des anciens raccourcis VI et que je veux un comportement 100% vim approved. Je n'ai jamais prit d'habitude à VI, je pense donc qu'il serait de mauvais gout d'ouvrir la porte à des habitudes obsolètes ;)

  set nocompatible

Je précise ensuite l'encodage par défaut de mes fichiers. J'ai pris l'habitude de travailler en UTF-8 autant que possible, je demande donc à VIM d'en faire de même.

  set encoding=utf-8

Affichage

Je vais maintenant m'occuper de paramétrer le look de VIM et les fonctionnalités concernant principalement l'affichage. Je vais donc commencer par activer la coloration syntaxique et choisir mon thème. Pour ce dernier, je vous conseille fortement de faire un tour sur le site vivify qui vous permet de visualiser différents thèmes et de choisir celui qui vous convient. Personnellement, mon choix s'est porté sur jellybeans.

  syntax on " Activation Coloration syntaxique
  colorscheme jellybeans " Choix du theme

Toujours dans le graphique, je ne conçois pas de travailler sans avoir mon numéro de ligne facilement accessible. Cette information va m'être très utile quand je vais travailler avec des déboggueurs ou des compilateurs (Latex par exemple :p ) qui m'indiquera un numéro de ligne. J'active donc cette option assez simplement.

  set number

Je m'occupe ensuite de ma barre de statut. Je veux que VIM m'affiche quelque chose genre ceci :

~/test.t2t[+] [FORMAT=unix] [TYPE=TXT2TAGS] [POS=5,8]

Il y a donc le nom du fichier, le mode (insertion, visuel, commande), des informations sur le format et le type de fichier repéré par Latex, et enfin un rappel de la position de mon curseur. Cet affichage demande le paramétrage suivant :

  set laststatus=2 " Nombre de ligne de statut
  set statusline=%F%m\ %r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [POS=%l,%v]

Dernier point d'affichage que je compte paramétrer : le folding. Vous savez, la fonctionnalité qui permet de plier et déplier des parties de votre document. Dans mon cas, je fais du texte, le folding à donc assez peu de sens. De plus je ne maitrise pas encore toutes les commandes basiques de l'éditeur, je préfère donc éviter de me rajouter de la complexité pour l'instant. Je la désactive donc :

  set nofoldenable

!TODO!

Comportement à la saisie

Occupons-nous maintenant du comportement que VIM va avoir pendant que je tape mes petits textes. Premier point que je juge très important : l'indentation. J'apprécie qu'un éditeur me mâche le boulot de ce coté là, surtout s'il le fait correctement. Je vais donc activer cette fonctionnalité mais demander à l'éditeur de ne pas utiliser le caractère tabulation mais des espaces, 4 pour être précis (habitude de pythoniste).

  set autoindent "Indentation automatique
  set smartindent "Et fait de manière intelligente ;)
  set shiftwidth=4 "Longueur des décalages VIM = 4
  set tabstop=4 "Longueur de la tabulation = 4

Travailler sous VIM avec des lignes trop longue est, à mon sens, un vrai calvaire. Le déplacement devient vite assez ch***, euh, compliqué ;) Je préfère donc demander à VIM de me faire des retours à la ligne. Ici, il va les faire quand il arrivera à 8 caractères de mon bord d'écran.

  set wrap " Activation du wrap
  set wrapmargin=8 " Nb de caractère depuis le bord extérieur

Bon, j'avoue, j'ai aussi de sales habitude de windowsien, notamment concernant le comportement de la touche backspace. Je demande donc à VIM de me restituer un fonctionnement traditionnel (honte à moi).

  set backspace=indent,eol,start

Backup

Je m'attaque enfin au problématique de backup et d'historique. J'active le backup automatiquement et configure l'historique à un niveau acceptable. J'en profite pour paramétrer aussi le nombre d'action mémoriser pour le "undo". Je profite aussi pour dire à VIM de ne pas laisser trainer ses backups n'importe où ! Je les centralise directement dans le dossier de vim.

  set backup "Activation de l'historique
  set history=50 "Niveau de l'historique
  set undolevels=50 "Nb de undo

  " Backup dans ~/.vim/backup
  if filewritable(expand("~/.vim/backup")) == 2
      " comme le répertoire est accessible en écriture,
      " on va l'utiliser.
    set backupdir=$HOME/.vim/backup
  else
    if has("unix") || has("win32unix")
          " C'est c'est un système compatible UNIX, on
          " va créer le répertoire et l'utiliser.
        call system("mkdir $HOME/.vim/backup -p")
        set backupdir=$HOME/.vim/backup
    endif
  endif

Les Extensions

Passons maintenant à la configuration des plugins et des fonctionnalités supplémentaires. Les lignes suivantes définissent la langue du correcteur d'orthographe et le nombre de suggestion que j'attends en cas de complétion. Je configure également la localisation de LanguageTool qui me sert de correcteur de grammaire. J'ai déjà abordé ce plugin dans le précédent post, je ne rentrerai donc pas dans le détail. Je n'active pas le correcteur par défaut, je préfère l'appeler volontairement par un set spell lorsque j'en ai besoin.

  set spelllang=fr
  set spellsuggest=5
  let g:languagetool_jar='~/.vim/plugin/LanguageTool/LanguageTool.jar'

Je configure ensuite très rapidement NERDTree. Cette extension permet d'obtenir un navigateur de fichier directement dans VIM. L'extension me convient très bien tel quel à part un détail : je veux que l'explorateur se ferme après ouverture d'un fichier. Je le précise donc ici.

  let NERDTreeQuitOnOpen = 1

J'utilise un second plugin qui m'affiche les buffers sous forme d'onglet : miniBufExplorer. Ce plugin est très paramétrable. Les lignes suivantes correspondent vraiment à mon usage. Le mieux pour le configurer à votre tour est de lire la documentation de l'extension qui est assez bien faite :)

  let g:miniBufExplorerMoreThanOne=0
  let g:miniBufExplMapWindowNavVim = 0
  let g:miniBufExplMapWindowNavArrows = 1
  let g:miniBufExplMapCTabSwitchBufs = 1
  let g:miniBufExplUseSingleClick = 1

Sous un de mes Linux, j'ai rencontre un souci d'accent aigu dans les fichiers Latex : l'accent refusait de s'écrire ! J'ai trouvé sur internet la parade suivante qui marche à merveille :

  imap <buffer> <leader>it <Plug>Tex_InsertItemOnThisLine

Et voilà, vous êtes arrivés à la fin de ma configuration. La suite dans un prochain épisode dédié à VIM et à Java. Je pense aussi vous parler très prochainement de I3, un Tiling Manager

Complément suite aux commentaires

Un commentaire très intéressant m'a signalé une astuce pour la navigation dans les lignes trop longues. Merci à lid.

  nnoremap j gj
  nnoremap k gk

Ces deux lignes permettent de reconfigurer les touches de navigation j et k pour passer d'une ligne apparence à l'autre (et non d'une ligne réèl). Ce tips est très intéressant et je l'ajoute dès maintenant à ma configuration :)