J'ai trouvé les deux réponses existantes éducatives, et j'ai réussi à combiner les deux pour que le comportement soit plus proche de ce que beaucoup de gens attendent d'un IDE : Cliquez sur une fenêtre/buffer ouverte, et le fichier est mis en évidence dans le NERDTree. J'ai mis cela dans mon ~/.vimrc :
autocmd BufEnter * if &modifiable | NERDTreeFind | wincmd p | endif
Ce que ça fait :
-
autocmd BufEnter
- s'exécute chaque fois que vous vous concentrez sur un tampon (y compris la fenêtre NERDTree).
-
if &modifiable
- lorsque vous cliquez sur la fenêtre NERDTree, ne faites rien d'autre (la fenêtre NERDTree n'est pas modifiable)
-
wincmd p
- NERDTreeFind laisse le curseur sur l'arbre NERDTree ; cela permet de revenir à la fenêtre sur laquelle vous vous étiez initialement concentré.
Notez que cela ne fonctionnera pas sur tout autre buffer qui n'est pas modifiable -- mais c'est généralement une bonne chose ; autrement (par exemple) chaque fois que vous avez :help
dans vim, NERDTree trouverait et mettrait en avant le répertoire où sont stockés les fichiers d'aide - ce qui n'est probablement pas ce que vous voulez qu'il fasse.
Cette solution en une ligne a bien fonctionné pour moi au début, mais je me suis vite rendu compte qu'elle fait en sorte que NERDTree s'active chaque fois que j'ouvre un fichier - et par conséquent, elle empêche NERDTree de se fermer ! Si vous ne voulez pas utiliser NERDTree à plein temps, mettez ceci dans votre .vimrc à la place :
" 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()