Add git log to vim; make git diff optionally show last diff
dblume

dblume commited on 2023-02-12 20:43:38
Showing 4 changed files, with 24 additions and 9 deletions.

... ...
@@ -22,8 +22,6 @@ function! s:gotoline()
22 22
 		return
23 23
 	endif
24 24
 
25
-	" Don't commit this change. Just testing vimrc Diff command.
26
-
27 25
 	let file_name = names[1]
28 26
 	let line_num  = names[2] == ''? '0' : names[2]
29 27
 	let  col_num  = names[3] == ''? '0' : names[3]
... ...
@@ -162,10 +162,19 @@ command Show :call GitShow()
162 162
 function! GitDiff()
163 163
     let l:fname = expand('%:.')
164 164
     let l:buf = winbufnr(0)
165
-    exec ':tabnew | r! git show HEAD:$(git rev-parse --show-prefix)' . l:fname
165
+    let l:commit = 'HEAD'
166
+
167
+    " If the buffer is not different then repo, then diff HEAD vs file's previous commit
168
+    let l:o = system("git status --porcelain | grep " . l:fname)
169
+    if v:shell_error != 0
170
+        let l:commit = system('git log -2 --pretty=format:"%h" -- ' . l:fname . ' | tail -n 1')
171
+    endif
172
+
173
+    " Bug if l:filename includes ".."
174
+    exec ':tabnew | r! git show ' . l:commit . ':$(git rev-parse --show-prefix)' . l:fname
166 175
     setl buftype=nofile
167 176
     0d_
168
-    exec 'silent :file git show HEAD:' . l:fname
177
+    exec 'silent :file git show '.l:commit.':' . l:fname
169 178
     exec 'vert sb '.l:buf
170 179
     windo diffthis
171 180
     setl buftype=nofile
... ...
@@ -174,6 +183,14 @@ function! GitDiff()
174 183
 endfunction
175 184
 command Diff :call GitDiff()
176 185
 
186
+function! GitLog()
187
+    let l:fname = expand('%:t')
188
+    exec 'tabnew | r! git log1 -- ' . shellescape(expand('%'))
189
+    setl buftype=nofile
190
+    exec 'silent :file git log1 ' . l:fname
191
+endfunction
192
+command Log :call GitLog()
193
+
177 194
 " pastetoggle
178 195
 nmap <leader>p :set invpaste paste?<cr>
179 196
 
... ...
@@ -1,6 +1,6 @@
1 1
 The MIT License (MIT)
2 2
 
3
-Copyright (c) 2016-2018 David Blume
3
+Copyright (c) 2016-2023 David Blume
4 4
 
5 5
 Permission is hereby granted, free of charge, to any person obtaining a copy
6 6
 of this software and associated documentation files (the "Software"), to deal
... ...
@@ -6,8 +6,8 @@ in new user home directories.
6 6
 ### Getting the project
7 7
 
8 8
 You can get a copy of this project by clicking on the
9
-[ZIP](http://git.dlma.com/dotfiles.git/zipball/main)
10
-or [TAR](http://git.dlma.com/dotfiles.git/tarball/main) buttons
9
+[ZIP](https://git.dlma.com/dotfiles.git/zipball/main)
10
+or [TAR](https://git.dlma.com/dotfiles.git/tarball/main) buttons
11 11
 near the top right of the GitList web page.
12 12
 
13 13
 With an account, you can clone from the origin with:
... ...
@@ -20,7 +20,7 @@ If you're not cloning the repo, then run the following:
20 20
 
21 21
     ~$ mkdir dotfiles
22 22
     ~$ cd dotfiles
23
-    dotfiles$ curl -L http://git.dlma.com/dotfiles.git/tarball/main > dotfiles.tar
23
+    dotfiles$ curl -L https://git.dlma.com/dotfiles.git/tarball/main > dotfiles.tar
24 24
     dotfiles$ tar -xvf dotfiles.tar
25 25
     dotfiles$ rm dotfiles.tar
26 26
 
... ...
@@ -84,5 +84,5 @@ pinned to a version, `pip install` requirements.in instead of requirements.txt.
84 84
 
85 85
 ### License
86 86
 
87
-This software uses the [MIT license](http://git.dlma.com/dotfiles.git/blob/main/LICENSE.txt).
87
+This software uses the [MIT license](https://git.dlma.com/dotfiles.git/blob/main/LICENSE.txt).
88 88
 
89 89