มีทางลัดที่เปิดเผยไฟล์ปัจจุบันในแผงไดเรกทอรี NerdTree หรือไม่
เช่นเดียวกับ TextMate 'เปิดเผยไฟล์ใน Drawer' - Ctrl + Command + R
มีทางลัดที่เปิดเผยไฟล์ปัจจุบันในแผงไดเรกทอรี NerdTree หรือไม่
เช่นเดียวกับ TextMate 'เปิดเผยไฟล์ใน Drawer' - Ctrl + Command + R
คำตอบ:
ใน: 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
ตรวจสอบสิ่งนี้มันจะทำการซิงค์โดยอัตโนมัติทุกครั้งที่คุณเปลี่ยนบัฟเฟอร์ 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()
BufRead
เหตุการณ์แทนการBufEnter
แก้ไขปัญหา
สิ่งนี้ควรเป็นเพียงความคิดเห็น ด้วยการสลับเวอร์ชันปัจจุบัน 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>
เพื่อไปพร้อมกับโพสต์ของ 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>
คำตอบของ 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>