Table des matières

7 Astuces et macros tordues.

Contents of this section

Ce chapitre donne quelques trucs et astuces qui ne viennent pas immédiatement à l'esprit. Toutes les suggestions sont les bienvenues, tant qu'elles restent assez courtes.

7.1 Astuces tordues.

** xp ** sert à effacer le caractère sous le curseur, et à le réécrire après. En d'autres termes, il intervertit la position du caractère sous le curseur et du caractère suivant.

** ddp ** fait la même chose que ** xp **, mais avec des lignes.

** yyp ** copie une ligne.

** uu ** annule, puis restaure la dernière modification. Ça positionne le curseur à l'endroit de la dernière modification sans rien changer. On peut aussi s'en servir pour visualiser les changements que l'on a fait sur une ligne : modifiez la ligne, appuyez sur ** u ** pour revenir à l'état antérieur, et ré-appuyez sur ** u ** pour passer d'une version à l'autre.

** :g/.*/m0 ** inverse l'ordre des lignes dans le fichier. ** m0 ** est la commande ex pour déplacer la ligne sélectionnée à la ligne 0.

** :g/^$/d ** ou ** :v/./d ** suppriment toutes les lignes vides.

** :g/^[ <C-V><TAB>]*$/d ** supprime toutes les lignes qui ne contiennent que des espaces et des tabulations.

** :v/./.,/./-1join ** remplace une suite de lignes vides par une seule ligne vide.

7.2 Macros tordues.

** :map * kxjphxkP ** permute le caractère sous le curseur et le caractère placé à la ligne au-dessus.

** :map g $80<C-V><C-V>|F r<C-V><entrée> ** permet de passer automatiquement à la ligne au bout de 80 caractères.

** :map v ywmno<C-V><ESC>P:s/./\~/g<C-V><enter>0“nDdd`n@n ** permet de mettre les mots en minuscule en majuscule, et vice-versa.

** :map *' i`<C-V><ESC>ea'<C-V><ESC> ** permet de mettre des ` et des ' autour du mot, en se plaçant sur la première lettre du mot en question. On peut décliner la macro pour d'autres types de guillemets, français : **:map * i«<C-V><ESC>ea »<C-V><ESC> **

** :map g may0O<C-V><ESC>P`ao<C-V><ESC>P:s/./ /g<C-V><entrée>0i> <C-V><ESC>$mb`ay$`bP'add ** est une macro qui permet de couper la ligne à l'endroit du curseur, et de placer un > au début de la nouvelle ligne. C'est utile, par exemple, pour reformater les articles Usenet auquel on répond.

** :map g i$<C-V><ESC>r **, suivi d'un caractère, permet de l'insérer et de retourner de suite au mode commande.

** :map K 072lBhr<C-V><entrée> ** permet formater un paragraphe sans recourir au programme fmt. Pour l'utiliser, mettez tout le paragraphe sur une seule ligne, avec J, puis appuyez sur K jusqu'à ce qu'il soit entièrement formaté.

Pour associer les touches <C-x> pour couper, <C-p> pour copier : ** :map <C-V><C-x> “zd`m ** ** :map <C-V><C-p> “zy`m **. Marquez le début de la zone avec ** mm **, déplacez le curseur jusqu'à la fin de la sélection, et utilisez la touche correspondante. Pour coller la sélection avec <C-o>, faites ** :map <C-V><C-o> “zP`m **.

Pour avoir un indicateur de position (un peu long, un peu lent, un peu lourd) :

** map K :!chmod 666 %<C-V><entrée>:w!<C-V><entrée><C-V><entrée> :!chmod 644 %<C-V><entrée> ** permet de sauvegarder un fichier que l'on a ouvert en lecture seule. Attention : le fichier se retrouve avec les permission en lecture et en écriture pour le propriétaire, et en lecture pour tous les autres. Ce ne sont pas forcément ses permissions initiales.

** :map = 080i <C-V><ESC>$78hd0^D:s/ / /g<ctrl-v><enter>$p ** centre une ligne.

** :map! <C-V><C-V><C-V><C-i> a<C-V><ESC>xa<espace><espace> <espace><espace><espace> ** permet redéfinir la touche de tabulation, pour qu'elle tape 5 espaces au lieu d'une tabulation.

** :map v Gdd''Pj ** permet d'intervertir la ligne du curseur et la dernière ligne du fichier. En se plaçant sur la première ligne, on peut ainsi inverser l'ordre d'un fichier.

** :map v y$o<C-V><ESC>pI:r!<C-V><ESC>“add@a ** exécute dans un shell la chaîne qui va de du curseur jusqu'à la fin de la ligne, et affiche le résultat.

Pour effacer, en mode saisie, un texte qui a été tapé lors d'une saisie précédente, il faut faire : ** :map! <C-V><C-?> <C-V><ESC>xa ** ** :map! <C-V><C-h> <ctrl+V><ESC>xa **

** :map v 1G!Glp<C-V><entrée>u ** imprime le document. Remplacez éventuellement ** lp ** par ** lpr ** ou par le nom de votre logiciel d'impression.

Pour utiliser le caractère # pour afficher/enlever les numéros de ligne :

** :map #r O<C-V><ESC>i….+….1….+….2….+….3….+….4….+….5….+….6….+….7….+….8<C-V><ESC> ** permet d'insérer une réglette au-dessus de la ligne du curseur.

Cette macro permet de faire une note en fin de document. Elle place un nombre entre crochet [1] [2]… à l'endroit du curseur et à la fin du texte, où il n'y a plus qu'à taper la note elle-même. En faisant ** `a ** on revient à son point de départ dans le texte. Accrochez-vous, c'est intimidant :

** :map K ma1GO[0]<C-V><ESC>G$?[0-9]*<C-V><entrée>lyt]]`aa<C-V><entrée><C-V><ESC>O<C-V><ESC>pI:r!echo '1 <C-V><ESC>A + p' <C-V><C-V>| dc<C-V><C-V><C-V><C-V><C-V><C-V><C-V><entrée><C-V><ESC>0”yD@y0i[<C-V><ESC>A]<C-V><ESC>kkJJJmb1Gdd`bF[yf]Go<C-V><ESC>pA **

Next Chapter, Previous Chapter

Table of contents of this chapter, General table of contents

Top of the document, Beginning of this Chapter