NerdTree - เปิดเผยไฟล์ในโครงสร้าง


101

มีทางลัดที่เปิดเผยไฟล์ปัจจุบันในแผงไดเรกทอรี NerdTree หรือไม่

เช่นเดียวกับ TextMate 'เปิดเผยไฟล์ใน Drawer' - Ctrl + Command + R

คำตอบ:


187

ใน: 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.

ฉันไม่คิดว่ามันจะผูกพันกับอะไรเป็นค่าเริ่มต้นดังนั้นคุณต้องผูกกุญแจด้วยตัวเอง

nmap ,n :NERDTreeFind<CR>

คือสิ่งที่ปรากฏใน. vimrc ของฉันพร้อมกับ

nmap ,m :NERDTreeToggle<CR>

การแมปคีย์ใช้งานได้ แต่จะเรียกใช้ NERDTreeFind ภายในกลุ่มอย่างไร
azatar

9
@toszter just:NERDTreeFind
Thomas

1
มีวิธีตั้งค่าให้ทำเช่นนี้ทุกครั้งที่สร้าง NERDTree ภายในแท็บนั้นหรือไม่
Mr Mikkél

1
@MrA คุณสามารถสร้าง NERDTree ด้วยคำสั่ง NERDTreeFind เท่านั้น - เพียงพอหรือไม่
Thomas

21

ตรวจสอบสิ่งนี้มันจะทำการซิงค์โดยอัตโนมัติทุกครั้งที่คุณเปลี่ยนบัฟเฟอร์ nerdtree จะรีเฟรชตัวเองโดยอัตโนมัติ (ฉันคัดลอกจากที่นี่พร้อมการปรับเปลี่ยนเล็กน้อย)

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

ขอบคุณฉันมองหาสิ่งนี้มานานแล้ว! :)
Gnagno

การกำหนดค่านี้ใช้งานได้ดีในกรณีส่วนใหญ่ แต่มันทำให้ทุกอย่างยุ่งเหยิงเมื่อฉันใช้ coc.nvim ไปที่ฟังก์ชันการอ้างอิง ใช้BufReadเหตุการณ์แทนการBufEnterแก้ไขปัญหา
Eddie Cooro

6

สิ่งนี้ควรเป็นเพียงความคิดเห็น ด้วยการสลับเวอร์ชันปัจจุบัน NerdTree และการใช้ SyncTree ทำให้ NERDTree ถูกเรียกสองครั้ง การปรับเปลี่ยนนี้ดูเหมือนจะแก้ไขปัญหานั้นได้:

" 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 การโทรอัตโนมัติ BufEnter * SyncTree () จะไม่ยอมให้ NERDTree ปิด ฉันไม่พบวิธีแก้ปัญหา (นอกเหนือจากด้านล่าง) ที่จะเน้นบัฟเฟอร์ที่เปิดอยู่ใน NERDTree ในขณะที่อนุญาตให้ NERDTree สลับ

ด้านล่างนี้คือสิ่งที่ฉันคัดลอกมารวมกันเพื่อให้สามารถสลับ NERDTree และมีไฟล์ที่ไฮไลต์ขณะใช้ Ctrl +] สำหรับการแมปบัฟเฟอร์ครั้งต่อไป

หวังว่าคนอื่นจะปรับปรุงสิ่งนี้ได้

"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 Rushan + ความคิดเห็นทำงานได้ดีสำหรับฉันเท่านั้นยกเว้นเมื่อเปิดใช้งานต้นไม้ การตั้งค่านี้จะเปิดเผยไฟล์ปัจจุบันในแผนภูมิเมื่อต้นไม้ถูกเปิด

" 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>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.