From 30933405bbc77877d714260f4ad1cd4dadf34532 Mon Sep 17 00:00:00 2001 From: Tim Pope Date: Tue, 19 Oct 2021 11:41:13 -0400 Subject: [PATCH] Support blame maps without filetype plugin on References: https://github.com/tpope/vim-fugitive/issues/1745 --- autoload/fugitive.vim | 56 ++++++++++++++++++++++++------------------- 1 file changed, 32 insertions(+), 24 deletions(-) diff --git a/autoload/fugitive.vim b/autoload/fugitive.vim index 20f6ca4..c3a3dc8 100644 --- a/autoload/fugitive.vim +++ b/autoload/fugitive.vim @@ -228,7 +228,7 @@ function! s:Map(mode, lhs, rhs, ...) abort endwhile if !skip && (flags !~# '' || empty(mapcheck(head.tail, mode))) call add(maps, mode.'map ' . s:nowait . substitute(flags, '', '', '') . ' ' . head.tail . ' ' . a:rhs) - if a:0 > 1 + if a:0 > 1 && a:2 let b:undo_ftplugin = get(b:, 'undo_ftplugin', 'exe') . \ '|sil! exe "' . mode . 'unmap ' . head.tail . '"' endif @@ -3194,6 +3194,9 @@ function! s:TempReadPost(file) abort if dict.filetype ==# 'man' && has('nvim') let b:man_sect = matchstr(getline(1), '^\w\+(\zs\d\+\ze)') endif + if !get(g:, 'did_load_ftplugin') && dict.filetype ==# 'fugitiveblame' + call s:BlameMaps(0) + endif let &l:filetype = dict.filetype endif setlocal foldmarker=<<<<<<<<,>>>>>>>> @@ -7094,6 +7097,33 @@ function! s:BlameRehighlight() abort endfor endfunction +function! s:BlameMaps(is_ftplugin) abort + let ft = a:is_ftplugin + call s:Map('n', '', ':help :Git_blame', '', ft) + call s:Map('n', 'g?', ':help :Git_blame', '', ft) + if empty(mapcheck('q', 'n')) + nnoremap q :echoerr "fugitive: q removed in favor of gq (or :q)" + endif + call s:Map('n', 'gq', ':exe BlameQuit()', '', ft) + call s:Map('n', '<2-LeftMouse>', ':exe BlameCommit("exe BlameLeave()edit")', '', ft) + call s:Map('n', '', ':exe BlameCommit("exe BlameLeave()edit")', '', ft) + call s:Map('n', '-', ':exe BlameJump("")', '', ft) + call s:Map('n', 's', ':exe BlameJump("")', '', ft) + call s:Map('n', 'u', ':exe BlameJump("")', '', ft) + call s:Map('n', 'P', ':exe BlameJump("^".v:count1)', '', ft) + call s:Map('n', '~', ':exe BlameJump("~".v:count1)', '', ft) + call s:Map('n', 'i', ':exe BlameCommit("exe BlameLeave()edit")', '', ft) + call s:Map('n', 'o', ':exe BlameCommit("split")', '', ft) + call s:Map('n', 'O', ':exe BlameCommit("tabedit")', '', ft) + call s:Map('n', 'p', ':exe BlameCommit("pedit")', '', ft) + call s:Map('n', '.', ": =substitute(BlameCommitFileLnum()[0],'^$','@','')", ft) + call s:Map('n', '(', "-", ft) + call s:Map('n', ')', "+", ft) + call s:Map('n', 'A', ":exe 'vertical resize '.(linechars('.\\{-\\}\\ze [0-9:/+-][0-9:/+ -]* \\d\\+)')+1+v:count)", '', ft) + call s:Map('n', 'C', ":exe 'vertical resize '.(linechars('^\\S\\+')+1+v:count)", '', ft) + call s:Map('n', 'D', ":exe 'vertical resize '.(linechars('.\\{-\\}\\ze\\d\\ze\\s\\+\\d\\+)')+1-v:count)", '', ft) +endfunction + function! fugitive#BlameFileType() abort setlocal nomodeline setlocal foldmethod=manual @@ -7108,29 +7138,7 @@ function! fugitive#BlameFileType() abort if &modifiable return '' endif - call s:Map('n', '', ':help :Git_blame', '') - call s:Map('n', 'g?', ':help :Git_blame', '') - if empty(mapcheck('q', 'n')) - nnoremap q :echoerr "fugitive: q removed in favor of gq (or :q)" - endif - call s:Map('n', 'gq', ':exe BlameQuit()', '') - call s:Map('n', '<2-LeftMouse>', ':exe BlameCommit("exe BlameLeave()edit")', '') - call s:Map('n', '', ':exe BlameCommit("exe BlameLeave()edit")', '') - call s:Map('n', '-', ':exe BlameJump("")', '') - call s:Map('n', 's', ':exe BlameJump("")', '') - call s:Map('n', 'u', ':exe BlameJump("")', '') - call s:Map('n', 'P', ':exe BlameJump("^".v:count1)', '') - call s:Map('n', '~', ':exe BlameJump("~".v:count1)', '') - call s:Map('n', 'i', ':exe BlameCommit("exe BlameLeave()edit")', '') - call s:Map('n', 'o', ':exe BlameCommit("split")', '') - call s:Map('n', 'O', ':exe BlameCommit("tabedit")', '') - call s:Map('n', 'p', ':exe BlameCommit("pedit")', '') - call s:Map('n', '.', ": =substitute(BlameCommitFileLnum()[0],'^$','@','')") - call s:Map('n', '(', "-") - call s:Map('n', ')', "+") - call s:Map('n', 'A', ":exe 'vertical resize '.(linechars('.\\{-\\}\\ze [0-9:/+-][0-9:/+ -]* \\d\\+)')+1+v:count)", '') - call s:Map('n', 'C', ":exe 'vertical resize '.(linechars('^\\S\\+')+1+v:count)", '') - call s:Map('n', 'D', ":exe 'vertical resize '.(linechars('.\\{-\\}\\ze\\d\\ze\\s\\+\\d\\+)')+1-v:count)", '') + call s:BlameMaps(1) endfunction augroup fugitive_blame