Ich fand beide vorhandenen Antworten lehrreich und kombinierte sie erfolgreich, so dass das Verhalten eher so ist, wie es viele Leute von einer IDE erwarten würden: Klicken Sie auf ein geöffnetes Fenster / einen offenen Puffer und lassen Sie diese Datei im NERDTree hervorheben. Ich füge dies in meine ~ / .vimrc ein:
autocmd BufEnter * if &modifiable | NERDTreeFind | wincmd p | endif
Was dies bewirkt:
autocmd BufEnter
- wird jedes Mal ausgeführt, wenn Sie sich auf einen Puffer konzentrieren (einschließlich des NERDTree-Fensters)
if &modifiable
- Wenn Sie auf das NERDTree-Fenster klicken, tun Sie nichts anderes (das NERDTree-Fenster kann nicht geändert werden).
wincmd p
- NERDTreeFind lässt den Cursor auf dem NERDTree stehen. Dadurch kehren Sie zu dem Fenster zurück, auf das Sie sich ursprünglich konzentriert hatten
Beachten Sie, dass dies bei keinem anderen Puffer funktioniert , der nicht geändert werden kann. Dies ist jedoch im Allgemeinen eine gute Sache. Andernfalls (zum Beispiel) :help
würde NERDTree jedes Mal , wenn Sie sich in vim befinden, das Verzeichnis finden und fokussieren, in dem die Hilfedateien gespeichert sind - wahrscheinlich nicht, was Sie möchten.
Diese einzeilige Lösung hat anfangs sehr gut funktioniert, aber bald stellte sich heraus, dass NERDTree jedes Mal aktiviert wird, wenn ich eine Datei öffne. Dadurch wird verhindert, dass NERDTree jemals geschlossen wird! Wenn Sie NERDTree nicht in Vollzeit verwenden möchten, fügen Sie dies stattdessen in Ihre .vimrc-Datei ein:
" returns true iff is NERDTree open/active
function! rc:isNTOpen()
return exists("t:NERDTreeBufName") && (bufwinnr(t:NERDTreeBufName) != -1)
endfunction
" calls NERDTreeFind iff NERDTree is active, current window contains a modifiable file, and we're not in vimdiff
function! rc:syncTree()
if &modifiable && rc:isNTOpen() && strlen(expand('%')) > 0 && !&diff
NERDTreeFind
wincmd p
endif
endfunction
autocmd BufEnter * call rc:syncTree()
<Leader>f