diff --git a/autoload/fugitive.vim b/autoload/fugitive.vim index a814ee1..532c42c 100644 --- a/autoload/fugitive.vim +++ b/autoload/fugitive.vim @@ -6046,12 +6046,14 @@ function! fugitive#CanDiffoff(buf) abort return s:can_diffoff(bufnr(a:buf)) endfunction -function! s:diff_modifier(count) abort +function! s:DiffModifier(count, default) abort let fdc = matchstr(&diffopt, 'foldcolumn:\zs\d\+') if &diffopt =~# 'horizontal' && &diffopt !~# 'vertical' return '' elseif &diffopt =~# 'vertical' return 'vertical ' + elseif !get(g:, 'fugitive_diffsplit_directional_fit', a:default) + return '' elseif winwidth(0) <= a:count * ((&tw ? &tw : 80) + (empty(fdc) ? 2 : fdc)) return '' else @@ -6164,7 +6166,7 @@ function! fugitive#Diffsplit(autodir, keepfocus, mods, arg, args) abort try if exists('parents') && len(parents) > 1 exe pre - let mods = (autodir ? s:diff_modifier(len(parents) + 1) : '') . s:Mods(mods, 'leftabove') + let mods = (autodir ? s:DiffModifier(len(parents) + 1, empty(args)) : '') . s:Mods(mods, 'leftabove') let nr = bufnr('') if len(parents) > 1 && !&equalalways let equalalways = 0 @@ -6238,7 +6240,7 @@ function! fugitive#Diffsplit(autodir, keepfocus, mods, arg, args) abort exe pre let restore = s:diff_restore() let w:fugitive_diff_restore = restore - let mods = (autodir ? s:diff_modifier(2) : '') . mods + let mods = (autodir ? s:DiffModifier(2, empty(args)) : '') . mods if &diffopt =~# 'vertical' let diffopt = &diffopt set diffopt-=vertical diff --git a/doc/fugitive.txt b/doc/fugitive.txt index d70e7ab..9d7b015 100644 --- a/doc/fugitive.txt +++ b/doc/fugitive.txt @@ -185,10 +185,9 @@ that are part of Git repositories). commit is given, the current file in that commit. With no argument, the version in the index or work tree is used, and the work tree version is always - placed to the right or bottom. A vertical split is - used if space permits, and if 'diffopt' does not - otherwise specify. Use Vim's |do| and |dp| to stage - and unstage changes. + placed to the right or bottom, depending on available + width. Use Vim's |do| and |dp| to stage and unstage + changes. *:Gdiffsplit!* :Gdiffsplit! Diff against any and all direct ancestors, retaining @@ -205,7 +204,10 @@ that are part of Git repositories). :Gvdiffsplit [object] Like |:Gdiffsplit|, but always split vertically. *:Ghdiffsplit* -:Ghdiffsplit [object] Like |:Gdiffsplit|, but always split horizontally. +:Gdiffsplit ++novertical [object] +:Ghdiffsplit [object] Like |:Gdiffsplit|, but with "vertical" removed from + 'diffopt'. The split will still be vertical if + combined with |:vertical|. *:GMove* :GMove {destination} Wrapper around git-mv that renames the buffer