Chocoblog

Chocoblog

Billets sur l'informatique, les logiciels libres et retours d'utilisation sont au programme avec la possibilité de publier des billets de copains.

Plugins Vim pour rivaliser avec SublimeText

Ce billet a été initialement publié l'année dernière sur http://blog.sandrocazzaniga.fr

Je vois beaucoup de personnes se tourner vers SublimeText pour développer du C ou bien du Perl car je cite "il est très rapide, sexy et possède d'innombrables plugin".

Sinon y'a Vim, il a 20 ans d'avance, est libre, est plus rapide et possède lui-aussi de nombreux plugins. Et puis bon... c'est Vim :)

Alors vu que j'ai voulu savoir de quoi je parle pour éviter de raconter n'importe quoi, j'ai testé SublimeText. Et en effet c'est beau, rapide et puissant. L'installation des plugins est aussi très simple et facilement configurable. Mais pour l'instant je n'ai pas trouvé de choses que l'on puisse faire sur SublimeText et que je ne peux pas faire sur Vim. Par contre, il faut la bonne conf et les bons plugins. Je me suis dis qu'un article là dessus pourrait faire gagner pas mal de temps à certains.

Bon alors attention, je parle bien pour une utilisation Vim pour coder du C et du Perl. Pour développer les autres langages :

  • Pour le web (HTML/CSS PHP JavaScript...) je préfère utiliser Komodo Edit (quand même relativement lourd)
  • Pour le Latex TexMaker (développé avec Qt)
  • Pour le C++ (généralement avec Qt), forcément QtCreator
  • Je ne fais pas de Python ni de Ruby

Bien entendu, la majorité des plugins que je vais vous présenter peuvent aider dans pas mal d'autres langages différents (analyseur syntaxique, Git, fermeture automatique des symboles appariés, moteur de snippets, commentaires automatiques, explorateur de fichier etc). Bon je referme la parenthèse, on peut enfin commencer les choses sérieuses.
Il est possible de voir certains résultats via des GIF animés en cliquant les screens. Soyez patient si ils ne s'ouvrent pas tout de suite, ils font quand même un certain poids :)

Configuration de base

Commençons par le .vimrc :

set nocompatible              " be iMproved, required
filetype plugin indent on 

syntax enable           	" Coloration syntaxique

set ai 			        " Activer l'indentation automatique
set si			        " Activer l'indentation intelligente
set showcmd		        " Affiche (partiellement) la commande dans la barre de statut
set showmatch		        " Afficher les brackets qui correspondent
set ignorecase		        " Recherche insensible à la casse
set incsearch		        " Recherche insensible à la casse
set mouse=a		        " Activer la souris pour tous les modes
set number		        " Afficher les numéros de ligne
set shiftwidth=4	        " Une tabulation = 4 espaces
set tabstop=4
set expandtab		        " Transformer les tabulations en espaces
set ruler		        " Afficher la position courante
set smarttab		        " Être intelligent dans l'utilisation des tabulations
set fileencoding=utf-8          " Encoder en UTF-8
set shell=zsh		        " Votre shell 
set wildmenu                    " Completion dans l'interface
set wildmode=list:longest       " Comportement de la complétion semblable à celui d'un shell
set wildignore=*.o,*~ 	        " Ignorer les fichiers temporaires et objets
set foldmethod=indent           " Méthode pour cacher du code (donc selon l'indentation)
set nofoldenable                " Ne rien cacher par défaut

set background=dark 

" Autocomplétion intelligente
set omnifunc=syntaxcomplete#Complete

" Désactiver les commentaires auto
autocmd FileType * setlocal formatoptions-=c formatoptions-=r formatoptions-=o

" Touche bonus que l'on peut utiliser pour mapper certaines commandes
let mapleader = ","

" Exécuter PerlTidy sur l'actuel buffer (nécessite son installation sur le système)
map <F7> <Esc>:%!perltidy -i 2<CR>

