Affichage des articles dont le libellé est vim. Afficher tous les articles
Affichage des articles dont le libellé est vim. Afficher tous les articles

RegEx Cheat Sheet

Toujours bien réviser les bases.
Surtout quand c'est tout simple.


Du VIM, ça faisait longtemps

Ouaip, trop longtemps que j'avais rien blogué à propos de VIM. Je sens bien que ça vous manque mes chéri.e.s. Alors donc tout de suite maintenant deux trois trucs sympas et bien geeks comme il faut.



Joindre les lignes d'un fichier, sans espace intercalaire
    :%j!
(plus direct que ma méthode d'avant)


Chiffrer un fichier, la manière simple
    :X


Chiffrer un fichier, la manière plus sécurisée
    :setlocal cm=blowfish2     (*)
    :X


Arrêter de chiffrer un fichier
    :setlocal key=
    :X
(pas con ça, si la clé est vide le fichier n'est plus chiffré.)



(*) Blow a fish, fire a gun...

Tout en MAJUSCULES !

Version courte et efficace
Sous VIM, la séquence « gggUG » met tout le fichier en majuscules. Et la séquence « ggguG » met tout le fichier en minuscules. Quant à « ggg?G » ça met tout le fichier en ROT13, mais ça je l’avais déjà dit.

Version longue et chiante
VIM est décidément un univers à part entière. Ce n’est pas un éditeur de texte, c’est un atelier de sculpteur ! Tel Rodin burinant les « portes de l’enfer » vous pouvez prendre du texte brut et le façonner à votre guise. À partir de lettres amorphes et désordonnées vous pouvez ainsi composer un poème, du code, la liste des commissions, etc. et en faire la mise en forme.

Ainsi, la séquence « ggguG » met d’un coup tous les caractères du fichier en minuscules. Sublime. Décomposons la séquence afin de bien en comprendre la logeek. Tout d’abord précisons que - malgré les apparences - il ne s’agit pas d’une séquence d’ARN messager du genre guanine- guanine- guanine- uracile-guanine(*). En fait :

gg signifie : va à la première ligne.
g signifie : commence la conversion ici.
u/U signifie : converti en minuscule/majuscules.
G signifie : jusqu’à la dernière ligne.

On peut aussi la jouer à l’ancienne en exécutant du code externe (Linux) : %!tr ["A-Z"] ["a-z"]. Libre à vous de trouver ça beurk ou magnifeek. Ou de vous en battre copieusement les steaks.

Perso je retourne visionner Z-Nation.



(*) Spéciale Nadine ;)

Marre des barres !

Version courte
Marre des barres d'outils qui prennent tout le haut de l'écran alors qu'il y a plein de place sur les côtés !



Version longue (et chiante)

Au chapitre des trucs qui m'énervent solidement, il y a la conception grapheek des logiciels. Déjà par défaut je suis plutôt branché ligne de commande... Mais parfois il faut quand même reconnaître que l'interface grapheek a du bon. Si si, pour des trucs du genre traitement de texte, travail en multifenêtre, transparents.... Et aussi pour faire des affiches et des fonds d'écran.

J'en arrive à ce qui me gonfle vigoureusement. En gros, nos écrans sont rectangulaires et le plus souvent orientés horizontalement. Or la plupart des tâches sont orientées "page" c'est-à-dire verticalement. C'est le cas pour le traitement de texte, la programmation avec le code qui déroule plutôt verticalement, ou tout simplement pour une séquence de commande/résultats dans un terminal. Et là, les F%kN!D3@tH d'ergonomes/graphistes/psychomachintruquistes nous pondent tous la même idée : des barres d'outils pourries qui mangent tout le haut de l'écran, alors qu'il y a tout plein la place libre à gauche ou à droite qui permettrait - justement - de garder l'orientation page. Sérieux, ça vaut bien le coup de faire des tonnes de wireframing, webdesign, user-centric-design et autres anglicismes si c'est pour pondre ça au bout du compte.

Voici le premier exemple qui m'exaspère bravement : Microsoft Word (ou Libre Office, pareil). Ils sont venus nous coller un bullshit ruban tout en haut. Ça bouffe 3 centimètres d'écran vertical en plus du menu et de la barre de fenêtre. Et sur les côtés : ils remplissent avec du vide(*). J'ai fureté partout, j'arrive pas à mettre le foutu ruban sur un côté. Grrrrr ! Quelque part sur la planète, il y a un gars qui a décidé que ça allait en haut et maintenant tout le monde doit faire comme ça. J'aime pas !
J'aime pas, j'aime pas, j'aime pas.

Tournons-nous alors vers Linux :  la liberté, l'ouverture, les petits zoizeaux qui gazouillent... Alors bon, faut reconnaître que j'ai surement pas choisi le bon window manager(**), mais là aussi ça coince. J'utilise Gnome 3. Et ben "ils" ont décidé que la barre était en haut, un point c'est tout. Et surtout pas sur le côté ! La liberté, les zoizeaux ça va deux minutes, mais faut pas en abuser !

Et le Web n'est pas en reste. Je sais, normalement deux exemples ça suffit pour généraliser, mais là je suis lancé et je sens que ça me fait du bien. Le web donc. Ben c'est pareil : tu écris le moindre article sur Wikipedia ou sur un blog : la barre d'outils est horizontale. Toujours. Tiens comme avec mon tableau de bord de voiture : horizontal ! Alors que franchement j'ai plein de place libre sur le côté de mon pare-brise pour faire des jolis angles morts. Et même dans mon garage : mes outils sont rangés à l'horizontale, quelle désolation !

Et ben voilà, finalement je suis encore plus énervé... Je vais bouder en faisant que de la ligne de commande et en éditant des fichiers texte avec VIM, là au moins je n'ai pas besoin de barre ou de ruban. Et tant que je suis chaud je vous donne tout de suite la commande VIM pour la virer (la barre d'outils de VIM), comme ça on part direct sur de bonnes bases :

  :set guioptions-=T

