====== 7 Astuces et macros tordues. ====== [[vifaq.html#toc7| 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/^[ ]*$/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|F r ** permet de passer automatiquement à la ligne au bout de 80 caractères. ** :map v ywmnoP:s/./\~/g0"nDdd`n@n ** permet de mettre les mots en minuscule en majuscule, et vice-versa. ** :map *' i`ea' ** 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«ea » ** ** :map g may0OP`aoP:s/./ /g0i> $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$r **, suivi d'un caractère, permet de l'insérer et de retourner de suite au mode commande. ** :map K 072lBhr ** 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 pour couper, pour copier : ** :map "zd`m ** ** :map "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 , faites ** :map "zP`m **. Pour avoir un indicateur de position (un peu long, un peu lent, un peu lourd) : * ** :map k ** * ** :map j ** * ** :map k k ** * ** :map j j ** * ** :map ** * ** :map ** * ** :map H H ** * ** :map M M ** * ** :map L L ** * ** :map G G ** * ** :map ** * ** :map **. ** map K :!chmod 666 %:w! :!chmod 644 % ** 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 $78hd0^D:s/ / /g$p ** centre une ligne. ** :map! axa ** 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$opI:r!"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! xa ** ** :map! xa ** ** :map v 1G!Glpu ** 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:se nonu-: map \o# "wp ** (sur la même ligne, sans interruption). * ** :map \d# "w2dd ** * ** :map \x# "xdd@x"xpk ** * ** :map # ma3L\o#\x#\d#`a: ** ** :map #r Oi....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8 ** 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]G$?[[[0-9]*]]lyt]]`aaOpI:r!echo '1 A + p' | dc0"yD@y0i[A]kkJJJmb1Gdd`bF[yf]GopA ** [[vifaq-8.html| Next ]] Chapter, [[vifaq-6.html| Previous ]] Chapter Table of contents of [[vifaq.html#toc7|this chapter]], General [[vifaq.html#toc|table of contents]] [[vifaq.html| Top ]] of the document, [[#0| Beginning of this Chapter]]