dblume commited on 2023-04-25 21:52:21
Showing 1 changed files, with 18 additions and 4 deletions.
... | ... |
@@ -143,24 +143,37 @@ function! OpenCurrentAsNewTab() |
143 | 143 |
endfunction |
144 | 144 |
nmap <leader>o :call OpenCurrentAsNewTab()<CR> |
145 | 145 |
|
146 |
-" git blame, show, and diff |
|
146 |
+" git blame, show, diff and log |
|
147 | 147 |
" Delete these functions when you install https://github.com/tpope/vim-fugitive |
148 | 148 |
function! GitBlame() |
149 |
+ let l:hash = expand('<cword>') |
|
149 | 150 |
let l:currentView = winsaveview() |
150 |
- let l:fname = expand('%:t') |
|
151 |
- exec 'tabnew | r! git blame ' . shellescape(expand('%')) |
|
151 |
+ " If in a Blame window already, do blame for previous commit |
|
152 |
+ if l:hash =~ '^[0-9a-f]\{8,40}$' && stridx(expand('%'), ' -- ') != -1 |
|
153 |
+ let l:fname = split(expand('%'), ' -- ')[-1] |
|
154 |
+ exec 'tabnew | r! git blame ' . l:hash . '^ -- ' . shellescape(l:fname) |
|
155 |
+ exec 'silent :file git blame ' . l:hash . '^ -- ' . l:fname |
|
156 |
+ else |
|
157 |
+ let l:fname = expand('%') |
|
158 |
+ exec 'tabnew | r! git blame -- ' . shellescape(l:fname) |
|
159 |
+ exec 'silent :file git blame -- ' . l:fname |
|
160 |
+ endif |
|
161 |
+ 0d_ |
|
152 | 162 |
call winrestview(l:currentView) |
153 | 163 |
setl buftype=nofile |
154 |
- exec 'silent :file git blame ' . l:fname |
|
155 | 164 |
endfunction |
156 | 165 |
command Blame :call GitBlame() |
157 | 166 |
|
158 | 167 |
function! GitShow() |
159 | 168 |
let l:hash = expand('<cword>') |
169 |
+ if l:hash =~ '^[0-9a-f]\{8,40}$' |
|
160 | 170 |
exec 'tabnew | r! git show ' . l:hash |
161 | 171 |
setl buftype=nofile |
162 | 172 |
0d_ |
163 | 173 |
exec 'silent :file git show ' . l:hash |
174 |
+ else |
|
175 |
+ echo l:hash . ' is not a git hash.' |
|
176 |
+ endif |
|
164 | 177 |
endfunction |
165 | 178 |
command Show :call GitShow() |
166 | 179 |
|
... | ... |
@@ -192,6 +205,7 @@ function! GitLog() |
192 | 205 |
let l:fname = expand('%:t') |
193 | 206 |
exec 'tabnew | r! git log1 -- ' . shellescape(expand('%')) |
194 | 207 |
setl buftype=nofile |
208 |
+ 0d_ |
|
195 | 209 |
exec 'silent :file git log1 ' . l:fname |
196 | 210 |
endfunction |
197 | 211 |
command Log :call GitLog() |
198 | 212 |