我还是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之间变化。
但是我真正想要的是一种检查缓冲区是否打开的方法。有可能吗?
答案 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
。:help <SID>
。:noremap
;它使映射不受重新映射和递归的影响。