Projet

Général

Profil

Tutoriel : se configurer un IDE Vim (VIM's'CODE)

Pour écrire ou éditer du code informatique, programmer un arduino etc... on utilise des IDE (environnement de développement intégré)
Bien des logiciels graphiques très complets existent pour faire ça comme VScode de microsoft ou Atom.

Alors pourquoi pas les utiliser ? Ils ont des inconvénients :

  • Ils sont gourmands en ressources, beaucoup de RAM (~1,3 Go, soit environ 18 000 fois plus que la mission Apollo 11 qui a envoyé les premiers hommes sur la lune :/ )
  • Ils ont assez difficiles à déboguer du fait des grandes couches d'abstraction qui les composent
  • Ils ne fonctionnent pas sans système graphique (à travers ssh, sur un serveur ou une Raspberry Pi)
  • Il est difficile parfois de leur faire faire une chose simple si elle n'a pas été prévue par ses développeurs
  • Ses mises à jour fréquentes imposent parfois des changements dans les habitudes de travail (nouvelles interfaces, nouvelle configuration par défaut, nouveaux chemins etc.)

Alors quelle solution ? Nous vous proposons d'utiliser un des éditeurs de texte historiques en ligne de commande (vi, Vim) pour vous faire votre propre IDE :)

Avantages :
  • Léger, ~15Ko soit 4,6 x moins qu'Apollo 11 et 83000 fois moins que VSCODE!!!
  • Configurable, on peut tout configurer dans des fichiers textes à partir de configurations déjà très partagées et répendues
  • Stabilité, il ne fait qu'évoluer sans rompre la continuité ergonomique (toujours les mêmes commandes et raccourcis depuis 1991 pour vim et 1976 pour vi :) de même pour les configurations qui restent valides depuis le début...)
  • Utilisable à travers SSH sur des serveurs ou des ordis très légers (Raspberry Pi, etc.)
  • Rock solide, les plantages doivent exister, mais je n'en ai jamais même entendu parler

Ici, nous vous donnons un exemple de configuration de votre IDE Vim pour Debian.
Si vous ne connaissez pas Vim, vous pouvez commencer par là https://www.youtube.com/watch?v=m4WFcLX7Xc8

Sommaire

Début d'installation

Pour ce commencement, nous avons besoin d'avoir quelques connaissances de base sur vim :
  • si vous avez fait n'importe quoi, "u" sert à revenir en arrière
  • si vous voulez quitter et sauvegarder ":wq"
  • "echap" si vous êtes perdus puis "i"
  • "i" pour éditer

Nous aurons aussi de besoin d'un petit outil qui se nomme elinks :

sudo apt install elinks

/!\ IMPORTANT

Le copier-coller est différent dans un terminal ou dans vim, il faut utiliser ctrl-shift-c et ctrl-shift-v

Gestionnaire de Plugins

Vundle

Pour faciliter l'ajout de plugin à l'intérieur de Vim, j'ai choisi d'utiliser Vundle, celui-ci n'utilise pas neovim ou d'autre chose qui s'en rapproche.

Pour installer ce dernier, il faut d'abord avoir créé un dossier Vim :

mkdir -p ~/.vim/bundle

Ensuite, il faut cloner le dépôt git de vundle dans le dossier bundle :
 git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim

Puis, il faut créer un fichier vimrc qui va nous servir pour ajouter tous les plugins :
vim ~/.vimrc

Pour les utilisateurs aguerris, la configuration complète est à la fin de la documentation, si
ce n'est pas le cas, continuez la lecture.

Une fois ce fichier créé, on va l'éditer pour activer vundle : copiez ce texte dans votre fichier ~/.vimrc

set nocompatible              " be iMproved, required
filetype off                  " required

set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
Plugin 'VundleVim/Vundle.vim'

"Plugin exemple
Plugin 'preservim/nerdtree'

call vundle#end()            " required
filetype plugin indent on    " required

On sauvegarde le fichier et on quitte le fichier :

:wq

Puis, on relance un Vim et on tape dans la commande Vim :

:PluginInstall

Pour quitter la page qui s'ouvre avec le plugin et quitter Vim, il suffit juste de taper :

q
:q

Ajout des plugins

