{{tag>app vim buffer tampon}}
====== Buffers ======
Les buffers (ou tampons) sont des espaces mémoires distincts utilisés par vim pour contenir le texte en cours d’édition. Les fenêtres, les onglets sont des vues associées à un buffer. Un même buffer peut être présenté par différents fenêtres/onglets.
L'utilisateur dispose de:
* 26 tampons (buffers) identifiés par les lettres de l'alphabet
* 9 tampons spéciaux identifiés par les chiffres 1-9 utilisés par les commandes édition/suppression.
Si on exécute vim en fournissant plusieurs noms de fichiers en argument, un tampon est créé pour chaque fichier à éditer.
vim f1.txt f2.txt f3.txt
===== Lister les buffers =====
En mode commande, '':ls'' permet de lister les tampons existants et les informations associées:
:ls
1 %a "vehicule.py" ligne 24
Dans cet exemple, un seul buffer existe (index 1), il est rempli par le contenu du fichier vehicule.py, la position du curseur est indiquée ( ligne 24).
* Les caractères '%a' indiquent que le buffer est affiché par la fenêtre courante ;
* Le caractère '#' désigne le buffer précédemment affiché ;
* Un caractère '+' indiquerai que le buffer a été modifié et pas encore sauvegardé ;
* Un caractère '-' indiquerai que le buffer n'est plus modifiable (par exemple après execution de ''%%:set nomodifiable%%''
Ne pas confondre avec **%%:!ls%%** qui exécute la commande ls dans le shell et affiche le résultat sous vim.
===== Créer un buffer =====
Plusieurs commandes vont aboutir à la création d'un nouveau buffer:
* édition d'un fichier existant ou nouveau fichier
*
:e test.csv
La commande suivante permet d’éditer un fichier nommé test.csv. Ce fichier n'existant pas, un buffer vide est créé et affiché par la fenêtre courante:
:ls
===== Changer de buffer =====
Pour que la fenêtre active affiche un autre buffer, on peut utiliser les commandes:
* **:bn** ou **:bnext**(buffer next) pour afficher le buffer suivant
* **:bp** ou **:bprev**(buffer previous) pour le buffer précédent.
* **:b x** ou x est le numéro ou une chaîne de caractères identifiant le buffer à afficher.
:vertical
===== Etat d'un buffer =====
l'aide '':help :ls'' détaille exhaustivement les caractères décrivant l'état des buffers:
^ **%** | Le buffer affiché par la fenêtre courante. |
^ **#** | Le buffer récupéré par la commande '':e #'' |
===== Supprimer un buffer =====
La commande **:bd** ou **:bdelete** permet de supprimer un buffer.
===== Création de buffers =====
En plus des buffers par défaut utiliser par les commandes de copie, suppression par exemple, l'utilisateur peut créer des buffers nommés, par exemple pour copier le contenu de la ligne sous le curseur dans un buffer nommé **x** on tapera en mode normal:
"xyy
Ici on supprime les 3 lignes sous le curseur et on les place dans le buffer t:
"t3dd
On peut écrire le contenu d'un buffer dans un fichier
===== Références =====
* http://vimcasts.org/episodes/working-with-buffers/
* http://www.ledman.ch/eti_linux/08vi.html
* http://www.tuteurs.ens.fr/unix/editeurs/vim.html
* http://vim.wikia.com/wiki/Buffers
* https://linuxhandbook.com/vim-buffers/