Bram Moolenaar | a7241f5 | 2008-06-24 20:39:31 +0000 | [diff] [blame] | 1 | " Vim filetype plugin |
Bram Moolenaar | 5c73622 | 2010-01-06 20:54:52 +0100 | [diff] [blame] | 2 | " Language: git commit file |
| 3 | " Maintainer: Tim Pope <vimNOSPAM@tpope.org> |
Bram Moolenaar | 89bcfda | 2016-08-30 23:26:57 +0200 | [diff] [blame] | 4 | " Last Change: 2016 Aug 29 |
Bram Moolenaar | a7241f5 | 2008-06-24 20:39:31 +0000 | [diff] [blame] | 5 | |
| 6 | " Only do this when not done yet for this buffer |
| 7 | if (exists("b:did_ftplugin")) |
| 8 | finish |
| 9 | endif |
| 10 | |
| 11 | runtime! ftplugin/git.vim |
| 12 | let b:did_ftplugin = 1 |
| 13 | |
Bram Moolenaar | 89bcfda | 2016-08-30 23:26:57 +0200 | [diff] [blame] | 14 | setlocal comments=:# commentstring=#\ %s |
| 15 | setlocal nomodeline tabstop=8 formatoptions+=tl textwidth=72 |
| 16 | setlocal formatoptions-=c formatoptions-=r formatoptions-=o formatoptions-=q |
| 17 | let b:undo_ftplugin = 'setl modeline< tabstop< formatoptions< tw< com< cms<' |
Bram Moolenaar | a7241f5 | 2008-06-24 20:39:31 +0000 | [diff] [blame] | 18 | |
| 19 | if exists("g:no_gitcommit_commands") || v:version < 700 |
| 20 | finish |
| 21 | endif |
| 22 | |
| 23 | if !exists("b:git_dir") |
Bram Moolenaar | 7a32991 | 2010-05-21 12:05:36 +0200 | [diff] [blame] | 24 | let b:git_dir = expand("%:p:h") |
Bram Moolenaar | a7241f5 | 2008-06-24 20:39:31 +0000 | [diff] [blame] | 25 | endif |
| 26 | |
Bram Moolenaar | a7241f5 | 2008-06-24 20:39:31 +0000 | [diff] [blame] | 27 | command! -bang -bar -buffer -complete=custom,s:diffcomplete -nargs=* DiffGitCached :call s:gitdiffcached(<bang>0,b:git_dir,<f-args>) |
| 28 | |
Bram Moolenaar | 89bcfda | 2016-08-30 23:26:57 +0200 | [diff] [blame] | 29 | let b:undo_ftplugin = b:undo_ftplugin . "|delc DiffGitCached" |
| 30 | |
Bram Moolenaar | a7241f5 | 2008-06-24 20:39:31 +0000 | [diff] [blame] | 31 | function! s:diffcomplete(A,L,P) |
Bram Moolenaar | 7a32991 | 2010-05-21 12:05:36 +0200 | [diff] [blame] | 32 | let args = "" |
| 33 | if a:P <= match(a:L." -- "," -- ")+3 |
| 34 | let args = args . "-p\n--stat\n--shortstat\n--summary\n--patch-with-stat\n--no-renames\n-B\n-M\n-C\n" |
| 35 | end |
| 36 | if exists("b:git_dir") && a:A !~ '^-' |
| 37 | let tree = fnamemodify(b:git_dir,':h') |
| 38 | if strpart(getcwd(),0,strlen(tree)) == tree |
| 39 | let args = args."\n".system("git diff --cached --name-only") |
Bram Moolenaar | a7241f5 | 2008-06-24 20:39:31 +0000 | [diff] [blame] | 40 | endif |
Bram Moolenaar | 7a32991 | 2010-05-21 12:05:36 +0200 | [diff] [blame] | 41 | endif |
| 42 | return args |
Bram Moolenaar | a7241f5 | 2008-06-24 20:39:31 +0000 | [diff] [blame] | 43 | endfunction |
| 44 | |
| 45 | function! s:gitdiffcached(bang,gitdir,...) |
Bram Moolenaar | 7a32991 | 2010-05-21 12:05:36 +0200 | [diff] [blame] | 46 | let tree = fnamemodify(a:gitdir,':h') |
| 47 | let name = tempname() |
| 48 | let git = "git" |
| 49 | if strpart(getcwd(),0,strlen(tree)) != tree |
| 50 | let git .= " --git-dir=".(exists("*shellescape") ? shellescape(a:gitdir) : '"'.a:gitdir.'"') |
| 51 | endif |
| 52 | if a:0 |
| 53 | let extra = join(map(copy(a:000),exists("*shellescape") ? 'shellescape(v:val)' : "'\"'.v:val.'\"'")) |
| 54 | else |
| 55 | let extra = "-p --stat=".&columns |
| 56 | endif |
Bram Moolenaar | 53bfca2 | 2012-04-13 23:04:47 +0200 | [diff] [blame] | 57 | call system(git." diff --cached --no-color --no-ext-diff ".extra." > ".(exists("*shellescape") ? shellescape(name) : name)) |
Bram Moolenaar | 7a32991 | 2010-05-21 12:05:36 +0200 | [diff] [blame] | 58 | exe "pedit ".(exists("*fnameescape") ? fnameescape(name) : name) |
| 59 | wincmd P |
| 60 | let b:git_dir = a:gitdir |
| 61 | command! -bang -bar -buffer -complete=custom,s:diffcomplete -nargs=* DiffGitCached :call s:gitdiffcached(<bang>0,b:git_dir,<f-args>) |
Bram Moolenaar | 53bfca2 | 2012-04-13 23:04:47 +0200 | [diff] [blame] | 62 | nnoremap <buffer> <silent> q :q<CR> |
Bram Moolenaar | 7a32991 | 2010-05-21 12:05:36 +0200 | [diff] [blame] | 63 | setlocal buftype=nowrite nobuflisted noswapfile nomodifiable filetype=git |
Bram Moolenaar | a7241f5 | 2008-06-24 20:39:31 +0000 | [diff] [blame] | 64 | endfunction |