NerdTree - Tampilkan file di pohon

101

Apakah ada jalan pintas yang menampilkan file saat ini di panel direktori NerdTree.

Seperti TextMate 'Reveal file in Drawer' - Ctrl + Command + R

Akshay Rawat
sumber

Jawaban:

186

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

Saya tidak berpikir itu terikat pada apa pun secara default, jadi Anda harus melakukan keybind sendiri.

nmap ,n :NERDTreeFind<CR>

adalah apa yang muncul di .vimrc saya, bersama dengan

nmap ,m :NERDTreeToggle<CR>
Thomas
sumber
Pemetaan kunci berfungsi, tetapi bagaimana cara memanggil NERDTreeFind dalam vim?
azatar
9
@toszter saja:NERDTreeFind
Thomas
1
Apakah ada cara untuk mengaturnya agar melakukan ini setiap kali NERDTree dibuat dalam tab itu?
Tuan Mikkél
1
@MrA Anda hanya dapat membuat NERDTree dengan perintah NERDTreeFind - apakah itu cukup?
Thomas
21

Lihat ini, ini mengotomatiskan operasi sinkronisasi, setiap kali Anda mengubah buffer, nerdtree akan secara otomatis menyegarkan dirinya sendiri (saya salin dari sini dengan sedikit modifikasi)

" 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
sumber
Terima kasih, saya sudah lama mencari ini! :)
Gnagno
Konfigurasi ini bekerja dengan baik di sebagian besar kasus tetapi mengacaukan semuanya ketika saya menggunakan coc.nvim pergi ke fungsionalitas referensi. menggunakan BufReadacara sebagai ganti BufEntermemperbaiki masalah.
Eddie Cooro
6

Ini mungkin juga hanya sebuah komentar. Dengan versi saat ini mengubah NerdTree dan menggunakan SyncTree menyebabkan NERDTree dipanggil dua kali. Modifikasi ini sepertinya memperbaiki masalah itu:

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

Untuk mengikuti pos Chen Rushan, panggilan otomatis BufEnter * SyncTree () tidak akan membiarkan NERDTree ditutup. Saya tidak dapat menemukan solusi (selain di bawah) yang akan menyoroti buffer terbuka saat ini di NERDTree sambil mengizinkan NERDTree untuk Beralih.

Di bawah ini adalah apa yang saya sisir bersama untuk dapat mengaktifkan NERDTree dan memiliki file yang disorot saat menggunakan Ctrl +] untuk pemetaan buffer berikutnya.

Semoga yang lain bisa memperbaiki ini.

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

Jawaban Chen Rushan + komentar itu bekerja dengan sangat baik untuk saya hanya kecuali jika pohonnya diaktifkan. Pengaturan ini akan mengungkapkan file saat ini di pohon ketika pohon dibuka.

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