NerdTree - Revelar archivo en árbol

101

¿Hay un atajo que revela el archivo actual en el panel del directorio NerdTree?

Como TextMate 'Mostrar archivo en el cajón' - Ctrl + Comando + R

Akshay Rawat
fuente

Respuestas:

186

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

No creo que esté vinculado a nada de forma predeterminada, por lo que debe realizar una combinación de teclas usted mismo.

nmap ,n :NERDTreeFind<CR>

es lo que aparece en mi .vimrc, junto con

nmap ,m :NERDTreeToggle<CR>
Thomas
fuente
El mapeo de teclas funciona, pero ¿cómo invocar NERDTreeFind dentro de vim?
azatar
9
@toszter just:NERDTreeFind
Thomas
1
¿Hay alguna manera de configurarlo para que haga esto cada vez que se crea NERDTree dentro de esa pestaña?
Mr Mikkél
1
@MrA, solo puede crear el NERDTree con el comando NERDTreeFind, ¿es eso suficiente?
Thomas
21

Mire esto, automatiza la operación de sincronización, cada vez que cambia el búfer, el nerdtree se actualizará automáticamente (lo copié desde aquí con pequeñas modificaciones)

" 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()
Chen Rushan
fuente
Gracias, he estado buscando esto durante tanto tiempo. :)
Gnagno
Esta configuración funciona bien en la mayoría de los casos, pero estropeó todo cuando usé coc.nvim ir a la funcionalidad de referencias. usando el BufReadevento en lugar del BufEntersolucionado el problema.
Eddie Cooro
6

Esto probablemente también debería ser solo un comentario. Con la versión actual, alternar NerdTree y usar SyncTree hace que NERDTree se invoque dos veces. Esta modificación parece solucionar ese 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>
Bob Zimmermann
fuente
0

Para acompañar la publicación de Chen Rushan, la llamada autocmd BufEnter * SyncTree () no permitirá que NERDTree se cierre. No pude encontrar una solución (que no sea la siguiente) que resalte el búfer abierto actual en NERDTree mientras permite que NERDTree se alterne.

A continuación se muestra lo que reuní para poder alternar NERDTree y tener archivos resaltados mientras usaba Ctrl +] para mi próxima asignación de búfer.

Ojalá otros puedan mejorar esto.

"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>
abC Sharp
fuente
0

La respuesta de Chen Rushan + el comentario funcionó perfectamente bien para mí solo, excepto cuando el árbol está activado. Esta configuración revelará el archivo actual en el árbol cuando se abra el árbol.

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