NERDTree Come aprire un file e chiudere automaticamente il buffer di Explorer


10

Quando si utilizza il plug-in NERDTree, il comportamento predefinito è aprire un nuovo file e mantenere aperto il buffer NERDTree. Quello che voglio fare è mantenere questo comportamento predefinito ma anche sovrascriverlo quando voglio, quindi il buffer NERDTree verrà chiuso dopo aver aperto un file.

So che posso usare let NERDTreeQuitOnOpen=1per chiudere automaticamente il buffer NERDTree quando apro un nuovo file ma questa opzione ignora totalmente il comportamento predefinito (che non è quello che voglio).

Idealmente, vorrei sapere se esiste una funzionalità integrata in NERDTree per fare ciò che voglio. (Ho cercato ma non ho trovato nulla del genere, quindi suppongo che in realtà non esista)

E se ciò non esiste, avevo due idee:

  • Il primo è creare una funzione che dovrebbe essere impostata NERDTreeQuitOnOpensu 1, aprire il file e quindi reimpostare NERDTreeQuitOnOpensu 0.

  • Il secondo è creare il seguente mapping: map d<CR> <CR> :NERDTree <CR> :bd<CR>che apre il file (prima <CR>), torna al buffer NERDTree ( :NERDTree <CR>) e chiude questo buffer ( :bd <CR>). Dovrei migliorarlo in modo che la mappatura esista solo nel buffer NERDTree ma penso che sia una soluzione piuttosto brutta e penso che possa essere migliorata.

Quale idea sarebbe la migliore e perché? O c'è un'opzione ancora migliore?



@Peter: Grazie per il tuo commento, l'articolo è piuttosto interessante e probabilmente proverò a netrw e al concetto di split explorer. Penso di capire il vantaggio di ciò che è spiegato nell'articolo, ma il problema è che in realtà non risolve il mio problema, ma consiglia di cambiare lo strumento che uso. Non sono contrario a cambiare le mie abitudini, ma vorrei prima risolvere il mio problema e poi provare un nuovo strumento :)
statox

Domanda relativa e senza risposta su SU: superuser.com/q/821720/334516 . Forse map d<cr> <cr>:NERDTreeClose<cr>per la mappatura?
muru,

@muru: Grazie, la tua mappatura funziona bene e sembra meno brutta della mia :) Per quanto riguarda la domanda su SU, non sono sicuro che sia totalmente correlato poiché vuole aprire il file nel buffer di NERDTree mentre voglio aprilo in un nuovo buffer e poi chiudi NERDTree buffer: finisce con una finestra divisa mentre voglio finire con 2 buffer non in una finestra divisa.
statox

Risposte:


5

Poiché la domanda non sembra generare molta risposta, risponderò semplicemente con il suggerimento di @muru, che è quello che ho usato per una settimana prima di passare al netrw explorer. (Naturalmente se viene visualizzata una risposta migliore per l'opzione, deselezionerò volentieri la mia come accettata e accetterò quella nuova)

L'idea è di utilizzare la seguente mappatura:

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

Il che apre il file come di solito viene fatto e quindi chiama la funzione che chiude il buffer NERDTree indipendentemente da dove si trova il cursore.

EDIT: Di recente sono tornato a NERDTree e ho rielaborato la mia soluzione: la mappatura che avevo suggerito prima funzionava, ma dato che esisteva in ogni buffer ho dovuto premere ddue volte ogni volta che volevo cancellare qualcosa che è piuttosto fastidioso. (Forse avrei potuto cambiare le timeoutimpostazioni ma mi piace il modo in cui è attualmente impostato per me, inoltre non volevo mapparlo su un'altra combinazione di tasti).

Quindi ho sostituito la mia prima soluzione con le seguenti righe alla mia .vimrc:

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

In questo modo la mappatura viene creata solo nei NERDTreebuffer e non interferisce con il mio flusso di lavoro negli altri buffer.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.