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

Nie*_*Bom 1 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>
Run Code Online (Sandbox Code Playgroud)

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

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

我宁愿不使用自动写入。

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

for*_*rk0 5

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

setlocal buftype=nofile noswapfile bufhidden=delete
Run Code Online (Sandbox Code Playgroud)

例如,我git 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
Run Code Online (Sandbox Code Playgroud)