# Neovim : les registres

Mercredi 21 septembre 2022 ≈ 2 min
Neovim, Outil

Les registres sont des espaces mémoires internes à Neovim (mais aussi Vim évidemment) où l'on peut copier du texte. Le mécanisme est le même que le presse-papier de l'OS, mis à part que l'on n'est pas limité à une seule copie.

## Comment cela fonctionne ?

Pour accéder à un registre, il faut utiliser le caractère `".`. Par exemple, pour accéder au registre r, il faut taper la séquence `"r`. Maintenant, il ne reste plus qu'à appliquer une opération à ce registre. Si l'on veut copier un texte préalablement sélectionné dans notre registre r : `"ry`. Et pour coller ce dernier : `"rp`. La commande `:reg` permet de voir le contenu de tous les registres.

## Le registre par défaut

Lorsque aucun registre n'est spécifié, sur les commandes de suppression (oui, quand on supprime du texte, il est également copié) ou de copie, le texte est placé dans le registre `""`. En fait, une simple copie y est un raccourci de `""y`. Idem pour p.

## Les registres numérotés

Nous sommes tous tombés dans le piège de copier un texte, d'en supprimer un autre, et en voulant copier le premier, il a disparu. En fait, il n'a disparu que du registre par défaut, mais il est toujours présent dans le registre `"0`. `"0` aura toujours le dernier texte copié. `"1` à `"9` contiennent les neuf derniers textes supprimés (via la commande d), `"1` état le plus récent.

Une autre possibilité pour contrer ce problème est d'utiliser le Black hole register `"_`. La séquence `"_d` supprime le texte sans le copier dans un registre.

## Les registres en lecture seule

`":` est la dernière commande exécutée. À mon sens, ce registre est peu utile. `"%` est le chemin du fichier courant, mais relatif au répertoire dans lequel Neovim a été ouvert. Pour avoir le chemin complet du fichier, j'utilise la commande suivante que j'ai mappée : `:lua vim.fn.setreg("+",vim.fn.system("pwd"):gsub("\n$","").."/"..vim.fn.getreg("%")).g('%'))` `"#` est le dernier fichier éditer. Avec les plugins permettant une navigation fluide, ce registre n'a que peu d'intérêt `".` est le dernier texte inséré (via le mode insertion).