" Splitter horizontalement
map <C-w>- <Esc>:sp<CR>
" Splitter verticalement
map <C-w>\| <Esc>:vsp<CR>

" Aller à l'onglet suivant
nnoremap <C-Left>  :tabprevious<CR>
" Aller à l'onglet précédent
nnoremap <C-Right>  :tabnext<CR>
" Fermer l'onglet courant
nnoremap <C-c> :tabclose<CR>
" Ouvrir un nouvel onglet
nnoremap <C-t> :tabnew<CR>

Petite explication sur le fold dans Vim. Il est possible de cacher un bloc de code, ou de le re-afficher. Vous devez savoir de quoi je parle si vous avez l'habitude d'utiliser des éditeurs/IDE. On laisse Vim se charger de savoir quoi cacher en lui spécifiant la façon (en l'occurrence sur l'indentation). Sauf que je préfère ne rien cacher lorsque j'ouvre un fichier, d'où le nofoldenable. Il est ensuite possible via la commande za d'afficher/cacher (toggle) un bloc de code.

Les commentaires automatiques (lorsqu'on est dans un commentaire et que l'on va à la ligne Vim rajoute automatiquement les caractères permettant de commenter cette nouvelle ligne) me dérangent sur les copié/coller externes donc je préfère les désactiver.

Enfin je choisis "," pour le mapleader me permettant d'associer des raccourcis à l'aide de cette touche.

J'ai décidé de mapper certaines commandes :

  • Il est possible d'exécuter PerlTidy sur le fichier qu'on est en train de modifier juste en appuyant sur F7
  • On peut splitter Vim verticalement ou horizontalement avec Ctrl + | et Ctrl + -
  • On peut ouvrir un nouvel onglet avec Ctrl + t naviguer entre eux avec Ctrl + flêche gauche/droite et enfin fermer l'onglet courant via Ctrl + c

Enfin une dernière chose que je trouve très intéressante, il est possible d'afficher la page de Man (ou Perldoc etc) de l'élément qui se trouve sous le curseur via K (soit shift + k).

Place maintenant aux plugins. Vous pouvez accéder à leurs dépôts GitHub en appuyant sur leur nom.

Vundle

Avant d'installer les plugins, il nous faut un manager. Au départ je les installais via l'AUR (ArchLinux) mais je me suis rendu compte que ça devenait vite n'importe quoi dans le dossier de Vim. Après utilisation de Vundle, j'en conclue que c'est la meilleure alternative pour gérer ses plugin facilement et proprement.

Il faut commencer par cloner le dépôt de Vundle dans le sous-dossier bundle de votre dossier .vim (de votre home) :

cd ~ && mkdir .vim/bundle && cd .vim/bundle
git clone depotdevundle

Vous devez ensuite rajouter au tout début de votre fichier .vimrc (avant la commande filetype plugin indent on) :

filetype off                  " required

" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/vundle/
call vundle#rc()

" let Vundle manage Vundle, required
Plugin 'gmarik/vundle'

" Ma liste perso de plugins
Plugin 'gmarik/vundle'
Plugin 'tpope/vim-fugitive'
Plugin 'vim-scripts/a.vim'
Plugin 'Rip-Rip/clang_complete'
Plugin 'vim-scripts/DoxygenToolkit.vim'
Plugin 'ervandew/supertab'
Plugin 'emezeske/manpageview'
Plugin 'terryma/vim-multiple-cursors'
Plugin 'scrooloose/nerdcommenter'
Plugin 'scrooloose/nerdtree'
Plugin 'vim-perl/vim-perl'
Plugin 'c9s/perlomni.vim'
Plugin 'scrooloose/syntastic'
Plugin 'wincent/cammand-t'
Plugin 'vim-scripts/taglist.vim'
Plugin 'Raimondi/delimitMate'
Plugin 'WolfgangMehner/vim-plugins'
Plugin 'SirVer/ultisnips'
Plugin 'honza/vim-snippets'
Plugin 'chrisbra/Replay'

