NERDTree Jak otworzyć plik i automatycznie zamknąć bufor eksploratora

10

Podczas korzystania z wtyczki NERDTree domyślnym zachowaniem jest otwieranie nowego pliku i utrzymywanie bufora NERDTree otwartego. Chcę zachować to domyślne zachowanie, ale także przesłonić je, kiedy chcę, aby bufor NERDTree został zamknięty po otwarciu pliku.

Wiem, że mogę użyć let NERDTreeQuitOnOpen=1do automatycznego zamknięcia bufora NERDTree po otwarciu nowego pliku, ale ta opcja całkowicie zastępuje domyślne zachowanie (czego nie chcę).

Idealnie chciałbym wiedzieć, czy w NERDTree jest wbudowana funkcja robienia tego, co chcę. (Szukałem, ale niczego takiego nie znalazłem, więc przypuszczam, że tak naprawdę nie istnieje)

A jeśli to nie istnieje, miałem dwa pomysły:

  • Najpierw należy utworzyć funkcję, która ustawia NERDTreeQuitOnOpensię 1, otwiera plik, a następnie ustawia ponownie NERDTreeQuitOnOpenna 0.

  • Drugim jest utworzenie następującego mapowania: map d<CR> <CR> :NERDTree <CR> :bd<CR>który otwiera plik (pierwszy <CR>), wraca do bufora NERDTree ( :NERDTree <CR>) i zamyka ten bufor ( :bd <CR>). Powinienem to poprawić, aby mapowanie istniało tylko w buforze NERDTree, ale uważam, że jest to dość brzydkie rozwiązanie i myślę, że można to poprawić.

Który pomysł byłby najlepszy i dlaczego? Czy jest jeszcze lepsza opcja?

statox
źródło
1
Artykuł obowiązkowy: Olej i ocet - podzielone okna i szuflada projektu
Peter Rincker
@Peter: Dzięki za komentarz, artykuł jest dość interesujący i prawdopodobnie spróbuję netrw i koncepcji podzielonego odkrywcy. Myślę, że rozumiem zaletę tego, co wyjaśniono w tym artykule, ale problem polega na tym, że tak naprawdę nie rozwiązuje on mojego problemu, po prostu radzę zmienić narzędzie, którego używam. Nie jestem przeciwny zmianie nawyków, ale najpierw chciałbym rozwiązać problem, a następnie wypróbować nowe narzędzie :)
statox
Powiązane pytanie bez odpowiedzi na SU: superuser.com/q/821720/334516 . Może map d<cr> <cr>:NERDTreeClose<cr>do mapowania?
muru
@muru: Dziękuję, twoje mapowanie działa dobrze i wydaje się mniej brzydkie niż moje :) Jeśli chodzi o pytanie na SU, nie jestem pewien, czy jest to całkowicie powiązane, ponieważ chce otworzyć plik w buforze NERDTree, a ja chcę otwórz go w nowym buforze, a następnie zamknij bufor NERDTree: kończy się podzielonymi oknami, a ja chcę skończyć z 2 buforami nie w podzielonym oknie.
statox

Odpowiedzi:

5

Ponieważ wydaje się, że pytanie nie generuje wielu odpowiedzi, po prostu odpowiem na nie z sugestią @muru, z której korzystałem przez tydzień, zanim przełączyłem się na Eksploratora Netrw. (Oczywiście, jeśli pojawi się lepsza opcja odpowiedzi, chętnie zaznaczę moją jako zaakceptowaną i zaakceptuję nową)

Chodzi o użycie następującego mapowania:

map d<cr> <cr>:NERDTreeClose<cr>

Który otwiera plik w zwykły sposób, a następnie wywołuje funkcję zamykającą bufor NERDTree bez względu na to, gdzie znajduje się kursor.

EDYCJA: Niedawno wróciłem do NERDTree i przerobiłem moje rozwiązanie: mapowanie, które zasugerowałem wcześniej, działało, ale ponieważ istniało w każdym buforze, musiałem dwukrotnie naciskać za dkażdym razem, gdy chciałem usunąć coś, co jest dość denerwujące. (Może mogłem zmienić timeoutustawienia, ale podoba mi się sposób, w jaki jest obecnie ustawiony, a także nie chciałem mapować go na inną kombinację klawiszy).

Zastąpiłem więc moje pierwsze rozwiązanie następującymi liniami .vimrc:

autocmd BufEnter NERD_tree_* nmap  d<CR> <CR> :NERDTreeToggle <CR>
autocmd BufLeave NERD_tree_* unmap d<CR>

W ten sposób mapowanie jest tworzone tylko w NERDTreebuforach i nie zakłóca mojego przepływu pracy w innych buforach.

statox
źródło