NERTree

Pour le premier plugin, on va installer un plugin qui montre l'arborescence de nos fichiers, pour se faire, il faut éditer le fichier vimrc et ajouter une ligne :

vim ~/.vimrc

"Ligne a ajouté en dessous de Plugin exemple
Plugin 'preservim/nerdtree'

Puis ajouter à la fin du fichier :

"Raccourcis NERDTree
nnoremap <F3> :NERTreeToggle<CR>

"F3" étant le raccourci que j'ai choisi, mais pouvant être totalement changé après.

On sauvegarde le fichier et on quitte le fichier :

:wq

Puis on on relance un Vim et on tape dans la commande Vim :

:PluginInstall

UndoTree

Pour ce plugin, on va installer un plugin qui montre l'historique de nos fichiers, pour se faire, il faut éditer le fichier vimrc et ajoute une ligne :

vim ~/.vimrc

"Ligne a ajouté en dessous de Plugin exemple
Plugin 'mbbill/undotree'

Puis ajouter à la fin du fichier :

"Raccourcis UndoTree
nnoremap <F5> :UndotreeToggle<CR>

F5 étant le raccourci que j'ai choisi, mais pouvant être totalement changé après.

On sauvegarde le fichier et on quitte le fichier :

:wq

Puis on relance un Vim et on tape dans la commande Vim :

:PluginInstall

Fzf

Pour ce plugin, on va installer un plugin "filtre", pour se faire, il faut éditer le fichier vimrc et ajoute une ligne :

vim ~/.vimrc

"Ligne a ajouté en dessous de Plugin exemple
Plugin 'junegunn/fzf.vim'

On sauvegarde le fichier et on quitte le fichier :

:wq

Puis on relance un Vim et on tape dans la commande Vim :

:PluginInstall

NumberToggle

Pour ce plugin, on va installer un plugin qui affiche une numérotation sur le côté gauche, pour se faire, il faut éditer le fichier vimrc et ajoute une ligne :

vim ~/.vimrc

"Ligne a ajouté en dessous de Plugin exemple
Plugin 'jeeffkreeftmeijer/vim-numbertoggle'

Puis ajouter à la fin du fichier :

"Numérotation avec NumberToggle
set number relativenumber

On sauvegarde le fichier et on quitte le fichier :

:wq

Puis on relance un Vim et on tape dans la commande Vim :

:PluginInstall

Polyglot

Pour cd plugin, on va installer un plugin avec un paquet de langages, pour se faire, il faut éditer le fichier vimrc et ajoute une ligne :

vim ~/.vimrc

"Ligne a ajouté en dessous de Plugin exemple
Plugin 'sheerun/vim-polyglot'

Puis ajouter à la fin du fichier :

"Language ajouté
let g:polyglot_enabled = ['sh', 'git', 'blade']

Ce qui est entre crochet sont les langages qu'on lui demande de charger donc, les shells, git et le PHP, les différents langages sont disponibles sur la page vimawesome du plugin.

On sauvegarde le fichier et on quitte le fichier :

:wq

Puis on relance un Vim et on tape dans la commande Vim :

:PluginInstall

DevNotes

Pour ce plugin, on va installer un plugin qui nous permet d'avoir une note en plus du Vim lancé, pour se faire, il faut éditer le fichier vimrc et ajoute une ligne :

vim ~/.vimrc

"Ligne a ajouté en dessous de Plugin exemple
Plugin 'jodosha/vim-devnotes'

Mettre ensuite à la fin du fichier :

nmap <F4> :call DevNotes()<CR>

F4 étant le raccourci que j'ai choisi, mais pouvant être totalement changé après.

On sauvegarde le fichier et on quitte le fichier :

:wq

Puis on relance un Vim et on tape dans la commande Vim :

:PluginInstall

Clang

Pour ce plugin, on va installer un plugin qui aide pour le C/C++, pour se faire, il faut éditer le fichier vimrc et ajoute une ligne :

vim ~/.vimrc

"Ligne a ajouté en dessous de Plugin exemple
Plugin 'rip-rip/clang_complete'

On sauvegarde le fichier et on quitte le fichier :

:wq

Puis on relance un Vim et on tape dans la commande Vim :

