NerdTree - Reveal file in tree

Is there a shortcut which reveal the current file in the NerdTree directory panel.

Like TextMate 'Reveal file in Drawer' - Ctrl+Command+R

6 Answers

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. 

I don't think it's bound to anything by default, so you have to do a keybind yourself.

nmap ,n :NERDTreeFind<CR> 

is what appears in my .vimrc, along with

nmap ,m :NERDTreeToggle<CR> 
4

Check this out, it automates the sync operation, whenever you change buffer, the nerdtree will automatically refreshed itself (I copied from here with tiny modifications)

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

This should also probably be just a comment. With the current version toggling NerdTree and using SyncTree causes NERDTree to be invoked twice. This modification seems to fix that problem:

" 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's answer + the comment worked perfectly well for me only except when the tree is activated. This settings will reveal the current file in tree when the tree is opened.

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

To go along with Chen Rushan's post, the

autocmd BufEnter * call SyncTree() 

won't let NERDTree close. I couldn't find a solution (other than below) that would highlight the current open buffer in NERDTree while allowing NERDTree to Toggle.

Below is what I scraped together to be able to toggle NERDTree and have files highlighted while using Ctrl + ] for my next buffer mapping.

Hopefully others can improve this.

"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> 
function! NerdTreeToggleFind() if exists("g:NERDTree") && g:NERDTree.IsOpen() NERDTreeClose elseif filereadable(expand('%')) NERDTreeFind else NERDTree endif endfunction nnoremap <C-n> :call NerdTreeToggleFind()<CR> 

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like