vimvim-fugitive

Vim Fugitive: toggling ":Gblame" function


I'm still kinda new in vim so i hope this question isn't too basic, but I couldn't find an answer in fugitive's DOCs.. im looking to add a toggling function that does the following:

if :Gblame buffer is open:
     close buffer
else 
     execute "normal :Gblame<CR>"
endif

map gb :call (the above function)<CR>

I was thinking of adding a variable that changes between 1 or 0 depending on the number of times i used the "gb" mapping.
But what i would really want is a way to check if the buffer is open. is that possible?


Solution

  • The Fugitive plugin sets a custom 'filetype' in the sidebar blame buffer (to fugitiveblame; queried via :setlocal filetype?, or in Vimscript via the &l:filetype special variable). This only works when you're currently in the sidebar. To make this work for the main window, too, you'd have to check for the buffer name (e.g. via bufwinnr('fugitiveblame') != -1), and then also go back to that window before calling :close (or using :bdelete with the buffer number obtained via bufnr('fugitiveblame')).

    function! s:ToggleBlame()
        if &l:filetype ==# 'fugitiveblame'
            close
        else
            Gblame
        endif
    endfunction
    
    nnoremap gb :call <SID>ToggleBlame()<CR>
    

    Notes