2017-09-14 5 views
2

私は自分自身と比較したいファイルがあります。最初のファイルは元のファイルで、2番目のファイルは開発中のファイルです。 1つの方法はgit diffですが、オリジナル自体が変更され、まだステージングされていない場合は、動作しません。別の方法は、ファイルシステム上にそのコピーを作成し、diffおよびwatchコマンドを使用することです。これは、一時ファイルの作成と削除のために効率的ではありません。VIMや他の方法でファイルを比較する

VIMでdodiffコマンドを試してみたいと思います。 VIMはメモリにバッファとしてファイルを格納することができます。したがって、どうすればよいのですか?

ファイルはvim環境からは変更されず、外部エディタから変更されます。

例:

  1. FILE1.TXT - オリジナル
  2. この内容は今のvim
  3. にファイルの内容が再び変更されているFILE1.TXT
  4. 負荷FILE1.TXTに変更されています
  5. 3と比較4
  6. ファイルの内容が再び変更されます
  7. 3と6を自動的に比較します。自動リフレッシュのようなものかもしれません。
+0

:editまたは:checktimeコマンドを使用してのvimに再ロードする必要があります

以降の変更はhttps://stackoverflow.com/questions/16802629/diff-of-current-and-previous-version-usingこれを試してください-vim-fugitive – Edwin

+0

@Edwin i shudはクリアされており、ファイルはvim環境の外部から変更されています。関連記事では、vimの内部からリビジョンが維持されています。 – infoclogged

+0

そして4番目のステップの後にコミットは行われませんでした。 – Edwin

答えて

1

別の解決策は、これはエドウィンの答えを完了することです(あなたはfile1.txtを持っているとき)新しいバッファ(一時ファイル):vert diffsplit file1.txt~を作成し、この新しいバッファに:read file1.txt

+0

答えへのさらなるコメントは以下の別の答えに書かれています... – infoclogged

2

Vimの内部では、編集されたファイルはメモリのバッファに読み込まれます。特定の時点でファイルの内容の「スナップショット」を作成するには、新しいバッファを作成し、元のバッファの内容を:%yank | new %.snapshot | put | 1delete _(デフォルトのレジスタを破棄する)または:let contents = getline(1, '$') | new %.snapshot | call setline(1, contents)(長い)のいずれかを使用してコピーします。 、またはより快適に私のclone pluginを介して:SCloneAs %.snapshot

:set autoreadで、元のバッファは自動的にVimの外部で行われた変更に更新されます。その後、両方のウィンドウを:windo diffthisで差分し、diff(必要に応じて)を:diffupdateで更新できます。

もちろん、:SCloneAs %.snapshot2で新しいスナップショットを作成することもできます。 :bdelete経由でスナップショットを削除してください。

2

をコンテンツを読ん:windo diffthis を開始することとなり、それはコメントに収まりません。

もう1つの解決策は、test.yml vim test.ymlをロードしてから:windo diffthisをロードすることです。 新しいバッファ(一時ファイル):vert diffsplit test_original.ymlを作成し、この新しいバッファ:read test.ymlの内容を読み取ります。

この時点では、test_original.ymlとtest.ymlの2つのウィンドウが必要です。 test_original.ymlの最初の行(dd)を削除する必要があります。これは、読み込みがファイルに追加され、余分な行があるためです。ここでの問題は、vimがすべての行を変更したものとしてマークすることです。

enter image description here

、これを修正:diffoffを実行し、再び:windo diffthisするために。今は1行しか表示されません。

最後に、変更を外部的にtest.ymlに行い、変更を確認する場合は:editを実行します。これで、元のファイルと変更されたファイルの間の変更のみが表示されます。一度オーバー

enter image description here

、ちょうどQAで終了! test_original.ymlは書かれていないので(w)、ファイルシステム上のコピーは作成されていません。外部から、

+0

最初の行の 'dd'を実行した後に':set autoread'を使うとdiffを得ることができます – Edwin

関連する問題