config/.vim/ftplugin/git.vim

71 lines
2.6 KiB
VimL

"=============================================================================
" Copyright: Copyright © Pierre Habouzit
" Permission is hereby granted to use and distribute this code,
" with or without modifications, provided that this copyright
" notice is copied with it. Like anything else that's free,
" bufexplorer.vim is provided *as is* and comes with no
" warranty of any kind, either expressed or implied. In no
" event will the copyright holder be liable for any damages
" resulting from the use of this software.
" Description: git-commit(1) helper
" Maintainer: Pierre Habouzit <madcoder@debian.org>
" Last Changed: Mon, 26 Nov 2007 10:06:15 +0100
" Usage: This file should live in your ftplugin directory.
"
" The configurations variables are:
"
" g:git_diff_opts - options to add to git diff,
" (default "-C -C")
" g:git_diff_spawn_mode - use auto-split on commit ?
" * 1 == hsplit
" * 2 == vsplit
" * none else (default)
"
" The default keymaping is:
"
" <Leader>gd - view the diff in a hsplit
" <Leader>ghd - view the diff in a hsplit
" <Leader>gvd - view the diff in a vsplit
"========================================================================={{{=
if exists("b:did_ftplugin") | finish | endif
let b:did_ftplugin = 1
setlocal tw=74
setlocal nowarn nowb
function! Git_diff_windows(vertsplit, auto, opts)
if a:vertsplit
rightbelow vnew
else
rightbelow new
endif
silent! setlocal ft=diff previewwindow bufhidden=delete nobackup noswf nobuflisted nowrap buftype=nofile
exe "normal :r!LANG=C git diff --stat -p --cached ".a:opts."\no\<esc>1GddO\<esc>"
setlocal nomodifiable
noremap <buffer> q :bw<cr>
if a:auto
redraw!
wincmd p
redraw!
endif
endfunction
noremap <buffer> <Leader>gd :call Git_diff_windows(0, 0, g:git_diff_opts)<cr>
noremap <buffer> <Leader>ghd :call Git_diff_windows(0, 0, g:git_diff_opts)<cr>
noremap <buffer> <Leader>gvd :call Git_diff_windows(1, 0, g:git_diff_opts)<cr>
if !exists("g:git_diff_opts")
let g:git_diff_opts = "-C -C"
endif
if exists("g:git_diff_spawn_mode")
if g:git_diff_spawn_mode == 1
call Git_diff_windows(0, 1, g:git_diff_opts)
elseif g:git_diff_spawn_mode == 2
call Git_diff_windows(1, 1, g:git_diff_opts)
endif
endif
" }}}