退出vim时如何确定文件是否被修改?

时间:2015-04-02 10:12:06

标签: perl vim

我正在以这种方式从perl程序中调用vim编辑器:

my $cmd = "vi myfile";
system($cmd);

然后我想根据文件的修改而执行不同的操作:

if(myfile was modified) {
    doAction1;
}
else {
    doAction2;
}

如何检查文件是否被修改?我搜索了vim退出代码,但没有找到任何有用的东西。

3 个答案:

答案 0 :(得分:3)

简单的方法是检查文件mtime

my $old_mtime = (stat $file)[9];
system( 'vi', $file );
if ( (stat $file)[9] != $old_mtime ) {
    # file modified
}

答案 1 :(得分:0)

制作一个介绍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;
}

当你的doActions快速安全时,你可以在if-then-else之外移动rm命令。

答案 2 :(得分:0)

File::Modified module封装了MD5和mtime检查(如果安装了File::MD5则更喜欢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";
}