Et paf la barre d'outils !


(*) Remplir avec du vide : concept clé utilisé en interface graphique mais aussi en journalisme / politeek / management stratégeek / innovation / blogging.
(**) Je ne sais pas si vous avez remarqué, mais sous Linux personne ne choisit jamais le-bon-window-manager. Il y a toujours quelqu'un pour vous expliquer que-votre-window-manager-n'est-pas-le-meilleur ;)

Tous en ligne !

Je vous rassure tout de suite, il ne s'agit pas d'un nouveau délire à faire pendant le HellFest. Quoique. Non, aujourd'hui il s'agit seulement d'assembler toutes les lignes d’un fichier en une seule ligne grâce à vim.

Comme souvent avec vim il existe plusieurs moyens. À ma connaissance, moyen le plus rapide en nombre de touches est :%j. Les deux points font passer en mode commande, le pour cent est le raccourci pour 1,$ qui indeek que la commande va concerner toutes les lignes du fichier, et le j est le raccourci pour la commande join. Une forme plus explicite est :1,$join.

On peut aussi s’en tirer en étendant la commande interactive J qui joint la ligne courante et la suivante. Par exemple, au début du fichier on peut taper 18J s’il y a 18 lignes dans le fichier. C’est encore mieux de sélectionner toutes les lignes avec vG et de regrouper avec J. Si on ajoute la commande pour aller au début du fichier ça donne ggvGJ.

Les moyens précédents laissent tous un espace entre chaque ligne. Pour rabouter les lignes sans aucun espace, une bonne vielle substitution convient. Genre :%s/\n// ou encore mieux :%s,\n,, qui utilise une correspondance exacte plutôt que des regexp.


Merci à NLS de m’avoir aiguillé sur tous ces trucs :)

Fifty Ways To Leave Your vi

Dans la vie, il y a des situations où il faut sortir vite, très vite. Par exemple quand il n'y a plus de liquide dans la boule bleue. Ou quand il y a du liquide mais pas de boule transparente autour... Bref, parfois il faut sortir vite, très vite.

Pour sortir vite, très vite, de vi on peut faire :
  • :wq        w comme write et q comme quitter
  • ZZ         pour sauver si nécessaire et quitter
  • :q!        pour ignorer les changements et quitter
  • :x         comme exit.
