[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: tuer vim proprement (?)



Le 28/07/2014 07:45, moi-meme a écrit :

>> Heu... c'est dans la boucle bash ça ? Tu as des commandes bash qui
>> éditent un fichier sous vim et qui font un « :w » ?
> 
> non je l'édite à la main et je fais un :w! à la main, et je ne le ferme 
> pas. Mon fichier sur le disque est à jour de mes modifs et je fais un 
> "bash <fichier>"

Ah ok.

> si le fichier édité sous vim ne fait pas ce que je veux, je le modifie, 
> je relance le bash <fichier> et je réaffiche l'image résultat du bash ... 
> Si cela me plaît -de la console d'où j'ai lancé le script- je termine la 
> boucle, avec une réponse à un "read x" dans le script : fermeture vi vim , 
> des images (avec kill)

Ah, donc il y a bien quelque chose dans ton script bash
entre la ligne où il lance le vim et la ligne où il le
kille et ce quelque chose c'est le « read x » qui provoque
l'attente du script. Je comprends mieux maintenant je
crois.

>> Voir les remarques Pierre Marlard sur sed et awk qui pourraient
>> peut-être te faire gagner pas mal de temps. 
> 
> non car les modifs sont interactives.

Ok, là ça devient une processus artisanal donc et
pas automatisable. C'est toi l'automate et personne
d'autre à ce moment là.

Donc, il me semble qu'effectivement tu te compliques un
peu la vie et je me range dernière l'avis de Jean-Jacques
dans son message de 7h45, à savoir lancer le fichier
dans vim directement. Plus précisément, dans ta boucle
bash, tu lances vim le plus simplement du monde comme ça :

    vim <le-fichier> 

Pas de & et donc c'est toi qui a la main dans vim, le
script, lui, est en pause tant que tu n'as pas fermé
vim toi-même (pas besoin de read du coup). Pas de xterm
non plus et donc tu n'as qu'un seul terminal à gérer.

Ensuite, tu te retrouves donc dans vim et tu édites ton
fichier comme bon te semble. Quand tu veux le lancer/tester
alors là tu lances *dans* *vim* la commande :

    :w | !bash %

Le pipe « | » est juste un moyen de lancer 2 commandes
vim à la suite (on fait du 2 en 1 pour gagner du temps).
Le « :w », je pense que tu connais déjà. La deuxième
commande « !bash % » exécute ton fichier courant via un
bash (le contenu de ton fichier ne sera plus affiché et,
à la place, tu auras une console qui affichera la sortie
de cette exécution, il faudra appuyer sur ENTER pour
retourner dans vim, le tout toujours dans un seul et
même terminal).

Quand tu es satisfait, tu fais « :q » ce qui marquera la
fin de la commande vim et ton script bash initial reprendra
la main tout seul (du coup pas besoin de ce kill absurde). 

L'avantage de tout ça, il me semble, c'est que :

1. ton script bash sera plus simple et plus propre;
2. tu auras un seul terminal à gérer au lieu de 2.
3. dans vim, tu pourras gagner pas mal de temps avec
   l'historique de commandes où tu pourras notamment
   faire « : » puis flèche du haut (une ou deux fois) et
   tu retrouveras immédiatement ta commande « :w | !bash % »
   et tu pourras faire ENTER directement.

Voilà. J'espère que ça correspond à ton problème.

-- 
François Lafont


Reply to: