Lorsque j'ouvre un nouvel onglet avec un chemin différent du fichier précédent dans VIM, NERDTree reste la même hiérarchie de répertoires que celle du fichier précédent.
Existe-t-il un raccourci de synchronisation pour changer le répertoire racine actuel en nouveau répertoire du fichier ouvert?
Je ne sais pas s'il existe un moyen spécifique à NERDTree de le faire, mais vous pouvez toujours configurer Vim pour qu'il définisse le répertoire de travail sur le répertoire du fichier actuel :
autocmd BufEnter * lcd %:p:h
Maintenant, tout ce que vous devez faire après avoir ouvert un fichier dans un nouvel onglet est :NERDTreeToggle
dans le nouvel onglet lui-même.
J'utilise le mappage suivant pour afficher le tampon actuel dans NERDTree:
map <leader>r :NERDTreeFind<cr>
J'ai trouvé les deux réponses existantes éducatives et les a combinées avec succès pour que le comportement ressemble davantage à celui que beaucoup de gens attendaient d'un IDE: Cliquez sur une fenêtre/mémoire tampon ouverte et mettez ce fichier en surbrillance dans l'arbre NERDTree. Je mets ceci dans mon ~/.vimrc:
autocmd BufEnter * if &modifiable | NERDTreeFind | wincmd p | endif
Qu'est-ce que cela 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 concentré sur le NERDTree; cela revient à la fenêtre sur laquelle vous vous concentriez à l'origineNotez que cela ne fonctionnera pas sur ni aucun autre tampon non modifiable - mais c'est généralement une bonne chose; sinon (par exemple) chaque fois que vous obtenez :help
dans vim, NERDTree rechercherait et mettrait en évidence le répertoire dans lequel les fichiers d’aide sont stockés - ce n’est probablement pas quelque chose que vous souhaitiez.
Cette solution à une ligne a très bien fonctionné pour moi au début, mais j’ai vite constaté qu’elle activait NERDTree à chaque fois que j’ouvrais un fichier. En conséquence, elle empêchait la fermeture de NERDTree! Si vous ne souhaitez pas utiliser NERDTree à plein temps, mettez ceci dans votre fichier .vimrc:
" 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()
jeter un signe% à la fin comme un patron
:NERDTree %
j'ai ceci dans mon .vimrc, il cartographie Ctrl+o pour basculer nerdtree dans le répertoire du tampon courant:
map <C-o> :NERDTreeToggle %<CR>
Je suis tombé sur cette question hier, après quelques heures de fouilles, j'ai soumis une demande de tirage à le dépôt de nerdtree de scrooloose introduction d'une commande NERDTreeCWD
qui change la racine de l'arborescence NERD en répertoire de travail actuel (Mise à jour le 12/11/2012: le PR a été fusionné dans le maître en amont, il devrait être utilisable dans une version mise à jour). Avec ce changement, cette question peut être simplement résolue par le code suivant.
autocmd BufEnter * silent! if bufname('%') !~# 'NERD_tree_' | cd %:p:h | NERDTreeCWD | wincmd p | endif
Comparez à l'approche de @ shinzui et @ Lambart NERDTreeFind
, cela correspond exactement à la question posée. Utiliser NERDTreeFind
changera la position de défilement du nerdtree et le résultat ne sera pas toujours le même (si CWD est dans la racine de l’arborescence NERD, il ne fait que développer le nœud au lieu de le changer).
Comparée à la réponse de @Yaser Sulaiman, cette solution a toujours une fenêtre arborescence NERD ouverte et peut être facilement codée. Si une fenêtre d'arborescence NERD a déjà été ouverte, l'utilisation de NERDTreeToggle
devra être déclenchée deux fois (fermez d'abord celle existante, puis ouvrez-la à nouveau). Malheureusement, la deuxième ouverture ignorera le traitement complet de cwd.
Cela se comporte comme :NERDTreeToggle
mais montrera le fichier actuellement ouvert dans NERDTree. Si vous n’avez pas encore ouvert de fichier (c’est-à-dire que vous venez de saisir vim
dans votre ligne de commande), NERDTree affiche /home
.
Mettez ceci dans votre .vimrc:
" Open NERDTree in the directory of the current file (or /home if no file is open)
nmap <silent> <C-i> :call NERDTreeToggleInCurDir()<cr>
function! NERDTreeToggleInCurDir()
" If NERDTree is open in the current buffer
if (exists("t:NERDTreeBufName") && bufwinnr(t:NERDTreeBufName) != -1)
exe ":NERDTreeClose"
else
exe ":NERDTreeFind"
endif
endfunction
J'applique les deux solutions de Modification du répertoire actuel à l'aide de NERDTree : utilisez cd
pour définir le répertoire de travail NERDTree sur le répertoire actuel et C
pour définir le nœud racine NERDTree sur le répertoire courant
J'ai trouvé que la réponse affichée par Matthias était une excellente réponse à un problème: cela ne fonctionne pas bien dans quelques cas Edge. Cela fonctionne un peu mieux avec le changement ci-dessous:
function! NERDTreeToggleInCurDir()
" If NERDTree is open in the current buffer
if (exists("t:NERDTreeBufName") && bufwinnr(t:NERDTreeBufName) != -1)
exe ":NERDTreeClose"
elseif bufname('%')
exe ":NERDTreeFind"
else
exe ":NERDTreeCWD"
endif
endfunction
Je pense que ce plugin est ce que vous voulez https://github.com/jistr/vim-nerdtree-tabs