Pluma, l’éditeur de fichiers de l’environnement Mate-Desktop

PLUMA est l’éditeur de texte de l’environnement de Bureau Mate-Desktop et comme ce dernier, est un fork de GNOME2 (dont l’éditeur gedit a perdu certaines fonctionnalités). Disposant de la coloration syntaxique, Pluma est indiqué pour l’édition de scripts et de textes formatés. Il est de plus facile d’installer des scripts permettant un traitement automatique, comme différentes sortes de tri de paragraphe.

Cette page suit les recommandations de 1990 pour une orthographe réformée.

2025.12.17 – Le texte de cette page a été extrait de celle présentant Mate-Desktop pour être augmenté et restructuré.

1. Éditer

1.1 Annuler et recommencer Nv
1.2 Couper, copier, coller Nv
1.3 Effacer Nv
1.4 Plugins optionnels Nv
1.5 Modifier la casse Nv
1.6 Préférences et plugins

2. Affichage

2.1 Fenêtre et écran Nv
2.2 Coloration syntaxique

3. Recherche

3.1 Chercher une chaine de caractères
3.2 Remplacement de chaines

4. Outils

4.1 Vérification orthographique
4.2 Statistiques du document Nv
4.3 External Tools Nv
4.4 Manage External Tools Nv
4.5 Exemples d’outils externes Nv

5. Annexes

5.1 Encodage des caractères
5.2 Expressions régulières
5.3 Quelques tris spéciaux Nv
5.4 À propos du grec ancien Nv
5.5 Raccourcis du clavier
5.6 Pluma en super-utilisateur

Avertissements – Rév. 2025.12

Comme tout éditeur de simples textes, Pluma ne dispose pas de gras ou d’italiques, d’inclusions d’images, de marges ou de tableaux comme dans LibreOffice.

Le codage optimal des caractères est UTF-8. Il est possible d’en utiliser d’autres comme iso-8859-15 ou CP1252 (Windows), mais pluma refuse de sauvegarder un texte dans un de ces jeux s’il contient un seul caractère qui ne fait pas partie de la liste des 192 ou 224 reconnus par ces modes. Or l’UTF-8 est capable de coder le jeu de caractère Unicode, («uni» pour universel), et un texte écrit en français n’est en moyenne que 6% plus lourd s’il est codé en UTF-8. Vous trouverez dans l’annexe une réponse à certains problèmes d’encodage.

pluma n’est pas fait pour les très gros fichiers : le chargement d’un fichier de quelques Mo est assez long et certains tronçons pouvaient s’afficher en noir sur fond noir (cela semble s’être arrangé avec la version 1.26 disponible sur Debian 13 Trixie). La coloration syntaxique (menu Affichage → Mode de coloration) d’un script ou la vérification orthographique automatique (menu Outils) diminue également la réactivité de l’application si le fichier est volumineux.

De plus, les textes de caractères sans octet de fin de ligne (\n, x0A ou chr(10) pour UNIX) sont mal gérés : le chargement d’un fichier d’un Mégaoctet sans retour à la ligne peut prendre quelques dizaines de secondes, un rechercher/remplacer plusieurs minutes… (quasi instantané avec Vim, un script python ou avec le logiciel d’édition de fichiers binaires ghex). Il est possible de fermer la fenêtre Chercher/Remplacer, mais cela fait quitter pluma et les fichiers de textes dans les autres onglets. Songez à sauvegarder votre fichier avant chaque chercher/remplacer dans ces conditions extrêmes.

