有没有一种快捷方式可以在NerdTree目录面板中显示当前文件。
就像TextMate的“在抽屉中显示文件”-Ctrl+Command+R一样。
在: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>
看这个,它可以自动同步操作,每当你更改缓冲区时,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
解决了这个问题。 - Eddie Cooro:NERDTreeToggle
切换时,会打开第二个NERDTree缓冲区。 - unrealapex这也可能只是一条注释。使用当前版本切换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>
" 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>
function! NerdTreeToggleFind()
if exists("g:NERDTree") && g:NERDTree.IsOpen()
NERDTreeClose
elseif filereadable(expand('%'))
NERDTreeFind
else
NERDTree
endif
endfunction
nnoremap <C-n> :call NerdTreeToggleFind()<CR>
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>
:NERDTreeFind
即可。 - Thomas:NERDTreeToggleVCS
和:NERDTreeFind
?我想要在树中显示当前文件,其父级是版本控制系统的父级。 - undefined