Aller au contenu

vim

Vim est un éditeur de texte extrêmement personnalisable, que ce soit par l’ajout d’extensions, ou par la modification de son fichier de configuration, écrits dans son propre langage d’extension, le Vim script.

Bien qu’il ait de nombreuses fonctionnalités, il conserve un temps de démarrage court (même agrémenté d’extensions) et reste ainsi adapté pour des modifications simples et ponctuelles (de fichiers de configuration par exemple).

Vim se différencie de la plupart des autres éditeurs par son fonctionnement modal, hérité de vi. En effet, il possède trois modes de base : le mode normal ou mode commande (dans lequel vous êtes lorsque Vim démarre), le mode insertion, et le mode ligne de commande.

Installation de la version Improved

Selon les distributions, la version Improved n’est pas forcément installée. Sur une distribution basée sur Debian :

sudo apt install vim

Une fois Vim installé, la commande vi devient un alias qui pointe vers ce dernier.

Les commandes de base

Voici un tableau contenant les commandes principales de Vi :

CommandeDescription
EscQuitter le mode édition et repasser en mode commande
iEntrer en mode insertion
aEntrer en mode insertion après le curseur
AEntrer en mode insertion à la fin de la ligne
DEffacer le reste de la ligne à partir du curseur
CEffacer le reste de la ligne et entrer en mode édition
cwEffacer le mot et entrer en mode édition
uAnnuler la dernière action
:wEnregistrer le fichier
:wqEnregistrer le fichier et quitter
:q!Quitter sans enregistrer les modifications
ddSupprimer/couper la ligne courante
yyCopier la ligne courante
pColler sous la ligne courante
PColler avant la ligne courante
wAller au mot suivant
bAller au mot précédent
$Aller à la fin de la ligne
0Aller au début de la ligne
ggAller au début du fichier
GAller à la fin du fichier
/Suivi d’une saisie d’une chaîne à rechercher
nRechercher l’occurrence suivante
NRechercher l’occurrence précédente
*Rechercher les occurrences d’une chaîne à la position du curseur. * pour suivant

La liste est loin d’être exhaustive, mais vous avez déjà une bonne base pour éditer efficacement.

Fichier .vimrc

Je vous partage un exemple de configuration pour vim. Ce fichier est à créer sous ~/.vim/vimrc.

Important

Ce fichier nécessite la présence de git et curl sur votre machine (pour le téléchargement de vim-plug et des plugins)

~/.vim/vimrc
" ─── vimrc ───────────────────────────────────────────────────────────────

" Compatibilité & syntaxe
set nocompatible                " Désactive la compatibilité Vi
syntax on                       " Active la coloration syntaxique
set ttimeout                    " Délai d'attente sur les codes de touches
set ttimeoutlen=50              " Supprime le délai perceptible sur Échap

" Indentation & tabulations
set autoindent                  " Conserve l'indentation sur une nouvelle ligne
set smarttab                    " Gestion des espaces en début de ligne
set tabstop=2                   " La largeur d'une tabulation est définie sur 2
set shiftwidth=2                " Les retraits auront une largeur de 2
set softtabstop=2               " Nombre de colonnes pour une tabulation
set expandtab                   " Remplace les tab par des espaces
set linebreak                   " Revient à la ligne sans couper les mots
set breakindent                 " Les lignes coupées conservent leur indentation

" Recherche
set hlsearch                    " Affiche en surbrillance les recherches
set incsearch                   " Recherche incrémentielle
set ignorecase                  " Ignorer la casse
set smartcase                   " Faire un appariement intelligent

" Interface & affichage
set background=dark             " Optimise l'affichage pour un terminal sombre
set ruler                       " Affiche la position du curseur
set showcmd                     " Afficher la commande dans la ligne d'état
set showmatch                   " Afficher les parenthèses correspondantes
set wildmenu                    " Menu de complétion pour la ligne de commande

" Fenêtres, buffers & navigation
set hidden                      " Cacher les tampons lorsqu'ils sont abandonnés
set scrolloff=8                 " Garde 8 lignes de contexte visibles autour du curseur
set splitbelow                  " Nouveau split horizontal en dessous
set splitright                  " Nouveau split vertical à droite

" Comportement divers
set mouse=                      " Désactive la souris par défaut
set nobackup                    " Désactive les sauvegardes automatiques
set noswapfile                  " Désactive les fichiers d'échange
set spelllang=en,fr             " Correction orthographique

" Permet l'indentation automatique : gg=G
filetype plugin indent on

" Definition des caractères invisibles
let &listchars = "eol:$,space:\u00B7,tab:\u25B8\ ,trail:\u00B7"

