NerdTree - Hiển thị tệp trong cây


101

Có phím tắt nào tiết lộ tệp hiện tại trong bảng điều khiển thư mục NerdTree không.

Giống như TextMate 'Hiển thị tệp trong ngăn kéo' - Ctrl + Command + R

Câu trả lời:


186

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

Tôi không nghĩ rằng nó bị ràng buộc với bất kỳ thứ gì theo mặc định, vì vậy bạn phải tự làm keybind.

nmap ,n :NERDTreeFind<CR>

là những gì xuất hiện trong .vimrc của tôi, cùng với

nmap ,m :NERDTreeToggle<CR>

Keymapping hoạt động, nhưng làm thế nào để gọi NERDTreeFind trong vim?
azatar

9
@toszter just:NERDTreeFind
Thomas

1
Có cách nào để thiết lập nó làm điều này bất cứ khi nào NERDTree được tạo trong tab đó không?
Mr Mikkél

1
@MrA bạn chỉ có thể tạo NERDTree bằng lệnh NERDTreeFind - như vậy đã đủ chưa?
Thomas

21

Kiểm tra điều này, nó tự động hóa hoạt động đồng bộ hóa, bất cứ khi nào bạn thay đổi bộ đệm, nerdtree sẽ tự động làm mới chính nó (tôi đã sao chép từ đây với các sửa đổi nhỏ)

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

Cảm ơn bạn, tôi đã tìm kiếm điều này trong một thời gian dài! :)
Gnagno

Cấu hình này hoạt động tốt trong hầu hết các trường hợp nhưng nó làm rối tung mọi thứ khi tôi sử dụng coc.nvim đi đến chức năng tham chiếu. sử dụng BufReadsự kiện thay cho sự BufEntercố đã khắc phục.
Eddie Cooro

6

Đây cũng có thể chỉ là một nhận xét. Với phiên bản hiện tại, việc chuyển đổi NerdTree và sử dụng SyncTree khiến NERDTree được gọi hai lần. Sửa đổi này dường như để khắc phục sự cố đó:

" 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

Cùng với bài đăng của Chen Rushan, lệnh gọi autocmd BufEnter * SyncTree () sẽ không cho phép NERDTree đóng. Tôi không thể tìm thấy giải pháp (khác với bên dưới) có thể làm nổi bật bộ đệm đang mở hiện tại trong NERDTree trong khi cho phép NERDTree chuyển đổi.

Dưới đây là những gì tôi đã tổng hợp lại để có thể chuyển đổi NERDTree và đánh dấu các tệp trong khi sử dụng Ctrl +] cho ánh xạ bộ đệm tiếp theo của tôi.

Hy vọng rằng những người khác có thể cải thiện điều này.

"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

Câu trả lời của Chen Rushan + nhận xét hoạt động hoàn toàn tốt đối với tôi chỉ trừ khi cây được kích hoạt. Cài đặt này sẽ hiển thị tệp hiện tại trong cây khi cây được mở.

" 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>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.