我在.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”已更改。
无论如何都要从缓冲区中删除文件以及关闭垂直拆分窗口?
答案 0 :(得分: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.
一种选择是定义以下内容:
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")
......但由于某种原因,它对我不起作用。
答案 1 :(得分:1)
我通常为diff-buffers定义以下内容:
setlocal bt=nofile bh=wipe nobl noswf ro
nnoremap <buffer> q :bw<cr>
第一行是您的情况会有所不同(:h 'bh'
- &gt;不需要单个执行autcocommand),第二行只是一个快捷方式。
BTW:使用r! git
而不是生成临时文件。这样,您也不必清除该文件。
答案 2 :(得分:1)
您需要使用autocmd winleave bd(缓冲区删除)。请注意,如果您在多个窗口中打开缓冲区,则会将其全部删除。