NerdTree - Datei im Baum anzeigen


101

Gibt es eine Verknüpfung, die die aktuelle Datei im NerdTree-Verzeichnisfenster anzeigt?

Wie TextMate 'Datei in Schublade anzeigen' - Strg + Befehl + R.

Antworten:


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.

Ich glaube nicht, dass es standardmäßig an irgendetwas gebunden ist, also musst du selbst eine Tastenkombination machen.

nmap ,n :NERDTreeFind<CR>

ist das, was in meiner .vimrc zusammen mit erscheint

nmap ,m :NERDTreeToggle<CR>

Das Keymapping funktioniert, aber wie kann man NERDTreeFind in vim aufrufen?
Azatar

9
@ Toszter nur:NERDTreeFind
Thomas

1
Gibt es eine Möglichkeit, dies festzulegen, wenn der NERDTree auf dieser Registerkarte erstellt wird?
Herr Mikkél

1
@MrA Sie können den NERDTree nur mit dem Befehl NERDTreeFind erstellen - ist das genug?
Thomas

21

Überprüfen Sie dies, es automatisiert den Synchronisierungsvorgang, wenn Sie den Puffer wechseln, wird der Nerdtree automatisch aktualisiert (ich habe von hier mit winzigen Änderungen kopiert )

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

Danke, ich habe so lange danach gesucht! :)
Gnagno

Diese Konfiguration funktioniert in den meisten Fällen gut, hat aber alles durcheinander gebracht, als ich coc.nvim verwendet habe. Verwenden des BufReadEreignisses anstelle des BufEnterbehobenen Problems.
Eddie Cooro

6

Dies sollte wahrscheinlich auch nur ein Kommentar sein. Wenn Sie in der aktuellen Version NerdTree umschalten und SyncTree verwenden, wird NERDTree zweimal aufgerufen. Diese Änderung scheint das Problem zu beheben:

" 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

Um dem Beitrag von Chen Rushan zu folgen, lässt der autocmd BufEnter * -Aufruf SyncTree () NERDTree nicht schließen. Ich konnte keine Lösung (außer der folgenden) finden, die den aktuell geöffneten Puffer in NERDTree hervorhebt und gleichzeitig das Umschalten von NERDTree ermöglicht.

Im Folgenden ist aufgeführt, was ich zusammengekratzt habe, um NERDTree umzuschalten und Dateien hervorzuheben, während Strg +] für meine nächste Pufferzuordnung verwendet wird.

Hoffentlich können andere dies verbessern.

"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

Chen Rushans Antwort + der Kommentar hat nur für mich perfekt funktioniert, außer wenn der Baum aktiviert ist. Diese Einstellungen zeigen die aktuelle Datei im Baum an, wenn der Baum geöffnet wird.

" 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>
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.