Подтвердить что ты не робот

Автоматически завершать 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

Edit

Спросите, и вы получите: https://github.com/scrooloose/nerdtree/issues#issue/21

4b9b3361

Ответ 1

A script, чтобы сделать именно это, было опубликовано в списке проблем NERDTree. Оформить заказ issue-21 в GitHub для nerdtree.

Это приводит к команде одиночной строки для вашего vimrc здесь:

autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif

Ответ 2

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 repo.

Улучшения: также закрываются, если остается только окно быстрого удаления. Вместо этого он использует автокоманду BufEnter, которая требуется для правильной работы &bt.

Ответ 3

Идея, нуждающаяся в реализации:

Вы можете написать функцию, которая при вызове проверяет, остается ли единственный оставшийся буфер (или, возможно, единственный буфер без помощи), является буфером NERDTree и, если это так, удаляет его (или просто завершает работу).

Затем запустите autocmd, когда буфер удаляется/скрывается/что на самом деле происходит, когда вы: q (мне стыдно признаться, что я не совсем уверен!).

Ответ 4

Вы могли бы :cabbrv q qa, но я бы посоветовал это, потому что вы забудете об этом, когда захотите q.

Ответ 5

Мне нравится делать это: cmap bq :bufdo q<CR>, чтобы закрыть все буферы с двумя нажатиями клавиш в командном режиме.