Автоматически выходить из vim, если NERDTree является последним и единственным буфером
У меня есть следующее в моем.vimrc:
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Open NERDTree by default
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
autocmd VimEnter * NERDTree
autocmd VimEnter * wincmd p
Так,
% vim file.txt
открывает NERDTree и фокусирует курсор в буфере file.txt. Я делаю свои правки и нажимаю:q в буфере, и я остаюсь с.,, NERDTree. Это раздражает.
Я мог бы использовать:qa, чтобы закрыть все буферы, и выйти из vim, но я привык к:q trope. Поэтому мне интересно, есть ли способ обнаружить, что единственным оставшимся буфером является NERDTree, и "объединить" два буфера для целей:q
редактировать
Спросите, и вы получите: https://github.com/scrooloose/nerdtree/issues
5 ответов
function! s:CloseIfOnlyControlWinLeft()
if winnr("$") != 1
return
endif
if (exists("t:NERDTreeBufName") && bufwinnr(t:NERDTreeBufName) != -1)
\ || &buftype == 'quickfix'
q
endif
endfunction
augroup CloseIfOnlyControlWinLeft
au!
au BufEnter * call s:CloseIfOnlyControlWinLeft()
augroup END
Из моего vimrc, основанного на версии от репозитория Janus.
Улучшения: также закройте, если осталось только окно быстрого исправления. Он использует BufEnter
вместо автокоманды, которая требуется для &bt
работать правильно.
Идея нуждается в реализации:
Вы могли бы написать функцию, которая, при вызове, проверяет, является ли единственный оставшийся буфер (или, возможно, единственный буфер без помощи, если вы предпочитаете), буфером NERDTree и, если так, удаляет его (или просто выходит).
Затем пусть autocmd запускает его всякий раз, когда буфер удаляется / скрывается / что бы на самом деле не происходило, когда вы:q (мне стыдно признаться, что я не совсем уверен!).
Мне нравится делать это: cmap bq :bufdo q<CR>
закрыть все буферы двумя нажатиями клавиш в командном режиме.
Вы могли бы :cabbrv q qa
но я бы посоветовал против этого, потому что вы забудете об этом, когда на самом деле хотите q
,
Ответ @MrD хорошо работает для меня, я использую vim
8.1 из brew
на macOS.
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") && b:NERDTreeType == "primary") | q | endif