Jic*_*hao 73 vim gvim nerdtree vim-plugins
当我在 VIM 中打开一个与前一个文件路径不同的新选项卡时,NERDTree 仍将保持与前一个文件相同的目录层次结构。
是否有同步快捷方式将当前根目录更改为新打开的文件目录?
小智 136
我使用以下映射来查看 NERDTree 中的当前缓冲区:
map <leader>r :NERDTreeFind<cr>
Run Code Online (Sandbox Code Playgroud)
sch*_*pet 40
像老板一样在最后扔一个 % 符号
:NERDTree %
我的 .vimrc 中有这个,它映射Ctrl+o以在当前缓冲区的目录中切换 nerdtree:
map <C-o> :NERDTreeToggle %<CR>
Lam*_*art 34
我发现现有的两个答案都具有教育意义,并成功地将两者结合起来,使行为更像许多人对 IDE 的期望:单击打开的窗口/缓冲区,并在 NERDTree 中突出显示该文件。我把它放在我的 ~/.vimrc 中:
autocmd BufEnter * if &modifiable | NERDTreeFind | wincmd p | endif
这是做什么的:
autocmd BufEnter
- 每次关注缓冲区时运行(包括 NERDTree 窗口)if &modifiable
- 当你点击 NERDTree 窗口时,什么都不做(NERDTree 窗口是不可修改的)wincmd p
- NERDTreeFind 将光标放在 NERDTree 上;这将切换回您最初关注的窗口请注意,这不适用于任何其他不可修改的缓冲区——但这通常是一件好事;否则(例如)任何时候你进入:help
vim,NERDTree 都会找到并聚焦存储帮助文件的目录——可能不是你想要它做的事情。
起初,这种单行解决方案对我很有用,但我很快发现它会导致 NERDTree 在我打开文件时激活——结果,它阻止了 NERDTree 被关闭!如果您不想全职使用 NERDTree,请将其放在您的 .vimrc 中:
" returns true iff is NERDTree open/active
function! rc:isNTOpen()
return exists("t:NERDTreeBufName") && (bufwinnr(t:NERDTreeBufName) != -1)
endfunction
" calls NERDTreeFind iff NERDTree is active, current window contains a modifiable file, and we're not in vimdiff
function! rc:syncTree()
if &modifiable && rc:isNTOpen() && strlen(expand('%')) > 0 && !&diff
NERDTreeFind
wincmd p
endif
endfunction
autocmd BufEnter * call rc:syncTree()
Run Code Online (Sandbox Code Playgroud)
小智 17
我不确定是否有特定于 NERDTree 的方法可以做到这一点,但是您始终可以配置 Vim,以便它将工作目录设置为当前文件的目录:
autocmd BufEnter * lcd %:p:h
Run Code Online (Sandbox Code Playgroud)
现在,在新选项卡中打开文件后您要做的所有事情都在新选项:NERDTreeToggle
卡本身中。