Vim Fugitive: переключение функции ": Gblame" - PullRequest
0 голосов
/ 26 ноября 2018

Я все еще новичок в vim, так что я надеюсь, что этот вопрос не слишком простой, но я не смог найти ответ в DOCs беглеца. Я ищу добавить переключающую функцию, которая выполняет следующее:

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

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

Я думал о добавлении переменной, которая изменяется между 1 или 0 в зависимости от того, сколько раз я использовал отображение "gb".
Но что мне действительно нужно, так это способ проверить, является ли буфероткрыт.это возможно?

1 Ответ

0 голосов
/ 26 ноября 2018

Плагин Fugitive устанавливает пользовательский 'filetype' в буфере обвинений боковой панели (в fugitiveblame; запрашивается через :setlocal filetype? или в Vimscript через специальную переменную &l:filetype).Это работает только тогда, когда вы находитесь на боковой панели.Чтобы это работало и для главного окна, вам необходимо проверить имя буфера (например, через bufwinnr('fugitiveblame') != -1), а затем вернуться к этому окну, прежде чем вызывать :close (или использовать :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, когда вы в ней, как упоминалось выше.
  • Я определил script-localфункция ;ср.:help <SID>.
  • Вы должны использовать :noremap;это делает отображение невосприимчивым к переназначению и рекурсии.
...