星期四, 6月 11, 2009

vim: diff between buffer and original file

上次看到學長用Emacs 可以把修改過的buffer 跟原檔案在編輯器裡面做diff,我就想vim 應該也可以。試了一下後來就成功了:
轉自: Vim Wiki
這個是我修改過的版本,做了toggle 的功能, map 到 \d (我的mapleader = \)
function! s:DiffWithSaved()
if exists("b:diffbuf")
unlet b:diffbuf
bdelete diffbuf
diffoff
else
let filetype=&ft
diffthis
vnew diffbuf| r # | normal! | ggdd
diffthis
exe "setlocal bt=nofile bh=wipe ro noswf ft=" . filetype
let b:diffbuf = 1
endif
endfunction
com! TDiffSaved call s:DiffWithSaved()
nmap <leader>d :TDiffSaved<CR>

-----------------------
另外我也在 vim online 找到一個 gitdiff.vim 用git 的時候也可以做出跟上面這樣一樣的效果,不過比對的對象是git repo 裡面的。而上面這個方法比對的對象是上一次存檔後的檔案跟現在的buffer

沒有留言: