NerdTree 디렉토리 패널에 현재 파일을 표시하는 바로 가기가 있습니까?
TextMate '드로어에 파일 표시'처럼-Ctrl + Command + R
NerdTree 디렉토리 패널에 현재 파일을 표시하는 바로 가기가 있습니까?
TextMate '드로어에 파일 표시'처럼-Ctrl + Command + R
답변:
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
이것을 확인하면 동기화 작업이 자동화됩니다. 버퍼를 변경할 때마다 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의 게시물과 함께 진행하기 위해 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>
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>