2

統一されたdiff形式の「cvsdiff」出力(プロジェクト内のすべてのファイル)があります。形式は次のようになります。

Index: somefile.cpp
===================================================================
RCS file: /CVS_repo/SomeProject/somefile.cpp,v
retrieving revision 1.19
diff -r1.19 somefile.cpp
31c31
<       return "Read line four times";
---
>       return "Read line five times";
36c36
<       return "Make a bad thing";
---
>       return "Make a good thing";
Index: otherfile.cpp
===================================================================
RCS file: /CVS_repo/SomeProject/otherfile.cpp,v
retrieving revision 1.19
<       ........
---
>       ........

またはこのようにさえ:

Index: somefile.cpp
===================================================================
RCS file: /CVS_repo/SomeProject/somefile.cpp,v
retrieving revision 1.19
diff -u -r1.19 somefile.cpp
--- somefile.cpp 13 Mar 2013 08:45:18 -0000      1.19
+++ somefile.cpp 26 Mar 2013 08:10:33 -0000
@@ -28,12 +28,12 @@
 //---------------------------------------------------------------------------
 extern "C" char *FuncGetSomeText()
 {
-       return "Read line four times";
+       return "Read line five times";
 }
 //---------------------------------------------------------------------------
 extern "C" char *FuncGetAwesomeText()
 {
-       return "Make a bad thing";
+       return "Make a good thing";
 }
 //---------------------------------------------------------------------------
Index: otherfile.cpp
===================================================================
RCS file: /CVS_repo/SomeProject/otherfile.cpp,v
retrieving revision 1.19
diff -u -r1.19 otherfile.cpp
--- otherfile.cpp 13 Mar 2013 08:45:18 -0000      1.19
+++ otherfile.cpp 26 Mar 2013 08:10:33 -0000
@@ -28,12 +28,12 @@
 //---------------------------------------------------------------------------
 extern "C" char *Func()
 {
-       .......
+       .......
 }
 //---------------------------------------------------------------------------

このテキストをvimと並べて表示する方法はありますか?または、cvsのデフォルトのdiffツールをvimdiffに変更することは可能ですか?

4

1 に答える 1

0

いくつかのsed魔法は私を助けます:

\cvs -n diff -u > ~diff.tmp; vim -O <(sed -r -e 's/^\+[^\+]+.*$//g;s/^\+$//g' ~diff.tmp) <(sed -r -e 's/^-[^-]+.*$//g;s/^-$//g' ~diff.tmp) +'set scb | set nowrap | wincmd w | set scb | set nowrap'

これは完璧な解決策ではありませんが、何もないよりはましです。このスクリプトの機能は次のとおりです。

\cvs -n diff -u > ~diff.tmp; 

CVS diff出力を統一形式(-uオプション)で一時ファイル〜diff.tmpに書き込みます。'\' charは、「cvs」コマンドのエイリアスを取得できないようにします。

(sed -r -e 's/^\+[^\+]+.*$//g;s/^\+$//g' ~diff.tmp)
(sed -r -e 's/^-[^-]+.*$//g;s/^-$//g' ~diff.tmp)

このコマンドは、〜diff.tmpからテキストを出力し、「+」および「-」記号で始まる行を空の行に置き換えます。

vim -O <(sed...) <(sed...) +'set scb | set nowrap | wincmd w | set scb | set nowrap'

それぞれにsedの出力がある2つのウィンドウ(-Oオプション)を開きます。コマンドに続いて「+」を設定し、最初のウィンドウにsrollbindをオンにしてnowrapを設定し、次に2番目のウィンドウに切り替えて(「wincmdw」を使用)、同じことを実行します

于 2013-04-12T07:09:26.040 に答える