Vim 如何在NERDTree插件中刷新

Vim 如何在NERDTree插件中刷新,vim,nerdtree,Vim,Nerdtree,当我在vim中用(目录a in)NERDTree打开一个文件时,它工作得很好 但是,如果我在另一个目录(目录B)中再打开一个文件,它不会刷新以显示目录B的内容(而它仍然显示目录A) NERDTree能自动刷新吗?无论打开什么新文件,NERDTree都会一直指向最初打开vim的目录 要更改它,请将光标放在NerdTree窗口中所需的目录节点上,然后按cd NerdTree将在命令行中确认目录更改: NERDTree:CWD现在是:[这里是新目录] 请注意,这通常也会更改vim的工作目录,这在运行诸

当我在vim中用(目录a in)
NERDTree
打开一个文件时,它工作得很好

但是,如果我在另一个目录(目录B)中再打开一个文件,它不会刷新以显示目录B的内容(而它仍然显示目录A)


NERDTree能自动刷新吗?

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

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

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

NERDTree:CWD现在是:[这里是新目录]


请注意,这通常也会更改vim的工作目录,这在运行诸如
:edit somefile
等命令时非常重要。打开新文件后,只需发出
:NERDTreeFind
命令。它将在NerdTree中选择当前编辑文件节点。如果节点不存在,NerdTree将初始化一个新的树,根目录作为当前文件的目录

打开vim时,可以使用自动命令跟踪目录

au VimEnter*NERDTreeFind


From:只需点击
r
r
键即可刷新当前树。可以映射到
中的自动刷新。vimrc

对于在2016年看到这一点的任何人,这对我来说都很有用:

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

刷新NERDTree的键映射 我没有切换到
NERDTree
窗口,而是点击R并切换回原来的位置,而是使用一个自定义地图来为我实现这一点:

nmap <Leader>r :NERDTreeFocus<cr>R<c-w><c-p>
nmap r:NERDTreeFocusR
设置后,按Leader+r将刷新
NERDTree



注意:因为我也使用了CtrlP,所以我的实际键映射还有最后一步

我讨厌手动刷新NERDTree插件的想法。因此,我已将此添加到我的
.vimrc

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

function NERDTreeToggleAndRefresh()
  :NERDTreeToggle
  if g:NERDTree.IsOpen()
    :NERDTreeRefreshRoot
  endif
endfunction
map:call nerdtreetogleandrefresh()
函数nerdtreetogleandrefresh()
:nerdtreethoggle
如果g:NERDTree.IsOpen()
:nerdtreefreshroot
恩迪夫
端功能

现在,每当我打开NERDTree时,它都会刷新。

它可以通过以下设置自动执行:
让NERDTreeChDirMode=2
如果有人来这里试图了解如何刷新目录下的文件列表,只需选择目录节点,然后按
r
@JamesMcLaughlin将其添加为答案。Will upvote.可能是@Jérôme的复制品,对我来说非常合适。我已经用了很长时间了;在终端和gvim/macvim中-在linux和osx上。它可能执行它的任务,但\|是多余的。事实上,它们应该在NERDTree窗口中多次移动光标(除非您在
上有映射)。Oy,有没有办法调整此片段,以便在使用其他窗口拆分时记住当前窗口?实际上,这有一个不幸的副作用,就是将光标强制到相对于拆分配置的特定位置。这应该是可以接受的答案。完美地工作