2010-01-14 17 views
43

Mam następujących w moim .vimrc:Automatycznie rzucić vim jeśli NERDTree jest ostatni i tylko bufor

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" Open NERDTree by default 
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
autocmd VimEnter * NERDTree 
autocmd VimEnter * wincmd p 

Więc

% vim file.txt 

otwiera NERDTree i skupia kursor w buforze plik.txt . Wprowadzam zmiany i uderzam: q w buforze, i pozostaję z. . . NERDTree. To jest denerwujące.

Mogę użyć: qa, aby zamknąć wszystkie bufory i wyjść z vima, ale jestem przyzwyczajony do: q tropu. Więc zastanawiam się, czy istnieje sposób, aby wykryć, że bufor jedyne jest NERDTree i „ujednolicić” dwa bufory, dla celów: Q

Edit

Proście, a weźmiecie: https://github.com/scrooloose/nerdtree/issues#issue/21

Odpowiedz

68

Skrypt do wykonania tej czynności został opublikowany na liście problemów NERDTree. Zamówienie issue-21 na GitHub na nerdtree.

Prowadzi to do polecenia pojedynczej linii dla vimrc here:

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

Dzięki temu scenariusz jest dokładnie tym, czego szukałem. Prawdopodobnie powinieneś dostać czek, ale niestety, jest za późno. . . musisz zrobić coś z przegranym. – g33kz0r

+0

@Noah: możesz zmienić zaakceptowaną odpowiedź. – abcd

+0

@yoda to się stało. – g33kz0r

1

pomysł na potrzeby realizacji:

można napisać funkcję, która, kiedy nazywa, sprawdza czy tylko bufor pozostały (a może tylko bufor nie pomaga, jeśli wolisz) jest bufor NERDTree i , jeśli tak, kasuje go (lub po prostu zamyka).

Następnie uruchom autocmd za każdym razem, gdy bufor zostanie usunięty/ukryty/cokolwiek się stanie, gdy: q (to mnie wstyd przyznać, że nie jestem do końca pewien!).

+1

To właśnie robi http://stackoverflow.com/a/5403847/15690. – blueyed

+0

Świetnie! Widzę, że to twoja odpowiedź, na którą wskazuje twoje łącze - bardzo fajnie. (Dla jasności, ta odpowiedź jest sygnaturą czasową 13 miesięcy po tym, co napisałem 17 minut po tym, jak PO po raz pierwszy opublikowała swoje pytanie na temat SO ponad cztery i pół roku temu, więc zamierzam potraktować to jako część historycznej płyty i zostaw to tutaj.) –

0

Moglibyśmy :cabbrv q qa, ale odradzam, ponieważ zapomnisz o tym, kiedy faktycznie chcesz q.

0

Lubię to zrobić: cmap bq :bufdo q<CR>, aby zamknąć wszystkie bufory dwoma naciśnięciami klawiszy w trybie poleceń.

12
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 

z mojego vimrc, na podstawie wersji z janus repo.

Udoskonalenia: również zamknij, jeśli pozostało tylko okno szybkiego dostępu. Zamiast tego używa autokomendy BufEnter, która jest wymagana do poprawnego działania &bt.

+0

To działa pięknie –

Powiązane problemy