NerdTree-트리에 파일 표시


101

NerdTree 디렉토리 패널에 현재 파일을 표시하는 바로 가기가 있습니까?

TextMate '드로어에 파일 표시'처럼-Ctrl + Command + R

답변:


186

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>

키 매핑은 작동하지만 vim 내에서 NERDTreeFind를 호출하는 방법은 무엇입니까?
azatar

9
단지 @toszter:NERDTreeFind
토마스

1
해당 탭 내에서 NERDTree가 생성 될 때마다이를 설정하는 방법이 있습니까?
Mr Mikkél

1
@MrA NERDTreeFind 명령으로 만 NERDTree를 만들 수 있습니다-충분합니까?
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의 게시물과 함께 진행하기 위해 autocmd BufEnter * 호출 SyncTree ()는 NERDTree를 닫지 않습니다. NERDTree의 토글을 허용하는 동안 NERDTree의 현재 열린 버퍼를 강조 표시하는 솔루션 (아래 제외)을 찾을 수 없습니다.

아래는 다음 버퍼 매핑을 위해 Ctrl +]를 사용하는 동안 NERDTree를 토글하고 파일을 강조 표시하기 위해 함께 스크랩 한 것입니다.

다른 사람들이 이것을 개선 할 수 있기를 바랍니다.

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