Vim:打开一个我不想写的缓冲区

时间:2012-07-19 09:43:18

标签: vim diff

我刚刚在.vimrc中创建了一个新的映射,以便在新窗口中快速打开我正在使用的存储库的差异。

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""                                                
" Quickly see diff
" """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Open /tmp/tmp.diff in a new split
" delete the entire content
" read in the diff
nnoremap <leader>d :vsp /tmp/tmp.diff<CR>ggdG<bar>:r !hg diff<CR>
" Automatically write the diff when exiting the buffer so we're not asked to
" save it
autocmd! BufUnload /tmp/tmp.diff :w<CR>

正如您所看到的,我在退出缓冲区时使用BufUnload autocmd来保存文件,因为每次查看diff时我都不想手动写入文件。但我宁愿让Vim不要警告我。

那么有没有办法在Vim中打开一个缓冲区,如果它有未保存的内容则不关心它是否已关闭?如果我不必打开特定文件,而不是匿名缓冲区,我也会喜欢它。

我宁愿不使用autowrite。

(我只是Vim / Vimscript的初学者,所以如果我应该写一个函数请告诉我)

1 个答案:

答案 0 :(得分:4)

我在这样的缓冲区中有这个:

setlocal buftype=nofile noswapfile bufhidden=delete

例如,我在当前文件上运行git diff的热键(diff输出保存在这样的缓冲区中):

function Git_diff(fil)
    abo new
    exe '0read ++ff=unix !git diff -- ' . a:fil
    setlocal noma ro ts=8 tw=0 nowrap syn=diff ft=diff
    setlocal buftype=nofile noswapfile bufhidden=delete
    go
endfunction
map <f3> :call Git_diff(expand("%"))<CR>gg