NerdTree - Revelar arquivo na árvore


101

Existe um atalho que revela o arquivo atual no painel de diretório NerdTree.

Como TextMate 'Revelar arquivo na gaveta' - Ctrl + Command + R

Respostas:


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.

Não acho que esteja vinculado a nada por padrão, então você mesmo tem que fazer um atalho de teclado.

nmap ,n :NERDTreeFind<CR>

é o que aparece no meu .vimrc, junto com

nmap ,m :NERDTreeToggle<CR>

O mapeamento de teclas funciona, mas como invocar NERDTreeFind dentro do vim?
azatar

9
@toszter apenas:NERDTreeFind
Thomas

1
Existe uma maneira de definir isso sempre que o NERDTree for criado nessa guia?
Sr. Mikkél

1
@MrA você só pode criar o NERDTree com o comando NERDTreeFind - isso é o suficiente?
Thomas

21

Verifique isso, ele automatiza a operação de sincronização, sempre que você alterar o buffer, o nerdtree será automaticamente atualizado (copiei daqui com pequenas modificações)

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

Obrigada, há muito tempo que procuro por isso! :)
Gnagno

Esta configuração funciona bem na maioria dos casos, mas bagunçou tudo quando usei o coc.nvim ir para a funcionalidade de referências. usando o BufReadevento no lugar do BufEntercorrigido o problema.
Eddie Cooro

6

Provavelmente também deve ser apenas um comentário. Com a versão atual alternando NerdTree e usando SyncTree faz com que NERDTree seja chamado duas vezes. Esta modificação parece resolver esse 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

Para acompanhar a postagem de Chen Rushan, a chamada autocmd BufEnter * SyncTree () não deixará NERDTree fechar. Não consegui encontrar uma solução (diferente de abaixo) que realçasse o buffer aberto atual no NERDTree enquanto permitia que o NERDTree alternasse.

Abaixo está o que eu juntei para poder alternar NERDTree e ter os arquivos destacados ao usar Ctrl +] para meu próximo mapeamento de buffer.

Esperançosamente, outros podem melhorar isso.

"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

A resposta de Chen Rushan + o comentário funcionou perfeitamente bem para mim apenas, exceto quando a árvore é ativada. Esta configuração irá revelar o arquivo atual na árvore quando a árvore for aberta.

" 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>
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.