NerdTree - виявити файл у дереві


101

Чи є ярлик, який розкриває поточний файл на панелі каталогу NerdTree.

Як TextMate 'Виявити файл у ящику' - Ctrl + Command + R

Відповіді:


186

в: 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 у vim?
азатар

9
@toszter just:NERDTreeFind
Thomas

1
Чи є спосіб встановити це так, коли створено NERDTree на цій вкладці?
Містер Міккел

1
@MrA ви можете просто створити NERDTree лише за допомогою команди NERDTreeFind - цього достатньо?
Томас

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виправленої проблеми.
Едді Куро

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

Іти разом із посадою Чену Рушана, Autocmd 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

Відповідь Чен Рушан + коментар спрацював для мене чудово лише за винятком випадків, коли дерево активоване. Ці параметри відкриють поточний файл у дереві при відкритті дерева.

" 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>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.