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

时间:2018-11-26 07:58:20

标签: vim vim-fugitive

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

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

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

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

1 个答案:

答案 0 :(得分:1)

Fugitive插件在边栏非指责缓冲区中设置了自定义'filetype'(至fugitiveblame;通过:setlocal filetype?查询,或者在Vimscript中通过&l:filetype特殊变量)。仅当您当前在侧边栏中时,此功能才有效。同样,要使该功能适用​​于主窗口,您还必须检查缓冲区名称(例如,通过bufwinnr('fugitiveblame') != -1),然后再返回该窗口,然后调用:close(或使用{ {1}},其缓冲区号是通过:bdelete获得的。

bufnr('fugitiveblame')

注释

  • function! s:ToggleBlame() if &l:filetype ==# 'fugitiveblame' close else Gblame endif endfunction nnoremap gb :call <SID>ToggleBlame()<CR> 是(自定义)Ex命令;您可以在Vimscript中按原样调用它;这里不需要:Gblame
  • 如上所述,关闭侧边栏只是:normal
  • 我已经定义了 script-local函数; cp。 :help <SID>
  • You should use :noremap;它使映射不受重新映射和递归的影响。