:PluginInstall

SuperTab

Pour ce plugin, on va installer un plugin qui faut l'autocomplétion, pour se faire, il faut éditer le fichier vimrc et ajoute une ligne :

vim ~/.vimrc

"Ligne a ajouté en dessous de Plugin exemple
Plugin 'ervandew/supertab'

On sauvegarde le fichier et on quitte le fichier :

:wq

Puis on relance un Vim et on tape dans la commande Vim :

:PluginInstall

OneDark

Pour ce plugin, on va installer un plugin thème pour rendre le tout plus joli, pour se faire, il faut éditer le fichier vimrc et ajoute une ligne :

vim ~/.vimrc

"Ligne a ajouté en dessous de Plugin exemple
Plugin 'joshdick/onedark.vim'

Puis ajouter à la fin du fichier :

"Theme OneDark
colorscheme onedark

On sauvegarde le fichier et on quitte le fichier :

:wq

Puis on relance un Vim et on tape dans la commande Vim :

:PluginInstall

ColorSchemes

Pour ce plugin, on va installer un plugin qui nous permet d'avoir plus thème si le premier nous ne vous convient pas, pour se faire, il faut éditer le fichier vimrc et ajoute une ligne :

vim ~/.vimrc

"Ligne a ajouté en dessous de Plugin exemple
Plugin 'flazz/vim-colorschemes'

Puis ajouter à la fin du fichier :

"Theme supplémentaire pour vim
colorscheme space-vim-dark 
Différents thèmes Vim disponible avec ce plugin (échantillons des thèmes) :

On sauvegarde le fichier et on quitte le fichier :

:wq

Puis on relance un Vim et on tape dans la commande Vim :

:PluginInstall

Alias

Enfin, pour avoir une belle commande à écrire, on va faire des alias qui nous permettrons d'avoir une ouverture de Vim avec à gauche l'arborescence des fichiers où l'on se situe, en bas un terminal et sur le reste la partie Vim texte, pour coder.

Pour cela, il faut donc modifier le fichier bashrc, zshrc... :

vim ~/.bashrc 
vim ~/.zshrc

Il nous faut donc écrire dans le fichier notre nouvel alias qui sera vimscode :

alias vimscode="~/.vim/vimscode.sh" 

Nous aurons donc deux alias :

vimscode -a #pour Arduino 
vimscode -e #pour espressif (esp32)

Pour que cela marche correctement, il faut aussi créer un fichier dans le dossier .vim :

vim ~/.vim/vimscode.sh

Et il faut écrire dedans les alias suivants :

#!/bin/bash

if [ "$1" = '-a' ] || [ "$1" = '-arduino' ] ; then
    vim -p $2 ~/.vim/help/aide-arduino
fi

if [ "$1" = '-e' ] || [ "$1" = '-esp' ] ; then
    vim -p $2 ~/.vim/help/aide-esp32
fi

Paramètre Vim

