Buffers, fenêtres et onglets

Palier3 Le moment où l’on cesse d’éditer un fichier pour travailler dans un dépôt. Trois notions distinctes, souvent confondues avec les onglets des autres éditeurs :

  • un buffer est un fichier chargé en mémoire ;
  • une fenêtre est une vue ouverte sur un buffer — plusieurs fenêtres peuvent montrer le même buffer, à deux endroits différents ;
  • un onglet est une disposition de fenêtres, pas un fichier.

Un buffer peut donc être ouvert sans être affiché nulle part, ce qui explique que fermer une fenêtre ne ferme pas le fichier. C’est la source de la plupart des incompréhensions à ce palier : la liste des fichiers ouverts n’est pas ce qui est visible à l’écran.

Buffers

  • :e {fichier} : ouvre un fichier dans un nouveau buffer
  • :ls ou :buffers : liste les buffers chargés
  • :b {n} : bascule sur le buffer n
  • :b {motif} : bascule sur le buffer dont le nom correspond
  • :bn / :bp : buffer suivant / précédent
  • :bd : décharge le buffer courant
  • Ctrl + ^ : bascule sur le buffer précédemment édité

Les indicateurs de :ls se lisent : % pour le buffer courant, # pour l’alternatif, a pour actif (affiché), h pour caché, + pour modifié.

Ctrl + ^ mérite d’être appris tôt : les deux tiers des changements de fichier consistent à faire l’aller-retour entre deux fichiers, et une seule touche suffit.

Fenêtres

  • :sp [fichier] ou Ctrl + w s : partage horizontalement
  • :vs [fichier] ou Ctrl + w v : partage verticalement
  • Ctrl + w puis h, j, k, l : passe à la fenêtre voisine
  • Ctrl + w w : passe à la fenêtre suivante
  • Ctrl + w q : ferme la fenêtre
  • Ctrl + w o : ferme toutes les autres
  • Ctrl + w puis H, J, K, L : déplace la fenêtre dans la disposition
  • Ctrl + w = : égalise les tailles
  • Ctrl + w + / - : agrandit / réduit en hauteur
  • Ctrl + w > / < : agrandit / réduit en largeur
  • Ctrl + w T : extrait la fenêtre dans un nouvel onglet

Les options splitright et splitbelow méritent d’être activées : sans elles, un partage vertical s’ouvre à gauche, ce que personne n’attend.

Onglets

  • :tabnew [fichier] : nouvel onglet
  • gt / gT : onglet suivant / précédent
  • {n}gt : onglet n
  • :tabclose : ferme l’onglet
  • :tabonly : ferme tous les autres
  • :tabmove {n} : le déplace

Comme un onglet contient une disposition de fenêtres, il sert plutôt à isoler des contextes de travail — un onglet par tâche — qu’à lister des fichiers. Utiliser les onglets comme dans VSCode est le contresens le plus fréquent : c’est le rôle des buffers.

Enregistrer et quitter

  • :w : enregistre, :w {fichier} sous un autre nom
  • :wa : enregistre tous les buffers modifiés
  • :q : ferme la fenêtre, :q! en abandonnant les modifications
  • :wq ou :x ou ZZ : enregistre et ferme
  • ZQ : ferme sans enregistrer
  • :qa / :wqa : quitte Neovim entièrement

:x n’écrit le fichier que s’il a été modifié, là où :wq l’écrit toujours et met donc à jour sa date de modification — ce qui peut relancer un outil de surveillance pour rien.

Terminal

:terminal ouvre un shell dans un buffer. Le clavier y est capté par le shell : Ctrl + \ puis Ctrl + n rend la main au mode normal, pour faire défiler ou copier la sortie comme dans n’importe quel buffer.

C’est une illustration directe du principe « tout est un buffer » : la sortie d’une commande se cherche avec / et se copie avec y, sans outil dédié.

Explorateur de fichiers

Neovim embarque netrw : :Ex l’ouvre sur le répertoire du fichier courant, :Sex et :Vex dans un partage. On y navigue avec Entrée, - remonte d’un niveau, % crée un fichier, d un répertoire, D supprime.

C’est fonctionnel mais austère — la plupart des configurations le remplacent, et surtout le complètent par une recherche floue, qui rend l’arborescence beaucoup moins nécessaire qu’on ne le croit. Voir Plugins.

Dans ma config
  • Ctrl + h / Ctrl + j / Ctrl + k / Ctrl + l changent de fenêtre sans le préfixe Ctrl + w.
  • ]b / [b parcourent les buffers — natifs en Neovim 0.12, comme ]q / [q pour la quickfix et ]d / [d pour les diagnostics.
  • <leader>p cherche un fichier et <leader><space> parmi les buffers ouverts, par recherche floue. C’est ce qui remplace la navigation dans une arborescence au quotidien.
  • Ctrl + f ouvre l’explorateur en barre latérale, Ctrl + t en fenêtre flottante. Les deux masquent un raccourci d’origine — Ctrl + f la page suivante, Ctrl + t la pile de tags — assumé, puisqu’aucun des deux n’est utilisé ici.
  • <leader>w enregistre, <Esc><Esc> quitte le mode terminal.

splitright et splitbelow sont actifs. Détails dans Ma configuration.