NerdTree - pokaż plik w drzewie

102

Czy istnieje skrót, który ujawnia bieżący plik w panelu katalogów NerdTree.

Podobnie jak TextMate „Pokaż plik w szufladzie” - Ctrl + Command + R

Akshay Rawat
źródło

Odpowiedzi:

188

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.

Myślę, że nie jest to domyślnie powiązane, więc musisz sam zrobić przypisanie.

nmap ,n :NERDTreeFind<CR>

jest to, co pojawia się w moim .vimrc, wraz z

nmap ,m :NERDTreeToggle<CR>
Tomasz
źródło
Mapowanie klawiszy działa, ale jak wywołać NERDTreeFind w vimie?
Azatar
9
@toszter just:NERDTreeFind
Thomas
1
Czy istnieje sposób, aby to robić za każdym razem, gdy na tej karcie zostanie utworzone drzewo NERD?
Pan Mikkél
1
@MrA możesz po prostu utworzyć drzewo NERDTree za pomocą polecenia NERDTreeFind - czy to wystarczy?
Thomas
21

Sprawdź to, automatyzuje operację synchronizacji, za każdym razem, gdy zmienisz bufor, nerdtree automatycznie się odświeży (skopiowałem stąd z drobnymi modyfikacjami)

" 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
źródło
Ta konfiguracja działa dobrze w większości przypadków, ale zepsuła wszystko, gdy użyłem coc.nvim, przejdź do funkcji referencji. użycie BufReadzdarzenia zamiast BufEnternaprawionego problemu.
Eddie Cooro
6

To prawdopodobnie powinien być tylko komentarz. W obecnej wersji przełączanie NerdTree i używanie SyncTree powoduje dwukrotne wywołanie NERDTree. Wydaje się, że ta modyfikacja rozwiązuje ten problem:

" 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
źródło
0

Odpowiedź Chen Rushan + komentarz działał dla mnie doskonale tylko z wyjątkiem sytuacji, gdy drzewo jest aktywowane. Te ustawienia ujawnią bieżący plik w drzewie po otwarciu drzewa.

" 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
źródło
0

Zgodnie z postem Chen Rushan, plik

autocmd BufEnter * call SyncTree()

nie pozwoli zamknąć NERDTree. Nie mogłem znaleźć rozwiązania (innego niż poniżej), które podświetliłoby bieżący otwarty bufor w NERDTree, jednocześnie pozwalając NERDTree na przełączanie.

Poniżej znajduje się to, co zeskrobałem, aby móc przełączać NERDTree i mieć podświetlone pliki podczas używania Ctrl + ]do następnego mapowania bufora.

Mam nadzieję, że inni mogą to poprawić.

"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
źródło