On Wed, Oct 18, 2006 at 11:07:54AM +0200, Pierre Habouzit wrote: > well the result file is here: > http://madism.org/~madcoder/dotfiles/vim/ftplugin/git.vim I was able to grab it...my comments are below. > if exists("b:did_ftplugin") > finish > endif > > let b:did_ftplugin = 1 > > setlocal tw=74 > setlocal nowarn nowb Do things like tw really have anything to do with the ftplugin? Shouldn't they instead go into the user's vimrc? > "{{{ function Git_diff_windows > > function! Git_diff_windows(vertsplit, auto) > let i = 0 > let list_of_files = '' > > " drop everything until '# (will commit)' and the next empty line > while i <= line('$') > let line = getline(i) > if line =~ '^#\s*(will commit)$' > let i = i + 2 > break > endif > > let i = i + 1 > endwhile > > " read file names until we have EOF or an empty line > while i <= line('$') > let line = getline(i) > if line =~ '^#\s*[a-z ]*:.*->.*$' > let file = substitute(line, '\v^#[^:]*:.*->\s*(.*)\s*$', '\1', '') > let list_of_files = list_of_files . ' '.file > let file = substitute(line, '\v^#[^:]*:\s*(.*)\s*->.*$', '\1', '') > let list_of_files = list_of_files . ' '.file > elseif line =~ '^#\s*[a-z ]*:' > let file = substitute(line, '\v^#[^:]*:\s*(.*)\s*$', '\1', '') > let list_of_files = list_of_files . ' '.file > elseif line =~ '^#\s*$' > break > endif > > let i = i + 1 > endwhile > > if list_of_files == "" > return > endif > > if a:vertsplit > rightbelow vnew > else > rightbelow new > endif This all looks OK to me, but then I don't really know vim script very well. :) > silent! setlocal ft=diff previewwindow bufhidden=delete nobackup noswf nobuflisted nowrap buftype=nofile > let gitDir = system('git rev-parse --git-dir 2>/dev/null') > let gitDir = substitute(gitDir, '.git\n', '', '') > let wd = getcwd() > if gitDir != '' > exe 'cd '.gitDir > endif > exe 'normal :r!LANG=C git diff HEAD -- ' . list_of_files . "\n1Gdd" > exe 'normal :r!LANG=C git diff HEAD -- ' . list_of_files . " \| git apply --stat\no\<esc>1GddO\<esc>" > exe 'cd '.wd > setlocal nomodifiable This procedure seems a bit hack-ish and fragile. I think the chdir is necessary not just to handle autochdir, but also because we want to do any diff from the top-level instead of a subdir. Why do we unconditionally set LANG=C? What about quoting for the file list? In general, is this really that much nicer than simply using the '-v' flag to git-commit? > if g:git_diff_spawn_mode == 1 > call Git_diff_windows(0, 1) > elseif g:git_diff_spawn_mode == 2 > call Git_diff_windows(1, 1) > endif This should probably handle the case where g:git_diff_spawn_mode is not defined (otherwise vim complains loudly): if exists("g:git_diff_spawn_mode") " do nothing elseif g:git_diff_spawn_mode == 1 etc. -Peff - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html