On peut aussi ajouter quelques paramètres de Vim qui sont par défaut pour étoffer notre IDE tel que (c'est une infime partie de tous les paramètres de Vim) :

"Paramètre obligatoire
syntax on                                 " Mise en avant de la syntax avec de la couleur

"Paramètre recommandé
set mouse=a                               " Affiche la souris dans Vim mais par contre perds le copié/collé depuis vim vers un navigateur
set wildmenu                              " Meilleure visualisation de l'autocomplétion dans la commande Vim
set cursorline                            " Met en surbrillance la ligne sur laquelle est le curseur
highlight CursorLine guibg=#001000        " Définit la couleur
nmap <F6> :term<CR>                       " Raccourcis pour ouvrir un terminale dans Vim
set hlsearch                              " Met en surbrillance les éléments cherchés
nmap <F7> :tabnew<CR>                     " ouvre un nouvel onglet dans vim, pour ouvrir un fichier :edit "nom du ficher" 
nmap <F8> :tabnext<CR>                    " passe à l'onglet suivant

"Paramètre optionnel
set smartindent                           " Une indentation intelligente
set shiftround                            " Permet d'indenté avec plusieurs espace si on lui rentre en paramètre
nmap œ :PluginList<CR>                    " Raccourci plugin installer
vmap g :<C-U>!firefox "https://duckduckgo.com/?q=<cword>&t=newext&atb=v372-6&ia=web" >& /dev/null <CR><CR>     " Raccourci vers une recherche duckduckgo, il faut etre en mode visuel et sélection le mot souhaité
nmap <F9> : !firefox "https://agreugr.eu/" >& /dev/null <CR><CR>                                               " Raccourci vers une aide pour vim, appuié sur "F9" 

Si vous avez "mouse=a" et que l'option "clipboard" n'est pas inclus dans votre Vim, installer le paquet vim-gtk et ensuite, vous pourrez copier AVEC Vim un texte sélectionné et le coller avec "Ctrl-v" vers un nav
gateur internet.
Pour savoir si vous avez l'option :

vim --version | grep clipboard

Truc à connaitre

Raccourcis VimsCode (qui sont changeables) :

<œ> : Affiche tous les plugins installés
<F2> : Invoque une note
<F3> : Invoque l'arborescence
<F4> : Invoque l'historique des modifications
<F5> : Invoque un terminal en bas
<F6> : Permet de copier/coller et scroller dans le terminal invoqué
<F7> : Invoque une aide au terminal et Vim
<F8> : Créer un nouvel onglet dans Vim
<F9> : Permet de se déplacer d'onglet en onglet

Nous pouvons aussi changer la hauteur des fenêtres ouverte avec la souris.

Configuration IDE Vim complète

Après avoir installé Vundle, vous pouvez copier/coller la configuration ci-dessous sans problème, une erreur sera détectée, mais cela est normal, le fichier utilise un thème d'un plugin qui n'est pas encore installé.
Si une erreur est détectée lors de l'installation des plugins, il suffira juste de refaire la même manip et ensuite ouvrir un Vim et le tour est joué, vous avez votre conf IDE Vim.

set nocompatible              " be iMproved, required
filetype off                  " required

set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
Plugin 'VundleVim/Vundle.vim'

"Plugins installés depuis Vim Awesome
Plugin 'preservim/nerdtree'
Plugin 'junegunn/fzf.vim'
Plugin 'jeffkreeftmeijer/vim-numbertoggle'
Plugin 'sheerun/vim-polyglot'
Plugin 'rip-rip/clang_complete'
Plugin 'jodosha/vim-devnotes'
Plugin 'joshdick/onedark.vim'
Plugin 'mbbill/undotree'
Plugin 'flazz/vim-colorschemes'
Plugin 'ervandew/supertab'

call vundle#end()            " required
filetype plugin indent on    " required

"Parametre de vim
syntax on
set smartindent
set shiftround
set wildmenu
set cursorline
set hlsearch
set mouse=a
set termwinsize=10x150    " Permet de réguler la taille du terminal

"Numérotation avec numbertoggle
set number relativenumber

"Theme vim
"colorscheme onedark  "autre theme vim
colorscheme space-vim-dark

"Language vim
let g:polyglot_enabled = ['sh', 'git', 'blade','scss','html5']

"Raccourcis Note
nmap <F2> :call DevNotes()<CR>              

"Raccourcis NerdTree
nnoremap <F3> :NERDTreeFocus<CR>            
nnoremap <F3> :NERDTreeToggle<CR>           

"Raccourcis historique
nnoremap <F4> :UndotreeToggle<CR>          

"Raccourcis terminal
nnoremap <F5> :bot term<CR>
tnoremap <F6> <c-w>N

"Raccourci vers une recherche duckduckgo
vmap g :<C-U> !firefox "https://duckduckgo.com/?q=<cword>&t=newext&atb=v372-6&ia=web" >& /dev/null <CR><CR>  

"Raccourci vers aide vim
nmap <F7> :!elinks https://agreugr.eu<CR>    

"Raccourci onglet
nmap <F8> :tabnew<CR>                        
nmap <F9> :tabnext<CR>                       

"Raccourci plugin installer
nmap œ :PluginList<CR>                       

"Raccourci au lancement de vim

au VimEnter *.cpp :NERDTreeFocus            
au VimEnter *.cpp :bot term

au VimEnter *.ino :NERDTreeFocus            
au VimEnter *.ino :bot term