Les macros sous VI :

vendredi 3 juillet 2009
par  Jerome ROBERT
popularité : 3%

http://tux.u-strasbg.fr/

Les macros sous VI:

 

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.

 

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"nDddn@n </b>permet de mettre les mots en minuscule en majuscule, et vice-versa.</p> <p><b>:map *' i<C-V><ESC>ea'<C-V><ESC> permet de mettre des et des ' autour du mot, en se pla&ccedil;ant sur la premi&egrave;re lettre du mot en question. On peut d&eacute;cliner la macro pour d'autres types de guillemets, fran&ccedil;ais : <b>:map * i&laquo;&lt;C-V&gt;&lt;ESC&gt;ea &raquo;&lt;C-V&gt;&lt;ESC&gt; </b></p> <p><b>:map g may0O&lt;C-V&gt;&lt;ESC&gt;Pao<C-V><ESC>P:s/./ /g<C-V><entrée>0i> <C-V><ESC>$mbay$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> "zdm :map &lt;C-V&gt;&lt;C-p&gt; &quot;zym . 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> "zPm </b>.</p> <p>&nbsp;</p> <p>Pour avoir un indicateur de position (un peu long, un peu lent, un peu lourd) :</p> <ul>    <li>    <p style="margin-bottom: 0cm;"><b>:map &lt;C-V&gt;&lt;fl&egrave;che_vers_le_haut&gt;         k&lt;C-V&gt;&lt;C-g&gt; </b></p>    </li>    <li>    <p style="margin-bottom: 0cm;"><b>:map &lt;C-V&gt;&lt;fl&egrave;che_vers_le_bas&gt;         j&lt;C-V&gt;&lt;C-g&gt; </b></p>    </li>    <li>    <p style="margin-bottom: 0cm;"><b>:map k k&lt;C-V&gt;&lt;C-g&gt; </b></p>    </li>    <li>    <p style="margin-bottom: 0cm;"><b>:map j j&lt;C-V&gt;&lt;C-g&gt; </b></p>    </li>    <li>    <p style="margin-bottom: 0cm;"><b>:map &lt;C-V&gt;&lt;C-f&gt;         &lt;C-V&gt;&lt;C-f&gt;&lt;C-V&gt;&lt;C-g&gt; </b></p>    </li>    <li>    <p style="margin-bottom: 0cm;"><b>:map &lt;C-V&gt;&lt;C-b&gt;         &lt;C-V&gt;&lt;C-b&gt;&lt;C-V&gt;&lt;C-g&gt; </b></p>    </li>    <li>    <p style="margin-bottom: 0cm;"><b>:map H H&lt;C-V&gt;&lt;C-g&gt; </b></p>    </li>    <li>    <p style="margin-bottom: 0cm;"><b>:map M M&lt;C-V&gt;&lt;C-g&gt; </b></p>    </li>    <li>    <p style="margin-bottom: 0cm;"><b>:map L L&lt;C-V&gt;&lt;C-g&gt; </b></p>    </li>    <li>    <p style="margin-bottom: 0cm;"><b>:map G G&lt;C-V&gt;&lt;C-g&gt; </b></p>    </li>    <li>    <p style="margin-bottom: 0cm;"><b>:map &lt;C-V&gt;&lt;C-u&gt;         &lt;C-V&gt;&lt;C-u&gt;&lt;C-V&gt;&lt;C-g&gt; </b></p>    </li>    <li>    <p><b>:map &lt;C-V&gt;&lt;C-d&gt; &lt;C-V&gt;&lt;C-d&gt;&lt;C-V&gt;&lt;C-g&gt;         </b>.</p>    </li> </ul> <p><b>map K :!chmod 666 %&lt;C-V&gt;&lt;entr&eacute;e&gt;:w!&lt;C-V&gt;&lt;entr&eacute;e&gt;&lt;C-V&gt;&lt;entr&eacute;e&gt; :!chmod 644 %&lt;C-V&gt;&lt;entr&eacute;e&gt; </b>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 &eacute;criture pour le propri&eacute;taire, et en lecture pour tous les autres.</p> <p>Ce ne sont pas forc&eacute;ment ses permissions initiales.</p> <p><b>:map = 080i &lt;C-V&gt;&lt;ESC&gt;$78hd0^D:s/ / /g&lt;ctrl-v&gt;&lt;enter&gt;$p </b>centre une ligne.</p> <p><b>:map! &lt;C-V&gt;&lt;C-V&gt;&lt;C-V&gt;&lt;C-i&gt; a&lt;C-V&gt;&lt;ESC&gt;xa&lt;espace&gt;&lt;espace&gt; &lt;espace&gt;&lt;espace&gt;&lt;espace&gt; </b>permet red&eacute;finir la touche de tabulation, pour qu'elle tape 5 espaces au lieu d'une tabulation.</p> <p><b>:map v Gdd''Pj </b>permet d'intervertir la ligne du curseur et la derni&egrave;re ligne du fichier. En se pla&ccedil;ant sur la premi&egrave;re ligne, on peut ainsi inverser l'ordre d'un fichier.</p> <p><b>:map v y$o&lt;C-V&gt;&lt;ESC&gt;pI:r!&lt;C-V&gt;&lt;ESC&gt;&quot;add@a </b>ex&eacute;cute dans un shell la cha&icirc;ne qui va de du curseur jusqu'&agrave; la fin de la ligne, et affiche le r&eacute;sultat.</p> <p>&nbsp;</p> <p>Pour effacer, en mode saisie, un texte qui a &eacute;t&eacute; tap&eacute; lors d'une saisie pr&eacute;c&eacute;dente, il faut faire : <b>:map! &lt;C-V&gt;&lt;C-?&gt; &lt;C-V&gt;&lt;ESC&gt;xa :map! &lt;C-V&gt;&lt;C-h&gt; &lt;ctrl+V&gt;&lt;ESC&gt;xa </b></p> <p><b>:map v 1G!Glp&lt;C-V&gt;&lt;entr&eacute;e&gt;u </b>imprime le document. Remplacez &eacute;ventuellement <b>lp </b>par <b>lpr </b>ou par le nom de votre logiciel d'impression.</p> <p>&nbsp;</p> <p>Pour utiliser le caract&egrave;re # pour afficher/enlever les num&eacute;ros de ligne :</p> <ul>    <li>    <p style="margin-bottom: 0cm;"><b>:map \o# o:se         nu&lt;C-V&gt;&lt;entr&eacute;e&gt;:se nonu&lt;C-V&gt;&lt;ESC&gt;-:         map \o# &quot;wp&lt;C-V&gt;&lt;entr&eacute;e&gt; </b>(sur la m&ecirc;me         ligne, sans interruption).</p>    </li>    <li>    <p style="margin-bottom: 0cm;"><b>:map \d# &quot;w2dd </b></p>    </li>    <li>    <p style="margin-bottom: 0cm;"><b>:map \x# &quot;xdd@x&quot;xpk </b></p>    </li>    <li>    <p><b>: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 </b>on revient &agrave; son point de d&eacute;part dans le texte. Accrochez-vous, c'est intimidant :</p> <p><b>:map K ma1GO[0]&lt;C-V&gt;&lt;ESC&gt;G$?[[[0-9]*]]&lt;C-V&gt;&lt;entr&eacute;e&gt;lyt]]aa<C-V><entrée><C-V

 

