3

私の.vimrcにはこの非常に便利な関数があります:

function! MyGitDiff()
  !git cat-file blob HEAD:% > temp/compare.tmp
  diffthis
  belowright vertical new
  edit temp/compare.tmp
  diffthis
endfunction

基本的には、現在作業中のファイルをリポジトリから垂直分割ウィンドウで開き、それと比較します。元のファイルへの変更を簡単に比較できるため、これは非常に便利です。

ただし、問題があります。比較が終了したら、:qと入力して分割ウィンドウを削除します。ただし、これによってバッファリストからバッファが削除されることはなく、バッファリストにcompare.tmpファイルが表示されます。新しい比較を行うたびに次のメッセージが表示されるため、これは厄介です。

警告:編集を開始してから、ファイル「temp/compare.tmp」が変更されました。

垂直分割ウィンドウを閉じるだけでなく、バ​​ッファからファイルを削除する方法はありますか?

4

3 に答える 3

1

おそらくあなたはbwipeコマンドが必要ですか?

:bw[ipeout][!] N1 N2 ...
            Like |:bdelete|, but really delete the buffer.  Everything
            related to the buffer is lost.  All marks in this buffer
            become invalid, option settings are lost, etc.  Don't use this
            unless you know what you are doing.

1つのオプションは、以下を定義することです。

function! DelBuf(filename)
     let bname = bufname(filename)
     if l:bname != ""
         let bidx = buffer_number(l:bname)
         exec = "bw " . l:bidx
     endif
endfunction

DelBuf("comapre.tmp")関数の先頭にへの呼び出しを追加します。

DelBuf理論的には、次のように`bufhiddenイベントにバインドできるはずです。

autocmd! bufhidden "compare.tmp" call DelTmp("compare.tmp")

...しかし、何らかの理由でそれは私にとってはうまくいきませんでした。

于 2010-12-24T20:01:38.970 に答える
1

autocmd winleave bd(バッファ削除)を使用する必要があります。複数のウィンドウでバッファを開いている場合、それらはすべて削除されることに注意してください。

于 2010-12-25T11:38:03.677 に答える
1

私は通常、diff-buffersに対して次のことを定義します:

  setlocal bt=nofile bh=wipe nobl noswf ro
  nnoremap <buffer> q :bw<cr>

最初の行は、あなたのケースで違いを生むものです(:h 'bh'->単一の実行autococommandは必要ありません)。2行目は単なるショートカットです。

ところで:r! git一時ファイルを作成する代わりに使用してください。この方法では、そのファイルをクリアする必要もありません。

于 2010-12-24T21:58:32.183 に答える