Вы можете указать команду diff, которую вы хотите использовать в Subversion, с помощью переключателя командной строки --diff-cmd
или указав ее в конфигурации Subversion (которая $HOME/.subversion/config
для клиента командной строки Unix).
Главное, чтобы понять, какие параметры передаются вашей команде SVN diff:
- 4 th до последнего параметра - Название программы слева
- 3 rd до последнего параметра - название программы с правой стороны
- 2 и до последнего параметра - временный файл с левой стороны
- последнийПараметр - временный файл с правой стороны
Первые переданные параметры - это переключатели для команды Subversion diff.Например:
Вы можете использовать эту информацию для создания скрипта для просмотра файлов в VIM.Вот простой Perl:
#! /usr/bin/env 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) содержит командную строку.Я пытался использовать mvim
на моем Mac, но временные файлы были удалены до выполнения команды mvim
.
Теперь вы можете сделать это:
$ svn diff --diff-cmd mydiff -rPREV
И,если ваш скрипт находится в вашем PATH и является исполняемым, он должен работать.
Благодаря ZyX
Вот улучшенная программа, в которой содержатся предложения ZyX.Я должен был сделать некоторые изменения.Моя команда diff на самом деле mvim
на моей машине, и мне нужно передать два параметра (-d
, чтобы сказать, что это diff, и -f
, чтобы не бросать mvim
в фон).Это означало, что пропуск $DIFF
, как предложил ZyX, заставил бы мою команду 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
. Можем ли мы сказать Спасибо Microsoft за установкупробел в имени каталога, где все команды хранятся без веской причины? Я знал, что вы могли бы. Кстати, если каталог, в котором находится ваш редактор, находится в вашем PATH
, вам не нужно указывать полный каталогимя.
#! /usr/bin/env perl
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;