NerdTree - Dosyayı ağaçta göster


102

NerdTree dizin panelinde geçerli dosyayı gösteren bir kısayol var mı?

TextMate 'Dosyayı Çekmecede Göster' gibi - Ctrl + Command + R

Yanıtlar:


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.

Varsayılan olarak herhangi bir şeye bağlı olduğunu düşünmüyorum, bu yüzden kendiniz bir tuş ataması yapmanız gerekiyor.

nmap ,n :NERDTreeFind<CR>

.vimrc dosyamda görünen şey ile birlikte

nmap ,m :NERDTreeToggle<CR>

Anahtar eşleme çalışır, ancak NERDTreeFind'ı vim içinde nasıl çağırabilirim?
azatar

9
@toszter just:NERDTreeFind
Thomas

1
Bu sekme içinde NERDTree her oluşturulduğunda bunu yapacak şekilde ayarlamanın bir yolu var mı?
Bay Mikkél

1
@MrA NERDTree'yi sadece NERDTreeFind komutuyla oluşturabilirsiniz - bu yeterli mi?
Thomas

21

Şuna bakın, senkronizasyon işlemini otomatikleştirir, arabelleği her değiştirdiğinizde nerdtree otomatik olarak kendini yeniler ( buradan küçük değişikliklerle kopyaladım )

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

Bu yapılandırma çoğu durumda iyi çalışıyor, ancak coc.nvim'i referans işlevine gittiğimde her şeyi mahvetti. sorunu düzeltmek BufReadyerine olay kullanmak BufEnter.
Eddie Cooro

6

Bu aynı zamanda muhtemelen sadece bir yorum olmalıdır. Mevcut sürümde NerdTree'yi değiştirmek ve SyncTree kullanmak, NERDTree'nin iki kez çağrılmasına neden olur. Bu değişiklik, bu sorunu çözüyor gibi görünüyor:

" 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

Chen Rushan'ın yanıtı + yorum, yalnızca ağacın etkinleştirilmesi dışında benim için mükemmel bir şekilde çalıştı. Bu ayarlar, ağaç açıldığında geçerli dosyayı ağaçta gösterecektir.

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

0

Chen Rushan'ın gönderisine uygun olarak,

autocmd BufEnter * call SyncTree()

NERDTree'nin kapanmasına izin vermeyecek. NERDTree'nin Geçiş yapmasına izin verirken NERDTree'deki mevcut açık arabelleği vurgulayacak bir çözüm (aşağıdan başka) bulamadım.

Aşağıda, NERDTree'yi değiştirebilmek ve bir Ctrl + ]sonraki arabellek eşlemem için kullanırken dosyaların vurgulanmasını sağlamak için bir araya getirdiklerim var .

Umarım diğerleri bunu geliştirebilir.

"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>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.