blob: c88f05aa56f9bf23dcfcfcf8a8fd4a7faa74841f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
" Open a new split with a `git blame` of the current file
" Inspired by Ben Orenstein
" https://github.com/r00k/dotfiles/blob/7874508b825fd754e4ec3259da65f324ab96c8ea/vimrc#L74
function! git_blamer#Blame()
let l:line_number = line('.')
let l:buffer_name = shellescape(bufname('%'))
let l:buffer_number = bufnr('%')
setlocal scrollbind cursorbind
" Open new window
leftabove vnew
setlocal noswapfile nowrap nolist nobuflisted buftype=nofile bufhidden=wipe
setlocal scrollbind cursorbind
let b:git_blamer_restore = 'call setbufvar(' . l:buffer_number . ', "&scrollbind", 0) |
\ call setbufvar(' . l:buffer_number . ', "&cursorbind", 0)'
" Read in `git blame` output
execute 'read !git blame -w ' . l:buffer_name
" Delete empty first line
1 delete
setlocal nomodified nomodifiable
" Move cursor to position in starting file
call setpos('.', [0, l:line_number, 0, 0])
" Restore starting file's scrollbind on exit
autocmd BufWinLeave <buffer> execute b:git_blamer_restore
endfunction
|