2012-07-19 81 views
0

我刚刚在我的.vimrc中创建了一个新映射,以快速打开我在新窗口中工作的存储库的差异。Vim:打开一个我不想写入的缓冲区

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""             
" 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自动命令退出缓冲区时保存文件,因为我不希望我每次查看差异时手动写入。但我宁愿让Vim不要警告我。

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

我宁可不使用autowrite。

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

回答

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