您可以通过Subversion的
--diff-cmd
命令行选项或在Subversion配置文件中指定自己想要使用的diff命令(Unix命令行客户端的配置文件为
$HOME/.subversion/config
)。最重要的是了解向您的SVN diff命令传递了哪些参数:
- 倒数第四个参数 - 左侧程序标题
- 倒数第三个参数 - 右侧程序标题
- 倒数第二个参数 - 左侧临时文件
- 最后一个参数 - 右侧临时文件
首先传递的参数是用于Subversion diff命令的开关。例如:
您可以利用这些信息创建一个查看VIM文件的脚本。这里是一个简单的Perl脚本:
use strict;
use warnings;
my $diff = "/usr/bin/vimdiff";
my $num_of_params = $#ARGV;
my $file1 = $ARGV[$num_of_params - 1];
my $file2 = $ARGV[$num_of_params];
my $title1 = $ARGV[$num_of_params - 4];
my $title2 = $ARGV[$num_of_params - 3];
my $title = "$title1 - $title2";
$title =~ s/\t/ /g;
$title =~ s/ /\\ /g;
system qq($diff -c "set titlestring=$title" "$file1" "$file2");
您必须确保您的system
命令(如vimdiff)保持命令行。我曾尝试在我的Mac上使用mvim
,但是临时文件在mvim
命令执行之前被删除了。
现在,您可以这样做:
$ svn diff --diff-cmd mydiff -rPREV
如果您的脚本在路径中并且可执行,它应该可以工作。
感谢ZyX
以下是采纳了ZyX的建议后改进的程序。我不得不进行一些更改。我的diff命令实际上是mvim
,我需要传入两个参数(-d
表示它是一个diff,-f
表示不将mvim
置于后台)。这意味着像ZyX建议的那样传递$DIFF
会导致我的system
命令认为mvim -d -f
是我的命令,然后出现错误。为了解决这个问题,我将命令存储在数组中。顺便说一下,我也将数组设置为常量。
以下是程序代码。将DIFF
更改为指向您的diff命令(可能是vimdiff
,gvim -d -f
或vim -d
)。如果您在Windows上,并且完整路径位于C:/Program Files/Vim
下,则可以使用C:/Progr~1/Vim
来去除空格。否则,您需要执行以下操作:
use constant DIFF => ('C:/Program Files/Vim/VIM73/gvim', '-f', '-d')
由于您无法使用qw
,我们能不能说“感谢微软为没有任何理由将所有命令存储的目录名称中加入空格?” 我知道你可以。顺便说一句,如果您的编辑器所在的目录在PATH
中,您不需要指定完整的目录名称。
use strict;
use warnings;
use constant DIFF => qw(mvim -d -f);
my $parameters = $#ARGV;
my $file1 = $ARGV[$parameters - 1];
my $file2 = $ARGV[$parameters];
my $title1 = $ARGV[$parameters - 4];
my $title2 = $ARGV[$parameters - 2];
$ENV{TITLE} = "$title1 - $title2";
system DIFF, '-c', 'let &titlestring=$TITLE', $file1, $file2;