Ce code initialise le plugin Vundle. J'ai ajouté la liste des plugins que je vais vous présenter, ça pourra vous faire gagner du temps si vous voulez les utiliser.
Lorsque vous voulez installer un nouveau plugin, allez sur la page GitHub de ce dernier et copiez le nom de l'utilisateur avec son nom de dépôt (ce n'est qu'un exemple). Rajoutez le à la liste puis lancez Vim. Il suffit ensuite d'exécuter la commande :

:PluginInstall

Et le plugin s'installe automatiquement :)

Je vous laisse regarder la doc pour de plus amples informations.

vim-spell-fr

Ce n'est pas vraiment un plugin mais un paquet de Vim. Il permet la correction orthographique dans un document.
Personnellement, je l'ai associé à cette configuration :

"Correction orthographique
setlocal spell spelllang=fr                                   " Correcteur orthographique français
set nospell                                                   " Par défaut, pas de correction orthographique
autocmd BufEnter,BufNewFile,BufRead *.txt set spell           " Activation pour les .txt
autocmd BufEnter,BufNewFile,BufRead *.txt let g:spellactive=1 " Ajustement pour la fonction d’activation/desactivation de la correction orthographique

" Correction orthographique
map <F5> <Esc>:setlocal spell! spelllang=fr

De ce fait, la correction est automatiquement activée lorsque j'ouvre des fichiers txt. Je peux aussi l'activer/désactiver manuellement via la touche .

spellfr screenshot

NERDTree

Permet d'ouvrir un onglet sur la gauche de Vim (par exemple) affichant les dossiers et fichiers du répertoire courant. Il est ensuite possible de naviguer via les touches fléchés et la touche Entrée, puis d'ouvrir un fichier via la touche o ou dans un nouvel onglet via la touche t

On peut rajouter au .vimrc :

" Afficher arborescence
map <F2> <Esc>:NERDTreeToggle<CR><Esc>:NERDTreeMirror<CR>

Qui permet d'ouvrir le panneau en appuyant sur la touche F2.

nerdtree screenshot

Command-T

Ce plugin est inspiré de l'ouverture de fichier SublimText. Il permet d'écrire une partie du fichier que l'on souhaite ouvrir (avec éventuellement une ou deux fautes) et Command-T filtrera les entrées.
J'ai mappé la commande avec la touche leader puis o :

" Exécuter CommandT (ouvrir un fichier rapidement en écrivant son nom)
noremap <leader>o :CommandT<CR>

Lorsqu'on est dans le menu de Command-T, on peut ouvrir le fichier sélectionné avec la touche Entree ou dans un nouvel onglet via Ctrl+t.

commandt screenshot

SuperTab

Permet d'utiliser la touche de tabulation pour l'autocomplétion par exemple. Si vous voulez utiliser cette touche pour l'omnicomplétion, vous pouvez ajouter ces lignes à votre .vimrc

" Action automatique pour les fichier de type C
autocmd FileType c call CodeC()
" Action automatique pour les fichier de type Perl
autocmd FileType perl call CodePerl()

" Fonction à appeler pour initialiser Vim pour un script Perl
function CodePerl() 
    " Utiliser l'omnicompletion pour la tabulation
    let g:SuperTabDefaultCompletionType = "<C-X><C-O>"
endfunction

" Fonction à appeler pour initialiser Vim pour un code C
function CodeC() 
    " Pour forcer ClangComplete à la tabulation
    let g:SuperTabDefaultCompletionType = "<C-X><C-U>"
endfunction

Rappelons (cf doc de SuperTab) que nous disposons de nombreuses méthodes de complétions :

