Comment puis-je utiliser vim pour modifier le texte de Perl alors que le script est toujours en cours?

StackOverflow https://stackoverflow.com/questions/785967

  •  16-09-2019
  •  | 
  •  

Question

J'ai un script Perl qui affiche du texte. Je veux importer ce texte dans vim, le modifier, l'enregistrer et sortir. A la sortie, je veux que le script Perl d'origine pour traiter le fichier modifié.

par exemple. comment fonctionne crontab -e lorsque vous ajoutez un nouvel emploi.

Merci:)

Était-ce utile?

La solution

Sons comme un système très simple cas utiliser pour exécuter vim sur le nom du fichier. Cela attendra que vim se fait, à quel point vous pouvez aller de l'avant et de lire un nouveau contenu du fichier.

Autres conseils

use File::Temp;
my $fh = new File::Temp();
my $fname = $fh->filename;
print $fh "My Text";
$fh->close();
system($ENV{EDITOR}, $fname);
open $fh, '<', $fname or die "Can't open temp file: $!";
while(<$fh>) { print }
close $fh;

Une suggestion: pourquoi ne pas saisir la source à crontab et voir ce qu'il fait

Autre que cela, détendez-vous a votre réponse.

Et je pense que la façon de penser à ce sujet est:

«D'accord, je besoin d'un programme pour écrire un fichier, appelez vim, puis effectuez un traitement ultérieur du dossier. Donc, voici ma routine pour écrire le fichier, voici ma routine qui appelle vim (système à l'aide), et est ici ma routine pour faire le post-traitement après vim est fait. maintenant, je vais les lace tous ensemble dans mon programme principal, et je suis fait! »

Vous semblez vouloir redirigez la sortie de votre script dans vim:

script | vim

Et vous voulez que le script de savoir en quelque sorte que Vim est terminé et reprendre. Ce n'est pas de la redirection d'E / S fonctionne. Le script n'a aucune connaissance de ce programme sa sortie est canalisé dans.

Vous avez mentionné d'autres programmes comme crontab et cvs; une chose ceux qui ont en commun est que ils invoquent l'éditeur eux-mêmes . Ils créent des fichiers temporaires, lisez les variables d'environnement EDITOR ou VISUAL (vérifier le manuel pour plus de détails sur la façon dont ils choisissent un qui), exécutez le programme donné, et attendez que le programme pour terminer. Ensuite, ils continuent de courir et utiliser le fichier ils ont précisé plus tôt.

Je l'ai sur Turns fait exactement cela en Perl. J'ai créé un fichier temporaire (avec tempfile ), a écrit un tas de texte dans, puis utilisé system pour appeler la éditeur sur le fichier. Vous ne devez même pas fermer le fichier pendant que vous exécutez l'éditeur.

redirigez la sortie à vim - et ne pas oublier le tableau de bord à la fin.

script.pl | vim -

Ceci ouvrira vim avec le contenu de la sortie de scripts. Il suffit de l'enregistrer : w nom de fichier et sortie : q . Ce n'est pas comment fonctionne crontab -e, mais il est assez proche d'une manière facile.

Edit:
J'ai raté cette partie (ou peut-être la question a été éditée par la suite):

  

A la sortie, je veux le Perl d'origine   script pour traiter le fichier modifié.

Ce n'est pas la meilleure façon de le faire, mais aller avec ma première réponse, cela fonctionne (si vous enregistrez le fichier comme file.txt):

perl -le 'print "1234"' | vim - && perl -pe '' file.txt

Il suffit de remplacer les commandes Perl avec vos commandes Perl et il devrait fonctionner. Comme je l'ai dit, ce n'est pas la meilleure réponse, mais il devrait fonctionner.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top