Configurer son fichier .exrc


 

Toutes les commandes : peuvent être utilisées dans le fichier de configuration .exrc. Il est chargé automatiquement au démarrage de vi. On peut y définir des abréviations (ab) des macros (map) et faire lire d'autres fichiers (so).

Les lignes vides ne sont pas autorisées, et les lignes commençant par " sont des commentaires.

 

 

Example de .exrc

Le fichier ci-dessous est un vrai fichier, le mien. Il ne définit pas suffisamment d'options pour donner un aperçu de tout ce qui est possible, mais il pose les bases, et il est assez clair.

Nota Bene : le : en début de commande n'est pas nécessaire, il est implicite.

" Fais les recherches sans tenir compte des majuscules/minuscules.

set ic

# Retourne à la ligne à 9 caractère de la marge droite.

set wm=9

# indique la parenthèse ouvrante quand on tape la parenthèse fermante.

set sm

#Utilise zsh comme shell.

set sh=/bin/zsh

# Deux abréviations de mes signatures.

  • ab zidlle E. Larry Lidz - ellidz@midway.uchicago.edu

  • ab --l -Larry

# Associe la touche V à la commande ispell -x . ( -x pour ne pas faire de sauvegardes)

map V :w<C+V><entrée>:!ispell -x%<C+V><entrée>:e!<C+V><entrée><C+V><entrée>

# Centre la ligne avec =

map = 80I <C-V><ESC>$78hd0:s/ //g<C-V><entrée>$p

# v reformate le paragraphe où se trouve le curseur.

map v {0!}fmt<C-V><entrée>

 



Commentaires  Forum fermé

Statistiques

Dernière mise à jour

mercredi 4 octobre 2023

Publication

273 Articles
Aucun album photo
Aucune brève
6 Sites Web
2 Auteurs

Visites

183 aujourd’hui
205 hier
864002 depuis le début
8 visiteurs actuellement connectés