Vim 逃犯:切换“:Gblame”功能

Vim Fugitive: toggling ":Gblame" function

我在 vim 还是个新手所以我希望这个问题不是太基础,但我在逃犯的文档中找不到答案.. 我希望添加一个执行以下操作的切换功能:

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

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

我正在考虑添加一个变量,该变量根据我使用 "gb" 映射的次数在 1 或 0 之间变化。
但我真正想要的是一种检查缓冲区是否打开的方法。这可能吗?

Fugitive 插件在侧边栏责备缓冲区中设置自定义 'filetype'(至 fugitiveblame;通过 :setlocal filetype? 查询,或在 Vimscript 中通过 &l:filetype 特殊变量查询) .这仅在您当前位于侧边栏中时有效。为了让主 window 也能正常工作,您必须检查缓冲区名称(例如通过 bufwinnr('fugitiveblame') != -1),然后在调用 window 之前返回 window =16=](或使用 :bdelete 和通过 bufnr('fugitiveblame') 获得的缓冲区编号)。

function! s:ToggleBlame()
    if &l:filetype ==# 'fugitiveblame'
        close
    else
        Gblame
    endif
endfunction

nnoremap gb :call <SID>ToggleBlame()<CR>

备注

  • :Gblame 是一个(自定义)Ex 命令;你可以在 Vimscript 中按原样调用它;这里不需要:normal
  • 关闭侧边栏只是 :close 当你在其中时,如上所述。
  • 我定义了一个脚本局部函数; cp。 :help <SID>.
  • You should use :noremap;它使映射不受重新映射和递归的影响。