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 <C-V><flèche_vers_le_haut> k<C-V><C-g>
  • :map <C-V><flèche_vers_le_bas> j<C-V><C-g>
  • :map k k<C-V><C-g>
  • :map j j<C-V><C-g>
  • :map <C-V><C-f> <C-V><C-f><C-V><C-g>
  • :map <C-V><C-b> <C-V><C-b><C-V><C-g>
  • :map H H<C-V><C-g>
  • :map M M<C-V><C-g>
  • :map L L<C-V><C-g>
  • :map G G<C-V><C-g>
  • :map <C-V><C-u> <C-V><C-u><C-V><C-g>
  • :map <C-V><C-d> <C-V><C-d><C-V><C-g> .

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 \o# o:se nu<C-V><entrée>:se nonu<C-V><ESC>-: map \o# “wp<C-V><entrée> (sur la même ligne, sans interruption).
  • :map \d# “w2dd
  • :map \x# “xdd@x”xpk
  • :map # ma3L\o#\x#\d#`a:<C-V><entrée>

: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

Dernière modification : 29/04/1999 08:52