* <c-n> - Keywords in 'complete' searching down
* <c-p> - Keywords in 'complete' searching up (SuperTab default)
* <c-x> <c-l> - Whole lines
* <c-x> <c-n> - Keywords in current file
* <c-x> <c-k> - Keywords in 'dictionary'
* <c-x> <c-t> - Keywords in 'thesaurus', thesaurus-style
* <c-x> <c-i> - Keywords in the current and included files
* <c-x> <c-]> - Tags
* <c-x> <c-f> - File names
* <c-x> <c-d> - Definitions or macros
* <c-x> <c-v> - Vim command-line
* <c-x> <c-u> - User defined completion
* <c-x> <c-o> - Omni completion
* <c-x> s - Spelling suggestions

supertab screenshot

PerlOmni

Rajoute la complétion pour Perl (extrait de leur GitHub) :

  • nom des variables
  • nom des fonctions
  • méthodes de package
  • Moose (basique)
  • DBIx (basique)

vim-perl

Améliore la coloration syntaxique de Perl.

*-support

Ajoute beaucoup beaucoup beaucoup de choses à Vim en fonction du langage (entre autre : Perl, C, Latex, Git...).
Il permet d'ajouter des templates (bloc de commentaires décrivant le programme) lorsque l'on crée un nouveau fichier, et ajoute pas mal de commandes (Perl : http://lug.fh-swf.de/vim/vim-perl/perl-hot-keys.pdf et C : http://lug.fh-swf.de/vim/vim-c/c-hotkeys.pdf.
Je ne les utilise pas vraiment, sauf pour le Perl où l'exécution de \rr permet de lancer le script que l'on est actuellement en train de modifier.

nerdcommenter

Permet de simplement commenter un bloc de code (dans n'importe quel langage connu par nerdcommenter) facilement. Je n'ai pas de conf particulière pour ce plugin, j'utilise simplement le bind mapleader suivi de c suivi d'espace pour commenter le bloc de code que j'ai sélectionné (ou sinon la ligne courante).
Bien évidemment, beaucoup d'autres commandes sont disponibles, je vous laisse étudier la doc'.

nerdcommenter screenshot

vim-a

L'incontournable, permet de facilement switcher entre le fichier source et le header (en C, C++...).
Ma conf :

" Switcher .h/.c
map <F4> <Esc>:A<CR>

" Pour changer entre le .c/.h, on spécifie nos dossiers d'inclusions persos
let g:alternateSearchPath = 'sfr:../source,sfr:../src,sfr:../SRC,sfr:../include,sfr:../inc,sfr:../INC'

Ça me permet de naviguer entre le .c et le .h. J'ajoute aussi le nom de mes dossier d'inclusion, car j'ai des collègues qui mettent des noms un peu bizarres.
Deux commandes de base que j'ai aussi trouvé intéressantes :

  • ih qui va au fichier situé sous le curseur
  • :AV qui splitte Vim en deux puis switche au .h/.c associé

alternate screenshot

DoxygenToolkit

Super plugin qui permet de générer le bloc de commentaire Doxygen pour un élément associé.

Je l'associe à cette conf :

" Générer les blocs de commentaires Doxygen pour la ligne d'en dessous
map <F6> <Esc>:Dox<CR>

" Afficher la syntaxe et les couleurs pour les commentaires doxygen
let g:load_doxygen_syntax=1
let g:doxygen_enhanced_colour=1

qui active la coloration syntaxique de commmentaires Doxygen et me permet via de générer le bloc de commentaire pour la ligne suivante.

doxygen screenshot

TagList

Permet d'extraire la structure du code source et de l'afficher dans un panneau (par exemple, les différentes fonctions, structures...).

" Afficher la structure du code
map <F3> <Esc>:TlistToggle<CR>

L'appui sur la touche F3 me permet d'afficher le panneau.

taglist screenshot

vim-fugitive

Permet d'exécuter les commandes Git directement dans Vim. Je n'ai pas de conf particulière pour ce plugin.

Vous pouvez faire un :Gcommit pour faire un commit (sans blague ?), :Gblame permet de splitter Vim en deux pour voir par qui est quand chaque ligne a été modifié... Il y a évidemment beaucoup d'autres commandes, mais je n'utilise pas beaucoup ce plugin donc je vais être malheureusement incapable de vous aider :).

delimitMate

Permet simplement de fermer automatiquement les parenthèses, guillemets etc.

delimitmate screenshot

multiple-cursors

Autre plugin dont l'idée m'est venu de SublimText, c'est d'écrire sur plusieurs lignes en même temps. Ça peut être pratique pour écrire du code répétitif. Il suffit de sélectionner là où vous voulez écrire, puis de saisir le raccourci Ctrl + n.

multiligne screenshot

UltiSnip

Moteur de snippets pour de nombreux langages.

J'ai juste cette conf :

" UltiSnip - Lister les snippets disponible
let g:UltiSnipsListSnippets="<c-l>"

Elle permet de lister tous les snippets disponibles avec le raccourci Ctrl + l. Lorsque vous voulez créer une boucle for par exemple, il suffit de commencer à taper "for" puis d'appuyer sur la touche tab. Vous pourrez naviguer afin de modifier les différents éléments via Ctrl + j pour aller au suivant, et Ctrl + k pour le précédent.

ultisnip screenshot

clang_complete

Plugin indispensable si vous faites du développement en C/C++. Il améliore grandement l'autocomplétion en indiquant dans le menu le type de la complétion (variable, fonction...) et les prototypes des fonctions.

" Complétion
set pumheight=10                        " Taille du menu d'autocomplétion
set completeopt=menu,longest
let g:clang_complete_auto=0
let g:clang_snippets=1                  " Utiliser un moteur de snippets pour les placeolders
let g:clang_snippets_engine='ultisnips' " Spécification du moteur de snippets que l'on utilise
let g:clang_auto_select=1               " Sélectionner la complétion vide par défaut

Cette conf' met une taille de 10 pour le menu de complétion et d'utiliser ultisnips comme moteur de snippet. Je force la complétion via Clang grâce à la fonction CodeC. J'active simplement la complétion avec la touche Tab (grâce à SuperTab bien sûr).

clang screenshot

syntastic

Aussi est indispensable quel que soit le langage développé. Il permet de vérifier si votre code est syntaxiquement correct.

" Vérification syntaxique (du code, pas du français :p )
let g:syntastic_enable_signs=1          " Activer les signes dans la barre d'erreur à gauche
let g:syntastic_enable_perl_checker=1   " Réactiver l'analyse pour le Perl (désactivé car risque de sécurité sur les scripts Perl étrangers)
let g:syntastic_perl_checkers=['perl']
let g:syntastic_check_on_open=1         " Analyser le fichier à l'ouverture
let g:syntastic_c_include_dirs = [ '../include', 'include', '../INC', 'INC', '../inc', 'inc' ] " Spécifications des dossier d'inclusion perso

J'active par défaut le plugin lorsque j'ouvre un fichier, je lui spécifie les dossier d'inclusion qu'il ne connait pas forcément et j'active le plugin pour les fichiers Perl. Il est désactivé par défaut pour cause de problèmes de sécurité (il vaut mieux éviter d'ouvrir un fichier Perl qu'on ne connait pas du coup).
Je vous montre deux exemples, un sur un fichier C et un autre sur du Perl (il fonctionne aussi avec de nombreux autres langages comme Python par exemple).

syntastic C screenshot
syntastic Perl screenshot

Replay

J'ai pensé que des screens animés permettaient de mieux voir l'utilité des plugins présentés. J'utilise pour cela le plugin Replay (ScreenRecord) que j'ai modifié afin que ffmpeg sorte directement un gif.
Je ne pense pas que ça vous serve néemmoins au cas ou j'en parle quand même

" Enregistrer les actions faites dans Vim dans une vidéo ou GIF
let g:replay_record=1

" Commencer l'enregistrement en GIF de Vim
nnoremap <leader>s <Esc>:ScreenRecord!<CR>:<C-c>
" Arrêter l'enregistrement
nnoremap <leader>r <Esc>:ScreenRecord<CR>:<C-c></code>

J'active le fait de pouvoir enregistrer ce qui se passe, et j'active simplement l'enregistrement via le mapleader + r et l'arrête avec mapleader + s.

Conclusion

Voili voilou je pense avoir fait le tour des différents plugins.
Je vous donne ma conf' .vimrc histoire de voir ce que ça donne au final :

set nocompatible              " be iMproved, required
filetype off                  " required

" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/vundle/
call vundle#rc()

" let Vundle manage Vundle, required
Plugin 'gmarik/vundle'
Plugin 'tpope/vim-fugitive'
Plugin 'vim-scripts/a.vim'
Plugin 'Rip-Rip/clang_complete'
Plugin 'vim-scripts/DoxygenToolkit.vim'
Plugin 'ervandew/supertab'
Plugin 'emezeske/manpageview'
Plugin 'terryma/vim-multiple-cursors'
Plugin 'scrooloose/nerdcommenter'
Plugin 'scrooloose/nerdtree'
Plugin 'vim-perl/vim-perl'
Plugin 'c9s/perlomni.vim'
Plugin 'scrooloose/syntastic'
Plugin 'wincent/command-t'
Plugin 'vim-scripts/taglist.vim'
Plugin 'Raimondi/delimitMate'
Plugin 'WolfgangMehner/vim-plugins'
Plugin 'SirVer/ultisnips'
Plugin 'honza/vim-snippets'
Plugin 'chrisbra/Replay'

filetype plugin indent on 

syntax enable           " Coloration syntaxique
set t_Co=256            " Nombre de couleurs différentes
highlight NbSp ctermbg=5  
match NbSp /\%xa0/

set ai 			        " Activer l'indentation automatique
set si			        " Activer l'indentation intelligente
set showcmd		        " Affiche (partiellement) la commande dans la barre de statut
set showmatch		    " Afficher les brackets qui correspondent
set ignorecase		    " Recherche insensible à la casse
set incsearch		    " Recherche insensible à la casse
set mouse=a		        " Activer la souris pour tous les modes
set number		        " Afficher les numéros de ligne
set shiftwidth=4	    " Une tabulation = 4 espaces
set tabstop=4
set expandtab		    " Transformer les tabulations en espaces
set ruler		        " Afficher la position courante
set smarttab		    " Être intelligent dans l'utilisation des tabluations
set fileencoding=utf-8  " Encoder en UTF-8
set shell=zsh		    " Votre shell 
set wildmenu            " Completion dans l'interface
set wildmode=list:longest " Comportement de la complétion semblable à celui d'un shell
set wildignore=*.o,*~ 	"Ignorer les fichiers temporaires et objets
set foldmethod=indent   " Méthode pour cacher du code (donc selon l'indentation)
set nofoldenable        " Ne rien cacher par défaut

set background=dark 

" Autocomplétion intelligente
set omnifunc=syntaxcomplete#Complete

" Désactiver les commentaires auto
autocmd FileType * setlocal formatoptions-=c formatoptions-=r formatoptions-=o

" Touche bonus que l'on peut utiliser pour mapper certaines commandes
let mapleader = ","

" Afficher arborescence
map <F2> <Esc>:NERDTreeToggle<CR><Esc>:NERDTreeMirror<CR> 
" Afficher la liste des fonctions
map <F3> <Esc>:TlistToggle<CR>
" Switcher .h/.c
map <F4> <Esc>:A<CR>
" Correction orthographique
map <F5> <Esc>:setlocal spell! spelllang=fr<CR>
" Générer les blocs de commentaires Doxygen pour la ligne d'en dessous
map <F6> <Esc>:Dox<CR>
" Exécuter PerlTidy sur l'actuel buffer
map <F7> <Esc>:%!perltidy<CR>
" Splitter horizontalement
map <C-w>- <Esc>:sp<CR>
" Splitter verticalement
map <C-w>\| <Esc>:vsp<CR>
" Aller à l'onglet suivant
nnoremap <C-Left> :tabprevious<CR>
" Aller à l'onglet précédent
nnoremap <C-Right> :tabnext<CR>
" Fermer l'onglet courant
nnoremap <C-c> :tabclose<CR> 
" Ouvrir un nouvel onglet
nnoremap <C-t> :tabnew<CR>
" Exécuter CommandT (ouvrir un fichier rapidement en écrivant son nom)
noremap <leader>o <Esc>:CommandT<CR>
" Commencer l'enregistrement en GIF de Vim
nnoremap <leader>s <Esc>:ScreenRecord!<CR>:<C-c>
" Arrêter l'enregistrement
nnoremap <leader>r <Esc>:ScreenRecord<CR>:<C-c>


" Action automatique pour les fichier de type C
autocmd FileType c call CodeC()
" Action automatique pour les fichier de type Perl
autocmd FileType perl call CodePerl()

" Fonction à appeler pour initialiser Vim pour un script Perl
function CodePerl() 
    " Utiliser l'omnicompletion pour la tabulation
    let g:SuperTabDefaultCompletionType = "<C-X><C-O>"
endfunction

" Fonction à appeler pour initialiser Vim pour un code C
function CodeC() 
    " Pour forcer ClangComplete à la tabulation
    let g:SuperTabDefaultCompletionType = "<C-X><C-U>"
endfunction


" Correction orthographique
setlocal spell spelllang=fr                                   " Correcteur orthographique français
set nospell                                                   " Par défaut, pas de correction orthographique
autocmd BufEnter,BufNewFile,BufRead *.txt set spell           " Activation pour les .txt
autocmd BufEnter,BufNewFile,BufRead *.txt let g:spellactive=1 " Ajustement pour la fonction d’activation/desactivation de la correction orthographique

" UltiSnip - Lister les snippets disponible
let g:UltiSnipsListSnippets="<c-l>"

" Complétion
set pumheight=10                        " Taille du menu d'autocomplétion
set completeopt=menu,longest
let g:clang_complete_auto=0
let g:clang_snippets=1                  " Utiliser un moteur de snippets pour les placeolders
let g:clang_snippets_engine='ultisnips' " Spécification du moteur de snippets que l'on utilise
let g:clang_auto_select=1               " Sélectionner la complétion vide par défaut

" Vérification syntaxique (du code, pas du français)
let g:syntastic_enable_signs=1          " Activer les signes dans la barre d'erreur à gauche
let g:syntastic_enable_perl_checker=1   " Réactiver l'analyse pour le Perl (désactivé car risque de sécurité sur les scripts Perl étrangers)
let g:syntastic_perl_checkers=['perl']
let g:syntastic_check_on_open=1         " Analyser le fichier à l'ouverture
let g:syntastic_c_include_dirs = [ '../include', 'include', '../INC', 'INC', '../inc', 'inc' ] " Spécifications des dossier d'inclusion perso

" Afficher la syntaxe et les couleurs pour les commentaires doxygen
let g:load_doxygen_syntax=1
let g:doxygen_enhanced_colour=1

" Sauvegarder et restaurer les folds (fold = cacher le code entre accolades)
" Par défaut lorsque vous cachez un bloc de code, celui-ci n'est pas sauvegardé
autocmd BufWinLeave *.* mkview
autocmd BufWinEnter *.* silent loadview 

" Pour changer entre le .c/.h, on spécifie nos dossiers d'inclusions persos
let g:alternateSearchPath = 'sfr:../source,sfr:../src,sfr:../SRC,sfr:../include,sfr:../inc,sfr:../INC'

" Enregistrer les actions faites dans Vim dans une vidéo ou GIF
let g:replay_record=1