" Changement automatique du curseur en fonction du mode
let &t_SI = "\e[6 q"
let &t_EI = "\e[2 q"
let &t_SR = "\e[4 q"
let &t_te .= "\e[0 q"

" Menu de complétion en popup vertical
if has('patch-8.2.4325') | set wildoptions=pum | endif

" ─── fonctions ───────────────────────────────────────────────────────────

" Ajout des numéros de ligne et gestion de la souris
function! ModeIDE()
  let g:modeIDE_enabled = !get(g:, 'modeIDE_enabled', 0)
  let &mouse = g:modeIDE_enabled ? 'a' : ''
  let l:win = win_getid()
  windo let &l:number = g:modeIDE_enabled
  call win_gotoid(l:win)
  echo 'Mode IDE ' . (g:modeIDE_enabled ? 'activé' : 'désactivé')
endfunction

" Réindentation sans déplacement du curseur
function! ReindentFile()
  let l:view = winsaveview()
  normal! gg=G
  call winrestview(l:view)
endfunction

" ─── mapping ─────────────────────────────────────────────────────────────

" Correcteur orthographique
nnoremap <F1> <Cmd>set spell!<CR>

" Mode IDE
nnoremap <F2> <Cmd>call ModeIDE()<CR>

" Affichage des caractères invisibles
nnoremap <F3> <Cmd>set list!<CR>

" Commentaire
nmap <F4> gcc
xmap <F4> gc

" Indentation automatique
nnoremap <F5> <Cmd>call ReindentFile()<CR>

" Ménage des plugins
nnoremap <F7> <Cmd>PlugClean<CR>

" MAJ des plugins
nnoremap <F8> <Cmd>PlugUpdate<CR>

" Changement de document
nnoremap <S-TAB> <C-w>w

" Désactivation de la surbrillance de la recherche
nnoremap <silent> <CR> <Cmd>nohlsearch<CR><CR>

" ─── plugins ─────────────────────────────────────────────────────────────

" Téléchargement de vim-plug si introuvable
if empty(glob('~/.vim/autoload/plug.vim'))
  silent !curl -fLo ~/.vim/autoload/plug.vim --create-dirs
        \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
endif

" Lance automatiquement PlugInstall
autocmd VimEnter * if len(filter(values(g:plugs), '!isdirectory(v:val.dir)'))
      \| PlugInstall --sync | source $MYVIMRC
      \| endif

" Liste des plugins
call plug#begin('~/.vim/plugged')

Plug 'catppuccin/vim', { 'as': 'catppuccin' }
Plug 'itchyny/lightline.vim'
Plug 'vim-scripts/VimCompletesMe'

" Commentaire (plugin natif à partir de Vim 9.1)
try | packadd! comment | catch | Plug 'tpope/vim-commentary' | endtry

call plug#end()

" ─── autocmds ────────────────────────────────────────────────────────────

augroup vimrc
  autocmd!

  " Mémoriser la dernière position du curseur
  autocmd BufReadPost *
        \ if (line("'\"") > 1) && (line("'\"") <= line("$"))
        \ |   silent exe "silent! normal g'\"zO"
        \ | endif

  " Désactivation des # au retour chariot
  autocmd FileType * setlocal formatoptions-=c formatoptions-=r formatoptions-=o

augroup END

" ─── plugins config ──────────────────────────────────────────────────────

if isdirectory(expand("~/.vim/plugged"))

  " Catppuccin
  silent! colorscheme catppuccin_mocha
  set cursorline
  set termguicolors

  " LightLine
  let g:lightline = {'colorscheme': 'catppuccin_mocha'}
  let g:lightline.separator = { 'left': '', 'right': '' }
  set laststatus=2
  set noshowmode

endif

Modifications

Plugins

  • catppuccin : applique le thème Catppuccin Mocha
  • lightline : améliore la barre de statut
  • VimCompletesMe : gère l’auto-complétion
  • comment : commenter/décommenter rapidement (plugin natif de Vim 9.1+, remplacé par vim-commentary sur les versions antérieures)

Mapping

  • F1 : active/désactive la correction orthographique (anglais/français)
  • F2 : bascule en mode IDE : prise en charge de la souris et affichage des numéros de ligne
  • F3 : affiche les caractères invisibles (espaces et fins de ligne)
  • F4 : commente automatiquement la ligne (s’adapte au type de fichier)
  • F5 : effectue une indentation automatique sur l’intégralité du fichier
  • F7 : supprime les plugins non utilisés
  • F8 : lance une mise à jour des plugins

vim

Dernière modification