我有一个输出文本的Perl脚本。我想将此文本导入vim,进行编辑,保存,然后退出。退出时,我希望原始的Perl脚本处理编辑后的文件。
例如,当您添加新作业时,
谢谢 :)
例如,当您添加新作业时,
crontab -e
如何工作。谢谢 :)
crontab -e
如何工作。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;
您似乎想将脚本的输出导入到vim中:
script | vim
然后,您希望脚本以某种方式知道Vim何时完成并继续执行。这不是I/O重定向的工作原理。脚本不知道其输出被导入到哪个程序中。
您提到了其他程序,如crontab
和cvs
; 它们共同之处在于它们自己调用编辑器。它们创建临时文件,读取EDITOR或VISUAL环境变量(有关如何选择哪个变量的详细信息,请查阅手册),运行给定程序,并等待程序完成。然后,它们继续运行并使用先前指定的文件。
事实证明我在Perl中确实做到了这一点。我创建了一个临时文件(使用tempfile
),将大量文本写入其中,然后使用system
调用编辑器对文件进行操作。您甚至可以在运行编辑器时不关闭文件。
script.pl | vim -
这将使用脚本输出的内容打开vim。只需保存它:w filename并退出:q。这不是crontab -e的工作方式,但以一种简单的方式接近。
编辑:
我错过了这部分(或者也许问题之后被编辑了):
退出时,我希望原始Perl脚本处理编辑后的文件。
这不是最好的方法,但按照我的原始答案,如果您将文件保存为file.txt,则可以使用此方法:
perl -le 'print "1234"' | vim - && perl -pe '' file.txt
只需用您的perl命令替换perl命令,它就应该可以工作。就像我说的那样,这不是最好的答案,但它应该可以工作。