NerdTree - Rivela il file nella struttura ad albero


101

C'è un collegamento che rivela il file corrente nel pannello delle directory di NerdTree.

Come TextMate "Rivela file nel cassetto" - Ctrl + Comando + R

Risposte:


186

in: 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.

Non penso che sia vincolato a nulla per impostazione predefinita, quindi devi eseguire una combinazione di tasti da solo.

nmap ,n :NERDTreeFind<CR>

è ciò che appare nel mio .vimrc, insieme a

nmap ,m :NERDTreeToggle<CR>

Il keymapping funziona, ma come invocare NERDTreeFind all'interno di vim?
azatar

9
@toszter just:NERDTreeFind
Thomas,

1
C'è un modo per impostarlo per farlo ogni volta che il NERDTree viene creato all'interno di quella scheda?
Mr Mikkél

1
@MrA puoi creare il NERDTree solo con il comando NERDTreeFind - è abbastanza?
Thomas

21

Controlla questo, automatizza l'operazione di sincronizzazione, ogni volta che cambi buffer, il nerdtree si aggiornerà automaticamente (ho copiato da qui con piccole modifiche)

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

Grazie, l'ho cercato da così tanto tempo! :)
Gnagno

Questa configurazione funziona bene nella maggior parte dei casi, ma ha incasinato tutto quando ho usato coc.nvim vai alla funzionalità dei riferimenti. utilizzando l' BufReadevento al posto di BufEnterrisolto il problema.
Eddie Cooro

6

Anche questo dovrebbe essere probabilmente solo un commento. Con la versione corrente, alternando NerdTree e usando SyncTree, NERDTree viene invocato due volte. Questa modifica sembra risolvere il problema:

" 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

Per andare avanti con il post di Chen Rushan, l'autocmd BufEnter * call SyncTree () non lascerà che NERDTree si chiuda. Non sono riuscito a trovare una soluzione (diversa da quella di seguito) che evidenziasse l'attuale buffer aperto in NERDTree consentendo al contempo a NERDTree di attivare / disattivare.

Di seguito è riportato ciò che ho raccolto per essere in grado di attivare NERDTree e avere i file evidenziati mentre si utilizza Ctrl +] per la mia prossima mappatura del buffer.

Si spera che altri possano migliorare questo.

"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 risposta di Chen Rushan + il commento ha funzionato perfettamente per me solo quando l'albero è attivato. Queste impostazioni riveleranno il file corrente nell'albero quando l'albero viene aperto.

" 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>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.