Le plus rapide c'est donc :x avec deux touches seulement. Après c'est ZZ avec deux touches dont une doublée : shift + z + z. Après c'est :wq avec trois touches différentes. Pour les pervers qui voudraient sortir plus lentement, et je sais qu'il y en a, il y a :quit, :exit et les intermédiaires du genre :xit, :exi, :qui, ...

There must be fifty ways to leave your vi. Ou pas, parce qu'on peut quand même se demander à quoi sert de quitter vi. Franchement.

Hexa dans vi

Yep, il y a un "mode" hexa dans vi. J'ai tatonné un peu avant de l'utiliser correctement. On entre dans le mode hexa par l'incantation  :%!xxd  qui grosso modo signifie "applique la commande xxd sur l'ensemble du fichier". xxd c'est la commande UNIX pour faire un hexdump.Dès lors le contenu ressemble à ça :

0000000: 4f6e 2079 2065 6e74 7265 2070 6172 206c  On y entre par l
0000010: 2769 6e63 616e 7461 7469 6f6e 2020 3a25  'incantation  :%
0000020: 2178 7864 2020 7175 6920 6772 6f73 736f  !xxd  qui grosso
0000030: 206d 6f64 6f20 7369 676e 6966 6965 2022   modo signifie "
0000040: 6170 706c 6971 7565 206c 6120 636f 6d6d  applique la comm
0000050: 616e 6465 2078 7864 2073 7572 206c 2765  ande xxd sur l'e
0000060: 6e73 656d 626c 6520 6475 2066 6963 6869  nsemble du fichi
0000070: 6572 222e 2078 7864 20e9 7461 6e74 206c  er". xxd .tant l
0000080: 6120 636f 6d6d 616e 6465 2075 6e69 7175  a commande uniqu
0000090: 6520 706f 7572 2066 6169 7265 2075 6e20  e pour faire un
00000a0: 6865 7864 756d 702e 0a                   hexdump..

Vous avouerez que c'est quand même plus lisible qu'un bête fichier ascii. Après il est possible de modifier comme on veut du moment qu'on respecte le format dump hexa. C'est au moment de sauvegarder qu'il faut bien comprendre ce qu'on fait. Si on sauvegarde directement, genre :wq ou ZZ ou même :x (soyons fous), alors ce qu'on sauve c'est le dump hexa. Si on veut sauver le fichier dans son format originel il faut penser à reconvertir le dump d'abord. Rien de plus simple :%!xxd -r avec le -r pour dire "reverse".

On peut aussi faire le hexdump de quelques lignes seulement, genre :.,.+3!xxd les modifs doivent alors particulièrement bien respecter le compte des caractères sous peine de défaut d'alignement au moment de reverser le hexdump.

Bref, une incantation toute simple mais bien prateek, qui évite d'installer des éditeurs hexa inutilement.

Encore du vim

J'ai encore oublié comment on fait pour supprimer les lignes vides avec vim !
Du coup, punition ! Vous me copierez/collerez 100 fois l'incantation qui va bien :g/^$/d 
:g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d     
:g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d     
:g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d     
:g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    
:g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    
:g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d     
:g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    
:g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d     
:g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d     
:g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d     
:g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    :g/^$/d    
:g/^$/d

Et, avant d'oublier aussi, voici les incantations pour supprimer les lignes dupleekées :
g/^\(.*\)$\n\1$/d 

ggg?G : rot13 sous Vim

C'est exactement le genre de chose qu'on trouve en trainant dans le :help de vim. La séquence ggg?G qui sonne comme une déglutition de bande dessinée permet en fait d'encoder le fichier courant en rot13. Par exemple "J'apprécie les fruits au sirop" nous donne "W'ncceépvr yrf sehvgf nh fveb". Pour plus de sécurité pensez systémateekement à appleeker rot13 deux fois de suite.

Dans le même genre, toujours sous vim, la séquence gf permet d'inclure le fichier dont le nom est sous le curseur. Super utile pour faire par exemple un gros fichier LaTeX avec tous les input dedans.