aboutsummaryrefslogtreecommitdiffstats
path: root/ftplugin/gitcommit/gitcha.vim
diff options
context:
space:
mode:
Diffstat (limited to 'ftplugin/gitcommit/gitcha.vim')
-rw-r--r--ftplugin/gitcommit/gitcha.vim34
1 files changed, 34 insertions, 0 deletions
diff --git a/ftplugin/gitcommit/gitcha.vim b/ftplugin/gitcommit/gitcha.vim
new file mode 100644
index 0000000..e08f2e0
--- /dev/null
+++ b/ftplugin/gitcommit/gitcha.vim
@@ -0,0 +1,34 @@
+let s:old_completefunc = &completefunc
+
+function! GitSHAComplete(findstart, base)
+ if a:findstart
+ " locate the start of the word
+ let line = getline('.')
+ let start = col('.') - 1
+ while start > 0 && line[start - 1] =~ '\a'
+ let start -= 1
+ endwhile
+ return start
+ endif
+
+ " Restore user completion function
+ let &completefunc = s:old_completefunc
+
+ " Match Git SHAs in the current repository
+ let matches = []
+ let revs = system('git rev-list --all')
+ for m in split(revs)
+ if m =~ '^' . a:base
+ call add(matches, m)
+ endif
+ endfor
+
+ return matches
+endfunction
+
+function! StartGitSHACompletion()
+ set completefunc=GitSHAComplete
+ return "\<C-x>\<C-u>"
+endfunction
+
+inoremap <expr> <C-x><C-s> StartGitSHACompletion()