125 votes

NerdTree - Révéler un fichier dans l'arbre

Existe-t-il un raccourci permettant d'afficher le fichier actuel dans le panneau de répertoire de NerdTree ?

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

224voto

Thomas Points 2624

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 qu'il soit lié à quoi que ce soit par défaut, donc vous devez faire un keybind vous-même.

nmap ,n :NERDTreeFind<CR>

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

nmap ,m :NERDTreeToggle<CR>

0 votes

Le keymapping fonctionne, mais comment invoquer NERDTreeFind dans vim ?

15 votes

@toszter juste :NERDTreeFind

1 votes

Existe-t-il un moyen de le paramétrer pour qu'il le fasse chaque fois que le NERDTree est créé dans cet onglet ?

23voto

Chen Rushan Points 230

Regardez ceci, il automatise l'opération de synchronisation, chaque fois que vous changez de tampon, le nerdtree se rafraîchit automatiquement (j'ai copié de aquí avec de légères 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()

9voto

Bob Zimmermann Points 750

Cela devrait aussi probablement être un simple commentaire. Avec la version actuelle, le fait d'activer NerdTree et d'utiliser SyncTree fait que NERDTree est invoqué deux fois. Cette modification semble corriger 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>

4voto

keiohtani Points 21

La réponse de Chen Rushan + le commentaire a parfaitement fonctionné pour moi, sauf lorsque l'arbre est activé. Ce paramètre permet de révéler le fichier actuel dans l'arbre lorsque celui-ci est ouvert.

" 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>

1voto

Parzival Points 21
function! NerdTreeToggleFind()
    if exists("g:NERDTree") && g:NERDTree.IsOpen()
        NERDTreeClose
    elseif filereadable(expand('%'))
        NERDTreeFind
    else
        NERDTree
    endif
endfunction

nnoremap <C-n> :call NerdTreeToggleFind()<CR>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X