Enfin, les remplacements avec des expressions régulières sur des gros textes (plusieurs Mo) consomment énormément de ressources et de mémoire, qui n’est libérée que lorsqu’on quitte l’application, obligeant parfois à opérer en plusieurs cycles sauvegarder/quitter/relancer. Lorsque la mémoire RAM et la mémoire SWAP sont saturées, le système se fige. Même 8Go ne sont pas toujours de trop pour chacune de ces mémoires. De la même manière, Python et Vim travaillent beaucoup plus vite. Heureusement, Pluma admet l’utilisation de scripts bash ou python (intégrés pour contourner ces manques.

Certaines options communes aux éditeurs de code, comme le pliage de code, n’existent pas. Cela pourrait faire l’objet d’un greffon, qui n’existe pas, dans la version 1.26 en tout cas.

En conclusion, pour un travail sur de gros textes, surtout formatés (HTML, XML…), il peut être utile d’investir quelques heures pour apprendre les éditeurs Vim ou Emacs. Si l’on connait un langage de script, comme bash ou python, l’écriture d’un outil externe, avec certaines limites, peuvent arranger les choses.

Malgré ces restrictions, pluma est une application souple utile pour l’écriture de pages HTML ou de scripts python (en association avec la console) ou PHP, ou pour nettoyer et formater des textes.

Dernière limitation : le paquet pluma-doc n’est utile qu’à la programmation des greffons.

1. Éditer

1.1 Annuler et recommencer – Nv 2025.12

[ctrl z] est la touche qui permet de récupérer de bien des catastrophes : elle annule la dernière édition, mais aussi l’avant-dernière, et celle d’avant… même si vous avez entre temps enregistré les modifications, à condition de ne pas avoir fermé le fichier.

[ctrl maj z] permet de revenir sur l’annulation, et la précédente, etc.

1.2 Couper, copier, coller

Pour couper-coller ou copier-coller un texte, il faut d’abord le sélectionner, soit avec un clic-gauche maintenu et un déplacement de la souris, soit avec un appui maintenu sur le clic gauche de la souris et une touche majuscule et un déplacement avec touches de déplacement : [↑] [↓] [←] [→] [Page Up] ou [Page Dn]. Ce qui est coupé disparait de l’écran mais est conservé dans une mémoire-tampon.

Éditer → Couper ou [ctrl x] (ciseaux) n’est possible que si une partie de texte a été définie soit à la souris. Ce qui est coupé disparait de l’écran mais est conservé dans une mémoire-tampon.

Éditer → Copier ou [ctrl c] ne fonctionne également qu’avec une partie de texte sélectionnée, mais ce qui est copié dans la mémoire-tampon reste sur l’écran. Note : toute partie définie et surlignée est fragile, toute touche frappée (sauf les touches mortes comme circonflexe ou Maj) la fait disparaitre.

Éditer → Coller insère la mémoire-tampon issue d’une des deux opérations précédentes à l’endroit du curseur. Cette mémoire n’est pas libérée, il est possible de coller plusieurs fois le même texte à des endroits différents.

[ctrl a] sélectionne l’entièreté du texte, ce qui permet éventuellement de tout transférer d’un texte à un autre, voire d’un éditeur à un autre (en utilisant éventuellement (le clic-droit pour un éditeur en mode texte comme nano ou Vim).

1.3 Effacer – Nv 2025.12

Il existe beaucoup de façon d’effacer un caractère ou une portion de texte :

[Del] ou [Eff] efface le caractère courant et tire ce qui suit à sa place
[ctrl Del] efface la fin du mot à partir de la position du curseur
[ctrl maj Del] efface la fin de la ligne à partir de la position du curseur

[←] ou [BackSp] efface le caractère précédent et tire ce qui suit à sa place [ctrl ←] efface le début du mot avant la position du curseur
[ctrl maj ←] efface toute la partie de la ligne avant la position du curseur

Pour effacer une partie de texte, on peut la sélectionner à la souris et cliquer sur Éditer → Effacer, frapper [Del], [BackSp] ou n’importe quel caractère qui remplacera la partie sélectionnée.

[ctrl d] efface la ligne/paragraphe.

Il est possible d’annuler tout effacement avec [ctrl z]. Pour annuler cette annulation, [ctrl maj z]

Pour effacer une grande partie d’un très gros fichier :

Pour effacer tout le contenu du fichier sans effacer le fichier lui-même, [ctrl a] [←] ou [ctrl a] [Del].

1.4 Options

Plusieurs greffons (plugins) sont disponibles dans le menu Éditer s’il ont été validés dans l’onglet Greffons de l’item Préférences.

Trier les paragraphes

Il est possible de trier les paragraphes du fichier :

Il est possible de ne trier qu’un bloc de lignes contigües.

Insérer la date et/ou heure

Permet le choix entre une trentaine de formats pour la date, l’heure, le jour de la semaine, le fuseau horaire, ou en composition.

Comment code

Seulement si le paquet pluma-plugin-codecomment est installé et validé dans Éditer → Préférence → Greffons. Dans un fichier sauvegardé (et dont Pluma peut reconnaitre la nature), passe en commentaire la ligne sous le curseur ou le bloc de ligne sélectionné ou les lignes sélectionnées : # en début de ligne pour Python, <-- et --> en fin de ligne pour HTML ou XML, etc. /* */ pour les C-like. Éditer → Comment Code [ctrl m] pour commenter et Éditer → Uncomment Code [ctrl maj m] pour décommenter.

Toggle bookmark (signets)

Seulement si le paquet pluma-plugin-bookmarks est installé et validé dns Éditer → Préférence → Greffons. Éditer → Toggle Bookmark modifie la couleur du fond de la ligne sous le curseur, Éditer → Go To Previous Bookmark et Éditer → Go To Next Bookmark se déplace parmi les lignes taguées. Les signets ne résistent pas à la fermeture du fichier.

1.5 Modifier la casse

Uniquement applicable à une sélection, cette fonction permet de tout passer en majuscule, et minuscule, d’inverser la casse (min → maj et maj → min), ou en casse de titre : une capitale à chaque début de mot.

Sans passer par Éditer → Modifier la casse, une sélection de caractères suivie de [ctrl u] convertit tout en majuscules, ou en minuscules si suivi de [ctrl l].

Sans rien sélectionner, [ctrl u] convertit en majuscule le caractère à la position du curseur et passe à la suivante ; [ctrl l] convertit de même en minuscule.

1.6 Préférences et greffons

Éditer → Préférences ouvre une boite avec quatre onglets :

Affichage

Éditeur

Police et couleurs

Greffons (plugins)

Certaines fonctionnalités (tri, vérificateur orthographique, statistiques du document…) proviennent (à confirmer) du paquet pluma-plugins-common (généralement installé avec Pluma). Elles doivent d’abord être validées dans cet onglet ; certains de ces greffons et sont paramétrables avec le bouton [Préférence].

Greffons supplémentaires Nv 2025.12

D’autres plugins peuvent être installés (Debian 13 Trixies : pluma-pluginsest le métapaquet qui les installe tous d’un coup, ainsi que gir1.2), sans oublier de les valider dans Éditer → Préférences → Greffons :

pluma-plugins-common semble un paquet nécessaire aux plugins listés ci-dessous :

pluma-plugin-bookmarkssignets (lignes taguées)

pluma-plugin-bracketcompletion complète automatiquement la parenthèse complémentaire après le curseur (), [] {}, <> et les guillemets '' et "". Cela aurait été un plus de pouvoir sélectionner les caractères se complétant et de prévoir les guillemets typographiques «» ou “”.

pluma-plugin-codecomment permet de commenter une ligne ou un bloc de lignes

pluma-plugin-quickhighlight mise en évidence immédiate des chaines de caractères identiques à celle sélectionnée

pluma-plugin-smartspaces – «Forget you’re not using tabulations» – Si c’est pour transformer les tabulations en espaces, Éditer → Préférences → Éditeur → Tabulations le permet déjà

pluma-plugin-sourcecodebrowser (possibilité de paramétrage) – sert (probablement) à visualiser les liens d’un fichier C («The sourcecodebrowser plugin requires ctags at runtime»)

pluma-plugin-synctex synchronise le code source d’un fichier LaTeX et le PDF produit (non testé ; «The synctex plugin requires dbus-python» ou plutôt python3-dbus?)

pluma-plugin-terminal ajoute la possibilité d’appeler la console mate-terminal dans le panneau inférieur ([ctrl F9] ; «The terminal plugin requires the VTE», paquet libvte-91)

pluma-plugin-wordcompletion fait apparaitre une liste de mots permettant l’autocomplétion. Le dictionnaire à partir d’un dictionnaire (pas nécessairement celui choisi pour la correction?)

2. Afficher

2.1 Fenêtre : panneaux, barres et plein écran – Nv 2025.12

Le menu commence par cinq cases à cocher :

Barre d’outils : espace situé au dessus de la fenêtre éditable, qui affiche les icones cliquables habituels : nouveau document [ctrl n], ouvrir un document existant [ctrl o], imprimer [ctrl p], annuler [ctrl z], restaurer [ctrl maj z], couper [ctrl x], copier [ctrl c], coller [ctrl v], chercher [ctrl f], remplacer [ctrl h]. On gagne une ligne si on peut se passer de ces icones en connaissant ces raccourcis ; ces fonctions se retrouvent de toute façon dans les menus.

Barre d’état espace situé sous la fenêtre éditable, comprenant le type de ficher connu par Pluma (texte brut, HTML…) ; la largeur des tabulations, le numéro de ligne, le numéro de colonne (ce nombre peut être très grand en cas de ligne dépassant la marge ou repliée) ; le mode INSertion/ECRasement.

Panneau latéral reprend la liste des différents onglets-fichiers en cours. Il accueille également des fonctionnalités selon les greffons : arborescence des fichier.

[F9] affiche ou rétracte ce panneau.

Panneau inférieur ne peut s’ouvrir que si certains greffons sont validés comme «Outils Externes» qui peut l’utiliser, une console python, une console mate-terminal

[ctrl F9] affiche ou rétracte ce panneau.

Plein écran affiche l’espace de saisie du texte sur tout l’écran, en ne gardant de la fenêtre que l’ascenseur à droite et les éventuels numéros de ligne à gauche ([ctrl y] pour les afficher ou les rétracter).

[F11] rentre dans ce mode ou en sort.

2.2 Coloration syntaxique

Utile à la programmation, il est possible de choisir une Coloration syntaxique par le menu Édition → Préférence → Police et couleurs. Si aucun de ceux qui sont proposés ne vous convient, il est possible d’en ajouter un, que vous aurez édité vous-même ou téléchargé ici, en passant par Édition → Préférence → Police et couleurs → [+ Ajouter]

Les fichiers fournis avec pluma se trouvent à l’adresse /usr/share/gtksourceview-4/styles.

Un fichier de styles édité peut être sauvegardé dans .config/pluma/styles (/home/toto/.config/pluma/styles pour le compte toto).

Note : il peut arriver que la coloration syntaxique soit désactivée, notamment lorsqu’on commence un titre <h + chiffre en HTML. Il faut alors cliquer sur Affichage → Mode de coloration → Texte brut puis Affichage → Mode de coloration → Texte brut → Balisage → HTML. Une manière d’éviter ce problème est de saisir h3></h3>, puis de compléter à gauche avec < mais attention si vous devez ensuite insérer id="" ou une balise à l’intérieur du titre.

3. Recherche

[ctrl i] ouvre un champ éditable, en haut et à gauche de la fenêtre d’édition, permettant de saisir un numéro de ligne où sautera le curseur.

[ctrl k] ouvre un champ éditable, en haut et à gauche de la fenêtre d’édition, permettant une recherche directe du premier caractère, puis des deux premiers, etc. au fur et à mesure que les caractères sont saisis (recherche incrémentale).

3.1 Chercher une chaine de caractères

Recherche → Rechercher ou [ctrl f] permet de trouver l’emplacement d’une chaine, comme un mot, une partie de mot ou plusieurs mots.

Un boite s’ouvre, permettant de saisir la chaine à rechercher. Au dessous, six cases à cocher permette six modalités :

[ctrl g] permet de rechercher l’occurrence suivante, même si la boite de recherche est fermée
[ctrl maj g] permet de rechercher l’occurrence précédente
[ctrl maj k] supprime les surbrillances

3.2 Chercher et remplacer une chaine de caractères

Recherche → Rechercher ou [ctrl h] permet de remplacer une chaine de caractères par une autre. Si la boite qui s’ouvre est la même que celle de la simple recherche dans les options à cocher, elle s’en différencie par le fait qu’il y a un champ éditable supplémentaire, celui de la chaine de remplacement, et que l’on peut choisir entre les boutons [Rechercher] (l’occurrence suivante), [Remplacer] l’occurrence actuelle ou [Remplacer tout], à savoir toutes les occurrences. En cas de repentir, [ctrl z] défait la dernière action, quelle soit unique ou globale.

L’utilisation des expressions régulières est également possible dans le champ de la recherche, à condition de le préciser dans la boite ; le champ du remplacement n’est pas interprété par les expressions régulières, sauf que les différentes parties entourées de parenthèse du premier champ peuvent être réintroduites respectivement par \1, \2, etc.

Note importante : la mémoire n’est pas bien gérée par la recherche et le remplacement de caractères avec expression régulière, Pluma recopiant en mémoire à chaque remplacement la partie du texte qui reste à traiter. Pour 1000 changements répartis de façon homogène sur un texte de 10Mo, cela fait 1000 × 10Mo /2, soit 5Go, qui ne sont libérés qu’en quittant Pluma. Pour résoudre cela, un script python de recherche et remplacement en expression régulière est proposé sur cette page, comme exemple d'outil externe.

4. Outils

Il est possible que ce menu soit absente de la barre des menus, car tous les items dépendent des greffons (plugins) activés dans Éditer → Préférences → Greffons : «Vérificateur orthographique», «Statistiques du document» et «Outils externes».

4.1 Vérification orthographique

N’est disponible que si le plugin de Éditer → Préférences → Greffons → Vérificateur orthographique est coché dans l’onglet Greffons des préférences.

Outils → Vérification orthographique ou [maj F7] lance une vérification de tous les mots du texte. Quand il ne trouve pas un mot dans le dictionnaire, une boite s’ouvre et propose des mots approchant parmi lesquels on peut choisir, ou ignorer ; il est possible de proposer une variante ou l’admettre dans un dictionnaire «utilisateur». Cette correction peut se faire pour seulement cette occurrence ou pour toutes les occurrences du texte.

Les éventuels mots ajoutés devraient se trouver en /home/toto/.config/enchant pour l’utilisateur toto.

Outils → Vérification orthographique automatique ou [ctrl F7] souligne tous les mots du texte qui ne se trouve pas dans le dictionnaire sélectionné.

Pluma peut utiliser les dictionnaires correcteurs, par exemple les dictionnaires français aspell ou une des versions de hunspell (installer hunspell-fr-classical, hunspell-fr-comprehensive (ancienne et nouvelle orthographe) et hunspell-fr-revised, ce dernier concernant la réforme orthographique de 1990. Le dernier dictionnaire français choisi se retrouve à l’adresse /usr/share/hunspell, installer l’un chasse l’autre).

Des dictionnaires de plusieurs langues peuvent cohabiter ; l’item Outils → Définir la langue permet de choisir la langue de la vérification orthographique, un dictionnaire correspondant doit être installé ; il faudra vérifier que le greffon est bien coché avec Éditer → Préférences → Greffons → Vérificateur orthographique.

4.2 Statistiques du document – Nv 2025.12

N’est disponible que si le plugin de Éditer → Préférences → Greffons → Statistiques du document est coché dans l’onglet Greffons des préférences.

Ces statistiques concernent le nombre de lignes, de mots, de caractères (avec ou sans espace) et le nombre d’octets total du document. Le même relevé est fait pour une sélection est en cours.

Note : une ligne est l’ensemble de caractères entre deux «sauts de ligne» ("\n" en Unix et MacOSX), une ligne trop longue qui est repliée, sans nouveau numéro ([ctrl y]), et qui forme un paragraphe reste une seule ligne.

4.3 External tools – Nv 2025.12

N’est disponible que si le plugin de Éditer → Préférences → Greffons → Outils externes est coché dans l’onglet Greffons des préférences, qui dépend du paquet pluma-plugins-common qui semble installé d’office.

Le menu Outils Pluma comporte l’item External Tools (en anglais dans la version francophone de Mate-Desktop 1.26), qui permet de lancer des commandes ou des scripts à diverses fins, notammant pour modifier automatiquement un fichier en cours. Pluma en propose six :

4.4 Manage External tools – Nv 2025.12

Pour les conditions d’accès, voir External tools.

Cet item permet de modifier les scripts fournis par Pluma (pas de les supprimer), ou d’en écrire d’autres, qui peuvent modifier des textes, comme Remove trailing Spaces, fourni, et même des fichiers de données CSV. Chaque outil externe installé sera disponible à travers l’item External Tools. Les exemples proposés sur cette page sont écrits en bash ou en python, mais d’autres langages de script devraient normalement fonctionner.

Pour écrire un nouveau script, cliquer sur Outils → Manage External Tools. Une boite s’ouvre, avec la liste d’outils déjà fournis, et cliquer sur l’un d’eux affiche son contenu dans la fenêtre d’édition à droite. Pour éditer un nouvel outil, cliquer sur l’icone de la petite page en bas à gauche de la fenêtre, ce qui ajoutera le nom de fichier «New Tool» dans la liste, dont le nom est éditable (il est d’ailleurs possible de renommer chaque outil de la boite en double-cliquant dessus). C’est dans la plus grande fenêtre que l’on édite le script avec #! /bin/sh en première ligne pour un fichier bash, ou #! /usr/bin/python3 pour python, en tout cas pour un système Unix-compatible.

La suite de cette page donnent plusieurs exemples en bash et en python3, des remplacements, des tris et des corrections de fichiers en grec ancien, mais il est primordial de s’intéresser aux conditions d’exécution d’un script.

Entrée et sortie des données

Il est nécessaire décider du comportement de Pluma à l’égard de l’éventuel fichier de départ et de l’endroit d’expression des résultats du script :

Il n’y a pas de confirmation générale [Ok] ou [Appliquer] : les modifications se font en temps réels.

Notes :

Gestion des outils externes

Le script est sauvegardé à l’adresse ~/.config/pluma/tools (GNU/linux Debian 13 Trixie), l’adresse des scripts déjà fournis par Pluma. La sauvegarde ajoute une entête précisant le mode de comportement précisé dans le paramétrage du fichier :

# !/bin/bash (ou /usr/bin/python3 selon le type du script)
# [Pluma Tool]
# Name= (Titre apparaissant dans Outils → External Tools)
# Input= (d’où arrive les données en entrée: fichier, sélection…)
# Output= (où vont les données produites: fichier, fenêtre, console)
# Applicability= (type de localisation de fichier)
# Save-files= (fichiers à sauvegarder)

C’est au lancement de Pluma que ces fichiers sont lus et insérés dans Outils → External Tools. Il est donc possible de changer le nom des scripts du répertoire ~/.config/pluma/tools sans que cela n’affecte la gestion des External Tools, à condition de relancer Pluma après.

4.5 Exemples d’outil externe : apostrophes et regex en python – Nv 2025.12

Voici deux exemples de scripts permettant de fabriquer des External tools vus de façon théorique au point précédent.

D'autres exemples de script sur cette page permettent un tri naturel sensible à la casse ou un tri par la fin des mots

Transformer les apostrophes ASCII en apostrophes typographiques (script shell)

Lors de la saisie, Pluma n’interprète par la simple apostrophe ' en guillemet simple typographique comme peut le faire LibreOffice. Et frapper [alt maj n] n’est pas la chose la plus simple à réaliser sur un clavier AZERTY français ou belge ([alt maj x] sur le clavier BÉPO, [alt maj c] en BÉPO sur un clavier AZERTY). Une solution est d’encoder le texte sans y penser et puis d’utiliser le script «shell» suivant :

#!/bin/sh

sed -E "s@([[:alpha:]])'([[:alpha:]])@\\1’\\2@gi"

Ce script ne transforme que les ' entre deux caractères alphabétiques. Les guillemets en bordure de mots ne sont pas concernés.

Un clavier AZERTY ne connaissant pas le tiret moyen , il est possible de le coder -- (deux traits d’union simples entourés d’espaces). Le script étendu ci-dessous permet la transformation de -- en , de même qu’il transforme trois points habituels (codés \.) en points de suspension typographiques  :

#!/bin/sh

sed -E "s/([[:alpha:]])'[[:alpha:]]/\\1’\\2/" \
 | sed "s/ -- / – /" \
 | sed "s/\.\.\./…/"

Expression régulière en python

Les recherches/remplacements de Pluma n’étant pas optimal pour les expressions régulières sur les gros fichiers, il est possible d’utiliser un script python, rapide et frugal du point de vue de la mémoire. Attention : les expressions régulières diffèrent toujours un peu selon les applications ou langages. Celles de python ne connaissent par exemple pas les formulations de type [[:alpha:]].

Un script python doit récupérer le texte par une procédure nécessitant le module sys ; re concerne les expressions régulières. Le contenu d’un fichier est récupéré par sys.stdin, lu comme un fichier ouvert avec open(). Les données modifiées sont renvoyées par sys.stdout.

#! /usr/bin/python3

import sys, re
texte =sys.stdin.read()

chercher =""     # compléter la chaine de recherche
remplacer =""    # compléter la chaine de remplacement

texte =re.sub(chercher, remplacer, texte)

sys.stdout.write(texte)
exit(0)

L’inconvénient est qu’il faut au préalable aller à Outils → Manage External Tools → et cliquer sur le script pour éditer les deux champs. Par rapport au codage dans Recherche → Remplacer, toute barre inverse \ doit être doublée : \\n pour \n (saut de ligne), \\t pour \t (tabilation) \\1 pour \1 (remplacement du premier motif entre parenthèses)…

5. Annexes

5.1 Encodage de textes

Il arrive que pluma ne puisse détecter la façon dont un texte a été encodé, et ne puisse donc afficher les accents ou les écritures non latines. Pour y remédier : dans la boite de sélection de fichier (Fichiers → Ouvrir), cliquer sur le menu Code de caractères, choisir le codage supposé. S’il n’y est pas, l’ajouter (dernière ligne du menu déroulant). ISO-8859-1, ISO-8859-15 et Windows 1252 sont d’anciennes façons de coder les textes écrits en lettres latines avec leurs accents (voir la page iso8859.htm), et devraient être présents pour importer les anciens textes bruts ; essayer les différents codages asiatiques selon les besoins. Pour des textes occidentaux, la sauvegarde devrait normalement être faite en UTF-8 (doublement universel : il code tous les caractères et est adopté par tous les bons systèmes actuels), mais peut-être à éviter pour les gros fichiers non occidentaux. En UTF-8,

Les fichiers binaires (qui peuvent contenir les 256 valeurs permises par un octet) ne peuvent pas être ouverts par pluma, il faut alors utiliser un logiciel hexadécimal, comme ghex (probablement à installer) : cherchez-remplacez avec [ctrl h] les octets 00 par 20 (l’espace, par exemple) et sauvegardez : cela devrait permettre avec pluma de prendre connaissance de textes simples contenant malgré tout des octets de contrôle (inférieurs à 32), ceux-ci apparaitront sous forme de quatre chiffres dans un carré. Il est possible de les chercher/remplacer, mais cela n’est utile que pour certains fichiers-textes «améliorés» de certains vieux éditeurs.

5.2 Les expressions régulières

En cas de recherche ou de recherche-remplacement de chaine de caractères, il est possible de définir une multitude de chaines, comme le permettent les jokers ? et *, si ce n’est que les définitions de ces «expressions régulières» sont beaucoup plus sophistiquées. La case [Correspondre à l’expression régulière] doit être cochée pour de telles recherches.

Dans les scripts Manage External Tools, ceux écrits en python utilisent le module re ; dans les scripts bash, une recherche/remplacement se fait avec la commande sed (stream editor), dont la syntaxe générale est :

sed "s/recherche/remplacement/g"

Le séparateur entre les champs est /, qui doit être échappé par \ s’il est utilisé dans un motif de recherche ou de remplacement. Pour éviter les \/, il est possible d’utiliser un caractère moins probable, par exemple @ (le g final généralise la recherche à toute les occurrences de chaque ligne) :

sed "s@recherche@remplacement@g"

Codage

Pour un caractère :

Les entités POSIX :

Les bordures :

Les quantificateurs (les parenthèses servent à regrouper un ensemble de signes) :

Après les quantificateurs ?, *, + et {}, le caractère ? est également utilisé pour l’option frugale :

En dehors de [], les caractères qui servent à coder doivent être «échappés» (précédés de \) pour être pris littéralement :

\$ \^ \[ \( \{ \\ \+ \* \. permettent de définir les caractères $ ^ [ ( { \ + * .

La chaine de remplacement peut récupérer tout morceau de chaine recherchée ayant été entouré de caractère. Le premier tronçon entre parenthèse sera récupéré avec \1, le deuxième avec \2, etc. :

Texte : Le laitier allait et chantait.

Chaine de formatage : \b(.*?)ait\b = début de mot + plusieurs caractères + "ait" + fin de mot
Chaine de remplacement : \1a = les caractères recherchés + a

Résultat : Le laitier alla et chanta.

La limite de mot \b a permis de préserver ait de «laitier».

Attention : un chercher-remplacer d’une expression régulière sur un simple texte de plusieurs mégaoctets prend énormément de temps et consomme beaucoup de mémoire (il semblerait qu’à chaque modification l’application duplique en mémoire la partie du fichier qu’il reste à traiter, et la mémoire utilisée n’est pas libérée à la fin de l’opération, il faut pour ce faire quitter pluma). C’est quasi instantané et ne mobilise temporairement que peu de mémoire avec un script en python ou avec l’éditeur vim.

Les expressions régulières ont été implémentées avec plus ou moins de rigueur dans la majorité des langages. Vous trouverez plus d’explications à la page modules python.

5.3 Exemples d’outils externes : divers tris

Tri naturel sensible à la casse (script python)

Note : pour un tri naturel, où les lettres avec diacritiques é, è et ê ne viennent pas nécessairement après les autres (être avant euro), LC_ALL=C doit être remplacé par une locale comme fr_FR, et mieux encore fr_FR.UTF-8 ou fr_BE.utf-8 (il peut exister différentes graphies). Les majuscules seront alors mêlées aux minuscules.

Le tri du greffon interne Éditer → Trier n’est pas nécessairement sensible à la casse même si la case [Insensible à la casse] est décochée (c’est peut-être dû à une locale UTF-8). Ce script permet un tri naturel (les lettres accentuées ne sont pas renvoyées après toutes les autres) ET sensible à la casse.

# !/usr/bin/python3

# TRI NATUREL, BIEN QUE MAJUSCULES AVANT MINUSCULES
# le tri naturel ne tient pas compte des diacritiques
# fr_BE.UTF-8, et fonctionne aussi pour le grec ancien
# Jean-Christophe Beumier - Licence GPLv3 - 2025.12.10

import sys, locale

# Selon le système: en_US.UTF-8, fr_FR.utf-8, fr_CA.utf-8
locale.setlocale(locale.LC_COLLATE, "fr_BE.utf-8")

# Lecture depuis stdin (document ou sélection)
lines = sys.stdin.read().splitlines()

# Enlève les lignes vides
lines = [x for line in lines if (x:=line.strip())]

# Tri :
lines.sort(key=lambda s: (s[0].islower(), locale.strxfrm(s)))
# s[0].islower() : majuscules avant minuscules
# locale.strxfrm(s) : collation Unicode naturelle

# Écriture vers stdout (remplace la sélection / le document)
sys.stdout.write('\n'.join(lines) +"\n")

Tri sur une deuxième colonne d’un CSV

Les fichiers CSV sont des bases de données en simple texte, ou chaque ligne représente une observation, dont les champs (les variables, par colonne) sont historiquement séparés par une virgule (Comma Separated Value). Comme on utilise le plus souvent des tabulations comme délimiteurs de champs, on devrait les appeler «TSV», et «SSV» pour les points-virgules (semicolon), mais le nom génériques CSV est le plus souvent utilisé.

Si vous triez les lignes/paragraphes du petit fichier qui suit (\t représentant la tabulation, les autres espaces ne sont pas nécessaires) :

one \t un
two \t deux
three \t trois

 …avec la fonction Trier, vous obtiendrez l’ordre alphabétique du premier mot de chaque ligne :

one \t un
three \t trois
two \t deux

Pour obtenir un tri basé sur l’ordre alphabétique de la seconde colonne, comme

two \t deux
three \t trois
one \t un

 …il est possible de passer par le tableur Calc de LibreOffice : sauvegarder et quitter le fichier dans Pluma, lancer LibreOffice-Calc, charger le fichier, confirmer lors de l’importation des données le séparateur \t (tab) à l’exclusion de tout autre, [ctrl a] pour sélectionner toutes les colonnes, Données → Trier, [Clé de tri 1: colonne B; Clé de tri 2: colonne A], [OK], sauvegarder le fichier [Confirmer le format de fichier: CSV], et le recharger dans Pluma. Tout ce travail est évitable avec l’écriture du script ci-dessous, qui utilise awk, un outil de base de données CSV en mode texte.

#! /bin/bash

awk -F'\t' 'BEGIN {OFS="\t"} {
  if (NF < 2) $2="\"\"" ;
  print $1, $2
  }' | LC_ALL=C sort -t$'\t' -k2,2 -k1,1

Explications :

Tri sur les mots inversés de la première colonne d’un CSV

Ce tri peut être utile pour classer la première colonne d’un dictionnaire par la fin des mots, histoire par exemple de se constituer un dictionnaire de rime. Il est prévu pour une TSV (Tabulation Separated Value) mais il fonctionne sur un fichier de simple texte, CSV (terme générique pour Comma Separated Value) à une seule colonne.

#! /bin/bash

awk -F'\t' '{
    # Inversion de $1 (colonne 1)
    s = $1
    rev = ""
    for (i = length(s); i > 0; i--) {
        rev = rev substr(s, i, 1)
    }
    # On ajoute la clé de tri au début
    print rev "\t" $0
}' \
| LC_ALL=C sort -t$'\t' -k1,1 \
| cut -f2-

# Ce que fait ce script
#    awk lit ligne par ligne :
#        découpe sur tabulation
#        inverse la 1e colonne
#        préfixe la ligne d’une clé de tri (la chaine inversée)
#    sort trie sur cette clé (strict, sans ignorer la casse).
#    cut enlève la clé de tri, ne laissant que le TSV d’origine trié correctement.

Notes : il est possible de remplacer la locale LC_ALL=C par une locle UTF-8, par exemple LC_ALL=fr_FR.UTF-8

5.4 Quelques considérations sur le grec ancien

En UTF-8, les voyelles άέήίόύώ sont codées sur deux octets si elles appartiennent à l’alphabet grec moderne (voyelle avec accent monotonique) et sur trois octets si elles appartiennent au grec ancien (voyelles avec oxia). Or la plupart des polices de caractères grec ne les distinguent pas graphiquement.

Le clavier «grec ancien» de GNU/Linux Debian par exemple code ces voyelles en utilisant le code à deux octets, comme les consonnes, et les recherche de caractères de Pluma considère de la même manière les voyelles avec oxia et les monotoniques (et ne distingue pas les voyelles de leur version avec iota souscrit). Vim en revanche distingue chaque caractère quels que soient les diacritiques.

Cette page propose quatre script pouvant détecter ou modifier des textes.

Script pour compter les voyelles monotoniques ou avec oxia

Les résultats de ce script doivent être transférés dans la console et non dans le document (voir paramétrage des External Tools).

#! /usr/bin/python3
import re, sys, collections

mono ="άέήίόύώ" ; oxia ="άέήίόύώ"
monoOD =collections.OrderedDict()
oxiaOD =collections.OrderedDict()

txt =sys.stdin.read()

for i in mono :
  if i in txt :
    monoOD[i] =txt.count(i)
if monoOD :
  print("# Monotonales", end=" – ")
  for i in monoOD :
    print(f"{i}: {monoOD[i]} ; ", end="")
else :
  print("Pas de voyelle monotonale dans ce texte", end="")
print()
for i in oxia :
  if i in txt :
    oxiaOD[i] =txt.count(i)
if oxiaOD :
  print("# Avec oxia", end=" – ")
  for i in oxiaOD :
    print(f"{i}: {oxiaOD[i]} ; ", end="")
else :
  print("Pas de voyelle avec oxia dans ce texte", end="")
print()

Script pour transformer les voyelles monotoniques en voyelles avec oxia

Certains documents d’origines différentes peuvent comporter indistinctement des voyelles monotoniques et des voyelles avec oxia. Ce script uniformise en voyelles avec oxia.

#! /usr/bin/python3
import sys, unicodedata

# Dictionnaire : voyelles monotones → voyelles avec oxia
replacement = {"ά":"ά", "έ":"έ", "ή":"ή", "ί":"ί", "ό":"ό", "ύ":"ύ", "ώ":"ώ"}

# Lire le texte depuis l’entrée standard (envoyé par Pluma)
text = sys.stdin.read()

# Recomposition NFC pour uniformiser toutes les formes
text = unicodedata.normalize("NFC", text)

# Remplacement monotone → oxia
text = "".join(replacement.get(c, c) for c in text)

# Renvoyer le texte sur la sortie standard vers Pluma
sys.stdout.write(text)

Note : NFC recompose les éventuelles formes décomposées (NFD) «esprit + accent + trema + iota souscrit + voyelles»

Script pour convertir les voyelles avec oxia en voyelles monotoniques

Au lieu des voyelles avec oxia du grec ancien codées sur trois octets, un clavier grec ancien peut utiliser les voyelles avec accent monotonique codées deux octets. Ce script remplace les voyelles avec oxia par les voyelles accentuées monotoniques, compatibles avec ces claviers économes. Précision : contrairement à Vim, Pluma ne différencie pas les deux lors d’une recherche.

#! /usr/bin/python3
import sys, unicodedata

# Dictionnaire : voyelles avec oxia → voyelles monotoniques
replacement = {"ά":"ά", "έ":"έ", "ή":"ή", "ί":"ί", "ό":"ό", "ύ":"ύ", "ώ":"ώ"}

text = sys.stdin.read()

# Normalisation NFC pour uniformiser toutes les formes
text = unicodedata.normalize("NFC", text)

# Remplacement oxia → monotone
new_text = "".join(replacement.get(c, c) for c in text)

sys.stdout.write(new_text)

Détecter les mots hybrides gréco-latins

Graphiquement, les lettres ABCEHIKMNOPTXYZoµ peuvent tout aussi bien être grecques que latines, et des mots composites risquent de ne pas être relevé lors d’une recherche avec certains éditeurs. Ce script permet de repérer les mots hybrides, empruntant aux deux alphabets, mais seulement s’ils ne sont pas visibles à l’œil nu.

#!/usr/bin/python3

# Inspecte les fichiers en grec ancien
# 1. Repère les mots contenant au moins une lettre
#       parmi ABCEHIKMNOPTXYZoµ, grecque ou latine
# 2. Vérifie qu’ils sont écrits avec un seul alphabet
# 3. Affiche les mots «hybrides» dans la console
# µ: distingue la lettre grecque du symbole micron
# ? Ne cherche pas l’hybridité manifeste comme dans Gω
# Jean-Christophe Beumier – 2025.12.16 – GPLv3

import sys, re

# Lettres latines utilisées en français, avec diacritiques incluses
latines =set("""
ABCDEFGHIJKLMNOPQRSTUVWXYZÀÂÄÆÇÉÈÊËÎÏŒÔÙÛÜŸ
abcdefghijklmnopqrstuvwxyzàâäæçéèêëîïœôùûüÿµ""")

# Lettres grecques
grecques =set("""
ΒΓΔΖΘΚΛΜΝΞΠΡῬΣϹΤΦΧΨβγδζθκλμνξπρῥσςτφχψϐϑϰϱϲϕ
ΑΆᾺΑ͂ἈἌἊἎἉἍἋἏᾼᾈᾌᾊᾎᾉᾍᾋᾏαάάὰᾶἀἄἂἆἁἅἃἇᾳᾴᾲᾷᾀᾄᾂᾆᾁᾅᾃᾇ
ΕΈῈἘἜἚἙἝἛεέέὲἐἔἒἑἕἓΙΊῚΙ͂ἸἼἺἾἹἽἻἿΪιίίὶῖἰἴἲἶἱἵἳἷϊΐῒῗ
ΟΌῸὈὌὊὉὍὋοόόὸὀὄὂὁὅὃΥΎῪΥ͂ὙὝὛὟΫυύύὺῦὐὔὒὖὑὕὓὗϋΰῢῧ
ΗΉῊΗ͂ἨἬἪἮἩἭἫἯῌᾘᾜᾚᾞᾙᾝᾛᾟηήήὴῆἠἤἢἦἡἥἣἧῃῄῂῇᾐᾔᾒᾖᾑᾕᾓᾗ
ΩΏῺΩ͂ὨὬὪὮὩὭὫὯῼᾨᾬᾪᾮᾩᾫᾭᾯωώώὼῶὠὤὢὦὡὥὣὧῳῴῲῷᾠᾤᾢᾦᾡᾥᾣᾧ
""".replace("\n", ""))

# Lettres ambigües
grcamb ="ΑΒϹΕΗΙΚΜΝΟΡΤΧΥΖομ"
latamb ="ABCEHIKMNOPTXYZoµ"

lignes =sys.stdin.readlines()
compil =re.compile(r"\b[^\W\d_]+\b", re.UNICODE)

for num in range(len(lignes)) :
  for mot in compil.findall(lignes[num]) :
    flg =0
    # cherche des grecques dans les mots contenant une latine ambigüe
    grc ="" ; lat =""
    if any(c in latamb for c in mot) :
      for i in mot :
        if i in grecques :
          grc +=i
    # cherche des latines dans les mots contenant une grecque ambigüe
    if any(c in grecques for c in mot) :
      for i in mot :
        if i in latines :
          lat +=i
    if grc or lat :
      print(f"{num+1}: {mot:<25}     Lat: {lat:<20}   Grc: {grc}")

exit(0)

5.5 Raccourcis pour le clavier

Restaurer un raccourci-clavier

Cette manip est destinée à réparer une bêtise, mais permet également d’en commettre une plus grosse : vous êtes responsables de vos actes. Faites toujours des copies de sauvegarde.

Il se pourrait qu’en éditant un script External tool, vous ayez attribué à ce script un raccourci-clavier nécessaire à Pluma. Et même en étant revenu sur vos pas, ce raccourci n’est plus disponible. Il est possible de réparer cette bêtise, à condition d’éditer le fichier /home/toto/.config/pluma/accels (adresse du fichier pour l’utilisateur toto sur Mate-Desktop, Debian 13 Trixie).

Il n’est cependant pas possible d’éditer ce fichier avec Pluma, qui restaure ce fichier dans l’état où il était lorsque Pluma s’est ouvert. Il faut alors se tourner vers Vim, nano, mc, voire LibreOffice Writer à condition de sauvegarder le fichier en mode texte (pas ODT).

Pour restaurer le raccourci-clavier [ctrl f] qui permet de lancer une recherche sans passer par le menu, changer la ligne :

; (gtk_accel_path "<Actions>/PlumaWindowActions/SearchFind" "")

par

; (gtk_accel_path "<Actions>/PlumaWindowActions/SearchFind" "<Primary>f")

<Primary> code [ctrl], <Alt> celui de gauche, <Shift> une touche majuscule, les fonctions de F1 à F12, les touches de lettres sont en minuscules, il existe encore Page_Down ou Page_Up.

[ctrl d] étant dangereux (situé entre [ctrl s] et [ctrl f]), il serait tentant de recoder le raccourci de <Primary>d en <Primary><Shift>d, mais il est introuvable dans ce fichier (il n’apparait d’ailleurs pas dans les menus).

6.6 Pluma en mode super-utilisateur

Éditer des fichiers de configuration peut corrompre un système GNU/Linux ! Mais si vous disposez des droits du super-utilisateur, que vous utilisiez des outils de console ou d’interface utilisateur, votre pouvoir de nuisance est le même. Vous êtes responsable de ce que vous faites !

Nécessite le paquet caja-admin (nom de la distribution GNU/Linux Debian).

Dans une console (simple utilisateur, invite $), saisissez :

pluma admin:///etc/fstab

Le mot de passe du super-utilisateur sera bien entendu demandé. Rappel : en UNIX et assimilés, le virus le plus destructeur se situe entre le clavier et le dossier de la chaise.