Caractères spéciaux dans Vim

Postez ici vos scripts Bash, Python, etc.
Répondre
Avatar du membre
syldupac
Messages : 23
Enregistré le : sam. 8 oct. 2016 11:16

Caractères spéciaux dans Vim

Message par syldupac »

L'utilisation de Vim de façon ludique et curieuse permet de découvrir bien des choses intéressantes. (j'ai découvert Vim comme éditeur html, css ou php mais je l'utilise maintenant surtout pour taper du texte, articles ou fictions).
Vim est extrêmement configurable, c'est pour cela que je ne cesse d'améliorer mon vimrc !

J'ai récemment rencontré un problème très précis et que j'ai eu vraiment du mal à résoudre mais ma recherche n'a pas été vaine et m'a beaucoup appris : je récupère dans Vim un texte qui a été tapé dans LibreOffice. Il se trouve que LibreOffice utilise des apostrophes obliques qui sont différentes des apostrophes droites utilisées par Vim. Je me retrouve avec des textes comprenant deux types d'apostrophes et le correcteur orthographique de Vim ne manque pas de m'alerter parce qu'il considère comme faux un mot tel que « aujourd'hui » si l'accent est oblique.
À partir de là, je me suis dis que je pouvais faire un rechercher/remplacer et même créer un petit script ou une map à placer dans mon vimrc. Et là commencent les vrais problèmes !
Mon clavier azerty ne me permet pas de taper une apostrophe oblique. Je bricole un Rechercher/remplacer directement dans mon texte (parce que je ne peux pas entrer mon apostrophe dans la ligne de commande...) je tape donc %s/’/'/g. Je le copie en passant par le clipboard du système (c'est pas bien du tout) je lance une recherche avec / et je colle ma formule. Échec, le passage par le clipboard a dû changer quelque chose au codage des caractères et l'apostrophe oblique est déclaré « non-reconnu ».
Je cherche alors à savoir comment on peut entrer et afficher un caractère qui n'est pas accessible par clavier. Vim utilise un système complexe (qui lui est propre ?) qui s'appelle Digraph. Il existe des codes spéciaux et si vous connaissez le code digraph de votre caractère, vous tapez Ctrl-K <code> et vous obtenez le caractère spécial correspondant. Il existe une table des digraphs et si votre caractère n'est pas dans cette liste vous pouvez lui attribuer un code digraph arbitraire ! C'est très joli tout ça mais dans la ligne de commande, ça ne marche pas, le digraph n'est pas reconnu.
Je me dis qu'on peut certainement passer par le code ASCII du caractère. Là, je peux vous faire un cours de trois heures sur les joyeusetés du code ASCII. Sachez seulement qu'il existe en mode normal une commande vim pour découvrir les codes d'un caractère : ga. Vous placez votre curseur sur l'apostrophe oblique (ou tout autre caractère) et vous obtenez ceci : <’> 8217, Hexa 2019, Octal 20031, Digr '9 c'est à dire, les codes décimal, hexadécimal, octal et, s'il existe, le code digraph. Le code digraph permet au moins d'entrer ce fichu caractère dans le texte. On avance!
En cherchant bien, je trouve les formules magiques pour entrer un caractère avec son code (ça ne se limite pas au code ASCII mais intègre tous les caractères codés sur deux, quatre ou huit octets, vous pouvez intégrer une caractère chinois ou japonais, c'est class !).

\%d123 entre le caractère spécifié avec son code décimal (% petit d et décimal)
\%o40 entre le caractère spécifié avec son code octal jusqu'à 0377
\%x2a entre le caractère spécifié avec deux caractères hexadécimaux
\%u20AC entre le caractère spécifié avec quatre hexadécimaux
\%U1234abcd entre le caractère spécifié avec huit hexadécimaux

Et la bonne surprise c'est que ces codes là fonctionnent dans la ligne de commande. Donc le chercher/remplacer devient
:%s/\%d8217/'/g
qui remplace partout les apostrophes obliques par des apostrophes droites
(et je pourrais en faire une map dans mon vimrc !!!)

Bonus, si vous aimez les cœurs, je vous donne le code :
♥ 9829, Hexa 2665, Octal 23145
(pour le cas où vous n'auriez pas de cœur sur votre clavier...)
PC tour Asus coolermaster i5 avec Linux Mint 'Sarah'
petit portable Asus X201e avec Linus Mint 'Serena'
" La veille de ne jamais partir
Au moins on n'a pas à préparer des valises .../..."
Alvaro de Campos

Répondre