如何确定退出vim时文件是否被修改?
问题描述:
我调用从Perl程序vim编辑器以这样的方式:如何确定退出vim时文件是否被修改?
my $cmd = "vi myfile";
system($cmd);
然后我想根据执行不同的行动,文件的修改与否:
if(myfile was modified) {
doAction1;
}
else {
doAction2;
}
如何检查如果文件被修改或没有?我搜索了vim退出代码,但没有找到任何有用的东西。
答
制作一个脚本,引入了tmp文件:
MYTMP=/tmp/perltimestamp.$$
file=myfile
touch ${MYTMP}
vi ${file}
if [ $(find . -name ${file} -newer ${MYTMP} | wc -l) -gt 0 ]; then
rm ${MYTMP}
doAction1
} else {
rm ${MYTMP}
doAction2;
}
当然你也可以在外面的if-then-else的移动rm命令,当你doActions是快速,安全。
答
最简单的办法是检查文件的mtime
:
my $old_mtime = (stat $file)[9];
system('vi', $file);
if ((stat $file)[9] != $old_mtime) {
# file modified
}
答
的File::Modified
module封装MD5和修改时间检查(宁愿MD5如果安装File::MD5
):
use File::Modified;
my $detector = File::Modified->new(files=>[$filename]);
# [run the editor]
if($detector->changed) { # [...]
下面是一个完整的例子:
#!/usr/bin/perl
use File::Modified;
my $filename = 'myfile';
my $detector = File::Modified->new(files=>[$filename]);
my $cmd = "vi $filename";
system $cmd;
if($detector->changed) {
print "modified\n";
} else {
print "the same\n";
}
Hi @stanwar:if a ny答案已通过点击复选标记解决了您的问题,请考虑[接受它](http://meta.stackexchange.com/q/5234/179419)。这向更广泛的社区表明,您已经找到了解决方案,并为答复者和您自己提供了一些声誉。没有义务这样做。 – 2015-04-15 09:04:12