我有一个Perl脚本,输出文本。我想这个文本导入VIM,编辑,保存,然后退出。退出时,我想原来的Perl脚本来处理编辑的文件。

E.G。当您添加一个新的工作crontab -e是如何工作的。

感谢:)

有帮助吗?

解决方案

听起来非常普通情况下使用系统以上的文件名运行VIM。这将等到vim的完成,此时你可以继续读取文件的新的内容。

其他提示

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;

有一个建议:你为什么不抓源头crontab然后看看会发生什么。

除此之外,放松有你的答案。

我想思考这个问题的方法是:

“好吧,我需要一个程序写出来的文件,调用VIM,然后执行该文件进一步的处理。所以,这里是我的家常便饭写入文件,这里是我的家常便饭,调用VIM(使用系统),和这里的我的日常做VIM后的后处理就完成了。现在,我会花边他们都聚集在我的主要程序,我做!“

您似乎想管你的脚本输出到VIM:

script | vim

然后你想要的脚本以某种方式知道Vim的结束和恢复。这不是如何I / O重定向工作。文字没有什么节目其输出被管道输送到知识。

您提到像crontabcvs其他方案;一样东西都有一个共同点,就是他们调用编辑器本身。他们创建的临时文件,阅读EDITOR或VISUAL环境变量(检查手册,详细了解他们是如何选择哪一个),运行规定的程序,等待程序完成。然后他们继续运行,并使用他们先前指定的文件。

原来我正是这样做了Perl编写的。我创建的临时文件( tempfile ),写了一串文本到它,然后使用 system 以调用编辑上的文件。你甚至不必当你运行编辑器来关闭该文件。

管道输出到 VIM - 不要忘记在结束前围。

script.pl | vim -

这将打开VIM与脚本输出的内容。只需将它保存的:W文件名的和出口的:Q 的。这是-e并不怎么crontab的工作原理,但它有一个简单的方法足够接近。

编辑:结果 我错过这部分(或可能的问题是后来编):

  

在出口处,我想原来的Perl   脚本来处理已编辑的文件。

这是没有做到这一点的最好办法,但我原来的答复去,这个工作(如果你将该文件保存为file.txt的):

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

只需更换与你的Perl命令perl的命令,它应该工作。就像我说的,这不是最好的答案,但它应该工作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top