Автоматически выходить из vim, если NERDTree является последним и единственным буфером - PullRequest
49 голосов
/ 14 января 2010

В моем .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, и «объединить» два буфера для целей:

Редактировать

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

Ответы [ 6 ]

85 голосов
/ 01 декабря 2010

Сценарий для именно этого был опубликован в списке проблем NERDTree. Оформить заказ Issue-21 на GitHub для nerdtree.

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

autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif
12 голосов
/ 23 марта 2011
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.

1 голос
/ 14 января 2010

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

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

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

0 голосов
/ 29 мая 2019

@ Ответ MrD у меня хорошо работает, я использую vim 8.1 из brew в macOS.

autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") && b:NERDTreeType == "primary") | q | endif 
0 голосов
/ 15 января 2010

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

0 голосов
/ 14 января 2010

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

...