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:lsou: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 courantCtrl + ^: 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]ouCtrl + w s: partage horizontalement:vs [fichier]ouCtrl + w v: partage verticalementCtrl + wpuish,j,k,l: passe à la fenêtre voisineCtrl + w w: passe à la fenêtre suivanteCtrl + w q: ferme la fenêtreCtrl + w o: ferme toutes les autresCtrl + wpuisH,J,K,L: déplace la fenêtre dans la dispositionCtrl + w =: égalise les taillesCtrl + w +/-: agrandit / réduit en hauteurCtrl + w >/<: agrandit / réduit en largeurCtrl + 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 ongletgt/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:wqou:xouZZ: enregistre et fermeZQ: 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 + lchangent de fenêtre sans le préfixeCtrl + w.]b/[bparcourent les buffers — natifs en Neovim 0.12, comme]q/[qpour la quickfix et]d/[dpour les diagnostics.<leader>pcherche 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 + fouvre l’explorateur en barre latérale,Ctrl + ten fenêtre flottante. Les deux masquent un raccourci d’origine —Ctrl + fla page suivante,Ctrl + tla pile de tags — assumé, puisqu’aucun des deux n’est utilisé ici.<leader>wenregistre,<Esc><Esc>quitte le mode terminal.
splitright et splitbelow sont actifs. Détails dans
Ma configuration.