Forum Programmation.autre macro vim sur mot courant

Posté par  .
Étiquettes :
0
13
mai
2011

Bonjour,

J'aimerais bien trouver le moyen dans vim d'executer un script shell externe avec comme paramètre le mot courant.

Mon but précis est, à l'intérieur d'un vimdiff de 2 listes de paquets de 2 machines, de pouvoir faire un "aptitude show $1" (en fait mon script montrerait la description du paquet sous le curseur et demanderait si il faut l'installer avant de revenir à vim).

Je n'ai rien trouvé de probant sur le ternet :-(
Merci.

  • # Macro + filtre

    Posté par  (site web personnel) . Évalué à 2.

    Hello,

    tu peux très facilement faire une macro qui va :

    1/ copier le mot courant dans un registre (par exemple "1yiw pour copier le mot courrant (yank inner word) dans le registre 1)
    2/ execute une commande en lui passant le contenu du registre 1 avec :!apt-cache show 1 puis entrée (ctrl+r dump le contenu du registre spécifié juste après)

    Testé à l'instant avec un helloworld en python :+)

    • [^] # Re: Macro + filtre

      Posté par  (site web personnel) . Évalué à 2.

      Ah, et si tu n'a jamais fais de macro, c'est très simple, il suffit de partir en mode commande (echap), de tapper q suivi de la lettre à laquelle tu affectes ta macro. Ca marque "Enregistrement" ce qui veut dire que désormais tout ce que tu fais sera enregistré. Quand t'as terminé, echap suivi de q met fin à l'enregistrement.

      Pour appeler la macro affectée à la touche a, il suffit de faire @a (en mode commande). Si tu veux l'appliquer plusieurs fois de suite, tu peux ensuite utiliser @@ qui rappelle la dernière macro utilisée.

      Pour ton truc, ca revient donc à faire :

      1/ tu te positionne sur ton mot en mode commande (echap)
      2/ qa"1yiw:apt-cache show 1 [entrée]
      3/ quand t'es revenu sous vim, presse q pour sauver la macro.

      Voila !

      • [^] # Re: Macro + filtre

        Posté par  (site web personnel) . Évalué à 2.

        (j'ai oublié le ! juste devant le apt-cache, désolé)

        2/ qa"1yiw:!apt-cache show 1 [entrée]

        • [^] # Re: Macro + filtre

          Posté par  (site web personnel) . Évalué à 3.

          bon, et ce RoR m'a bouffé ma balise, il faut pas oublié le ctrl+r avant le 1 :
          2/ qa"1yiw:!apt-cache show [ctrl+r]1 [entrée]

          • [^] # Re: Macro + filtre

            Posté par  . Évalué à 2.

            Je n'ai pas réussi à rajouter la macro dans mon vimrc (vim ne ne lançait plus et revenait au prompt sans aucun message) donc j'ai associé la commande à la touche [F1] avec:
            map #1 "1yiw:!aptitude show ^R1^M
            Ca marche parfaitement. Merci !

  • # ca m'a l'air compliqué comme fonctionnement

    Posté par  . Évalué à 3.

    s'il faut se farcir la liste de 50 paquets à la main pour proposer de les installer, tu n'as pas fini

    alors ma solution (evidemment ca marche avec les distribs à base de .deb, on doit pouvoir faire la meme chose sur les distributions en .rpm avec les outils qui vont bien)

    soit 2 fichiers A.txt et B.txt contenant un
    dpkg --get-selections

    des machines A et B

    soit diff.txt le resultat du diff A.txt B.txt

    un simple

    dpkg --set-selections <diff.txt

    devrait suffire à faire installer/proposer d'installer ce qu'il manque

    • [^] # Re: ca m'a l'air compliqué comme fonctionnement

      Posté par  . Évalué à 2.

      oui, bien sur, je connais, mais je voulais être beaucoup plus sélectif et en profiter pour faire du ménage (les passages etch/lenny/squeeze laissent quand même pas mal de vieux trucs même si on peux les virer d'un coup avec aptitude purge ~o !)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.