Assouvi à vie sous Vi
Comment un éditeur de texte se révèle être plus que ça
Unix est une mine d'or, certains de ses utilitaires recèlent de fabuleux trésors à même de décupler votre productivité, à condition de vous y intéresser en profondeur...
Voici comment, après 13 années par ailleurs bien remplie, j'ai découvert comment aller plus loin avec l'éditeur "vi".
Un Mug, rien qu'un mug.
Pour les ceusses qui ne s'en fussent aperçus (et Dieu sait que cela existe !), ma Mie et moi convolâmes vers Parisse-y-la-soupe-populaire à l'occasion de mon 5ème bit de poids faible.
En chemin, j'ai eu l'heur et l'honneur de rencontrer une chiétitude de gens intéress...aouuuuuf...ants.
Mais ma plus belle découverte, je la dois à un mug, un bête mug.
Un mug à la kon mais pas n'importe quel mug : il s'agissait du "vi mug" : un mug sur lequel étaient étiquetés la plupart des bindings nécessaires à une utilisation intelligente de ce logiciel que les sots et les ignorants prennent à tort pour un instrument de tortu(r)e !
Encore hébété des libations de la veille, j'en parcourais la déco tout en patientant jusqu'à ce que mon café atteignît une température décente ("Il y a 3 choses que je ne supporte pas : le café brûlant, le champagne tiède et les femmes froides" Orson Welles).
13 ans de pratique obligent, je connaissais toutes lesdites commandes... sauf une :-)
:%!sort qui trie le contenu du buffer d'édition.
Géant, je me dis.
Et puis j'extrapole : % c'est "toutes les lignes du buffer", mais si je veux de la 12ème à la 28ème ligne ?
OK : :12,28!sort
Evidemment, ça marche :-) J'ai bondi de joie.
A vrai dire, le voisin du dessous pleurera son plafonnier pendant des lustres...
Et puis je continue à extrapoler...
Et si je veux virer les commentaires d'un programme en C++ ?
:%s+//.*$++
Ah zut, c'était déjà connu, ça :-)
Bon, mettons que je ne veuille que les déclarations liées à la classe Toto... Celles ci étant de la forme Toto::... Il me suffit de lancer un :%!grep Toto::
Bon, me voici avec un problème : J'ai un répertoire contenant 99 fichiers MP3.
Je veux les renommer en les numérotant (à chacun sa lubie).
0) Je n'ai pas les fichiers sous la main mais j'en ai la liste, donc, je commence par lancer du shell un petit :
perl -p -i -e 'chomp ; system("touch \"$_\"")' ../list.dat
Qui me crée dans le répertoire courant un fichier vide par ligne présente dans le fichier ../list.dat
1) Sous vi, je sors du mode édition (je n'y suis pas a priori, d'ailleurs), puis je lance :%!ls
Ca ne loupe pas, mon buffer contient maintenant les noms de tous les fichiers du répertoire courant.
2) Pas la peine de trier, c'est déjà fait, et puis, de toutes façons, je sais faire.
Par contre, je dois maintenant renommer tous ces fichiers de façon à leur donner un numéro unique...
Le numéro de ligne, par exemple... awk-ons :-)
:%!`awk ' { system( "mv \"" $0 "\" \"" ++i " - " $0 "\"" ) }'`
Si je vous dit que cette commande a pour effet d'invoquer la commande shell mv (pour déplacer ou renommer un fichier) avec comme paramètre d'origine chacune des lignes de mon buffer (entre guillemets, car certains contiennet des espaces) et pour 2nd paramètre (disons la même chose mais précédée du numéro de la ligne correspondante).
Et voilà, les possibilités sont infinies et, à tous ceux qui croyaient le contraire, vi n'est pas qu'un éditeur de texte : c'est un shell, un environbnement de travail et, le fait d'avoir découvert de telles bidouilles après des années d'usage intensif me laisse augurer de beaux jours. :-)
" Artists call me a nerd
Nerds call me an artist "
|