我如何使用vim从Perl的编辑文本,而脚本仍在运行?
-
16-09-2019 - |
题
我有一个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重定向工作。文字没有什么节目其输出被管道输送到知识。
您提到像crontab
和cvs
其他方案;一样东西都有一个共同点,就是他们调用编辑器本身。他们创建的临时文件,阅读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的命令,它应该工作。就像我说的,这不是最好的答案,但它应该工作。