如何在NERDTree插件中进行刷新

70
当我使用(位于目录 A 中的)NERDTree 在 vim 中打开一个文件时,它运行良好。
但是如果我在另一个目录(目录 B)中打开了一个以上的文件,则它不会刷新以显示目录 B 的内容(而仍然显示目录 A 的内容)。 NERDTree 能否自动刷新呢?

42
如果有人来这里想知道如何刷新目录下文件列表,只需选择目录节点并按 r 键即可。 - James M
@JamesMcLaughlin 把它作为一个答案添加上去。我会点赞的。 - Jezen Thomas
可能是NERDTree重新加载新文件的重复问题。 - Muhammad Reda
6个回答

110

11

按键映射刷新 NERDTree

我使用一种自定义的映射方式,而不是切换到 NERDTree 窗口、按下 R,然后再切回来,它可以帮我完成这个操作:

nmap <Leader>r :NERDTreeFocus<cr>R<c-w><c-p>

一旦设置好,按下 Leader + r 就会刷新 NERDTree


注意:由于我还使用 CtrlP,我的实际键位图在刷新 NERDTree 后还有最后一步刷新 CtrlP


@Jérôme,对我来说完美无缺。我已经使用它相当长一段时间了;在终端和gvim/macvim中都可以使用 - 在Linux和OSX上都可以。 - Sheharyar
1
它可能会执行其任务,但是<space>|<space>是多余的。实际上,这些应该在NERDTree窗口中多次移动光标(除非您在<Space>上有映射)。 - Ingo Karkat

9

我厌恶手动刷新我的NERDTree插件的想法。因此,我在我的.vimrc中添加了以下内容:

map <C-n> :call NERDTreeToggleAndRefresh()<CR>

function NERDTreeToggleAndRefresh()
  :NERDTreeToggle
  if g:NERDTree.IsOpen()
    :NERDTreeRefreshRoot
  endif
endfunction

现在,每次我打开NERDTree时都会进行刷新。

这应该是被接受的答案。完美运作。 - Alex Mckay
太好了,谢谢分享!我现在正在使用这个 - 加上如果有活动缓冲区,我使用:NERDTreeFind - steinar
如果根目录有很多子节点(如 / 等),我预计这会导致 NERDTree 挂起几分钟。 - shallowThought
你可能是对的。那不是我需要关注的用例,因为我只在项目文件夹中使用VIM。 - Eric Carlson

5

在打开新文件后,只需输入:NERDTreeFind命令即可。它将选择NerdTree中当前正在编辑的文件节点。如果该节点不存在,则NerdTree将使用当前文件目录作为根目录初始化一个新树。

您可以使用自动命令来跟踪打开vim时的目录。

au VimEnter * NERDTreeFind


2

对于任何在2016年看到这篇文章的人,这个方法对我有效:

autocmd CursorHold,CursorHoldI * call NERDTreeFocus() | call g:NERDTree.ForCurrentTab().getRoot().refresh() | call g:NERDTree.ForCurrentTab().render() | wincmd w

享受吧!


哎呀,有没有办法调整这个片段,使其在使用其他窗口分割时记住当前窗口?目前的情况是,这会不幸地强制光标相对于分割配置进入特定位置。 - mcandre

1

NerdTree会一直指向vim最初打开的目录,无论打开了什么新文件。

为了更改它,请将光标放在NerdTree窗口内所需的目录节点上,然后按cd

NerdTree将在命令行中确认目录更改:

NERDTree:CWD现在是:[新目录在此处]

请注意,这也会更改vim的工作目录,这在运行像:edit somefile这样的命令时非常重要。


1
可以使用以下设置进行自动化:let NERDTreeChDirMode=2 - romainl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接