NerdTree - показать файл в дереве


102

Есть ли ярлык, открывающий текущий файл на панели каталогов NerdTree.

Как TextMate: «Показать файл в ящике» - Ctrl + Command + R

Ответы:


188

in: 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?
azatar

9
@toszter just:NERDTreeFind
Томас

1
Есть ли способ настроить его для этого всякий раз, когда NERDTree создается на этой вкладке?
Mr Mikkél

1
@MrA, вы можете просто создать NERDTree с помощью команды NERDTreeFind - этого достаточно?
Thomas

21

Проверьте это, он автоматизирует операцию синхронизации, всякий раз, когда вы меняете буфер, ботаническое дерево автоматически обновляется (я скопировал отсюда с небольшими изменениями)

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

Эта конфигурация хорошо работает в большинстве случаев, но она все испортила, когда я использовал 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

Ответ Чена Рушана + комментарий отлично сработал для меня, только если дерево не активировано. Эти настройки покажут текущий файл в дереве при открытии дерева.

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

0

В дополнение к сообщению Чена Рушана

autocmd BufEnter * call 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>
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.