【问题标题】:Vim: Delete Buffer When Quitting Split WindowVim:退出拆分窗口时删除缓冲区
【发布时间】:2010-12-26 10:17:19
【问题描述】:

我的 .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”自编辑开始后已更改。

是否可以从缓冲区中删除文件以及关闭垂直拆分窗口?

【问题讨论】:

    标签: vim git-diff


    【解决方案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")
    

    ...但由于某种原因,它对我不起作用。

    【讨论】:

    • 好的,谢谢你的评论,它很有帮助,但这不是我想要的。看,问题在于缓冲区似乎与窗口分开。所以当你退出一个窗口时,你不会删除它正在编辑的缓冲区。我想知道这是否可能。
    • 你需要使用 vim autocmd 和事件 BufHidden 来自动运行 :bw 命令。当缓冲区不再可见时触发此事件(即与此缓冲区相关的所有窗口都已关闭)。
    【解决方案2】:

    您需要使用 autocmd winleave bd(缓冲区删除)。请注意,如果您在多个窗口中打开缓冲区,它们都将被删除。

    【讨论】:

      【解决方案3】:

      我通常为diff-buffers定义以下内容:

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

      第一行是什么会在你的情况下有所不同(:h 'bh' -> 不需要单次执行自动命令),第二行只是一个快捷方式。

      顺便说一句:使用r! git 而不是生成临时文件。这样,您也不必清除该文件。

      【讨论】:

        猜你喜欢
        • 2011-05-16
        • 2015-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-23
        • 1970-01-01
        • 2012-09-19
        • 2011-11-22
        相关资源
        最近更新 更多