NerdTree - Révéler le fichier dans l'arborescence


101

Existe-t-il un raccourci qui révèle le fichier actuel dans le panneau du répertoire NerdTree.

Comme TextMate 'Révéler le fichier dans le tiroir' - Ctrl + Commande + R

Réponses:


186

dans: h NERDTree:

:NERDTreeFind                                                  :NERDTreeFind
    Find the current file in the tree. If no tree exists for the current tab,
    or the file is not under the current root, then initialize a new tree where
    the root is the directory of the current file.

Je ne pense pas que ce soit lié à quoi que ce soit par défaut, vous devez donc faire un raccourci clavier vous-même.

nmap ,n :NERDTreeFind<CR>

est ce qui apparaît dans mon .vimrc, avec

nmap ,m :NERDTreeToggle<CR>

Le keymapping fonctionne, mais comment invoquer NERDTreeFind dans vim?
azatar

9
@toszter just:NERDTreeFind
Thomas

1
Y a-t-il un moyen de le configurer pour le faire chaque fois que le NERDTree est créé dans cet onglet?
Mr Mikkél

1
@MrA vous ne pouvez créer le NERDTree qu'avec la commande NERDTreeFind - est-ce suffisant?
Thomas

21

Vérifiez cela, il automatise l'opération de synchronisation, chaque fois que vous changez de tampon, le nerdtree se rafraîchit automatiquement (j'ai copié à partir d' ici avec de minuscules modifications)

" Check if NERDTree is open or active
function! IsNERDTreeOpen()        
  return exists("t:NERDTreeBufName") && (bufwinnr(t:NERDTreeBufName) != -1)
endfunction

" Call NERDTreeFind iff NERDTree is active, current window contains a modifiable
" file, and we're not in vimdiff
function! SyncTree()
  if &modifiable && IsNERDTreeOpen() && strlen(expand('%')) > 0 && !&diff
    NERDTreeFind
    wincmd p
  endif
endfunction

" Highlight currently open buffer in NERDTree
autocmd BufEnter * call SyncTree()

Merci, je cherchais ça depuis si longtemps! :)
Gnagno

Cette configuration fonctionne bien dans la plupart des cas, mais elle a tout gâché lorsque j'ai utilisé coc.nvim aller aux fonctionnalités de références. en utilisant l' BufReadévénement à la place de la BufEnterrésolution du problème.
Eddie Cooro

6

Cela devrait également être probablement juste un commentaire. Avec la version actuelle, le basculement de NerdTree et l'utilisation de SyncTree font que NERDTree est appelé deux fois. Cette modification semble résoudre ce problème:

" Check if NERDTree is open or active
function! IsNERDTreeOpen()
  return exists("t:NERDTreeBufName") && (bufwinnr(t:NERDTreeBufName) != -1)
endfunction

" Call NERDTreeFind iff NERDTree is active, current window contains a modifiable
" file, and we're not in vimdiff
function! SyncTree()
  if &modifiable && IsNERDTreeOpen() && strlen(expand('%')) > 0 && !&diff
    NERDTreeFind
    wincmd p
  endif
endfunction

" Highlight currently open buffer in NERDTree
autocmd BufEnter * call SyncTree()

function! ToggleNerdTree()
  set eventignore=BufEnter
  NERDTreeToggle
  set eventignore=
endfunction
nmap <C-n> :call ToggleNerdTree()<CR>

0

Pour aller avec le message de Chen Rushan, l'appel autocmd BufEnter * SyncTree () ne laissera pas NERDTree se fermer. Je n'ai pas trouvé de solution (autre que ci-dessous) qui mettrait en évidence le tampon ouvert actuel dans NERDTree tout en permettant à NERDTree de basculer.

Voici ce que j'ai rassemblé pour pouvoir basculer NERDTree et mettre en évidence les fichiers en utilisant Ctrl +] pour mon prochain mappage de tampon.

J'espère que d'autres pourront améliorer cela.

"Buffers
set hidden

function! IsNERDTreeOpen()        
  return exists("t:NERDTreeBufName") && (bufwinnr(t:NERDTreeBufName) != -1)
endfunction

function! NextBuffer()
     bnext
  if IsNERDTreeOpen() 
       NERDTreeFind
       wincmd p
  endif
endfunction

nnoremap <c-]> <Esc>:call NextBuffer()<CR>

function! PrevBuffer()
     bprev
  if IsNERDTreeOpen() 
       NERDTreeFind
       wincmd p
  endif
endfunction

nnoremap <c-[> <Esc>:call PrevBuffer()<CR>

function! ToggleNT()
    NERDTreeToggle
endfunction

map <c-u> <Esc>:call ToggleNT()<cr>

0

La réponse de Chen Rushan + le commentaire a parfaitement fonctionné pour moi uniquement sauf lorsque l'arbre est activé. Ces paramètres révèlent le fichier actuel dans l'arborescence lorsque l'arborescence est ouverte.

" Check if NERDTree is open or active
function! IsNERDTreeOpen()
  return exists("t:NERDTreeBufName") && (bufwinnr(t:NERDTreeBufName) != -1)
endfunction

function! CheckIfCurrentBufferIsFile()
  return strlen(expand('%')) > 0
endfunction

" Call NERDTreeFind iff NERDTree is active, current window contains a modifiable
" file, and we're not in vimdiff
function! SyncTree()
  if &modifiable && IsNERDTreeOpen() && CheckIfCurrentBufferIsFile() && !&diff
    NERDTreeFind
    wincmd p
  endif
endfunction

" Highlight currently open buffer in NERDTree
autocmd BufRead * call SyncTree()

function! ToggleTree()
  if CheckIfCurrentBufferIsFile()
    if IsNERDTreeOpen()
      NERDTreeClose
    else
      NERDTreeFind
    endif
  else
    NERDTree
  endif
endfunction

" open NERDTree with ctrl + n
nmap <C-n> :call ToggleTree()<CR>
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.