如何在 Vim 的 netrw 树视图中默认展开目录?

如何在 Vim 的 netrw 树视图中默认展开目录?

我可以通过将以下内容添加到我的 vimrc 来使 netrw 默认使用树视图:

let g:netrw_liststyle=3

但我不知道如何默认扩展子目录,有什么办法吗?

答案1

读取所有子目录将是一项成本高昂的操作,并且会大大减慢 netrw 的打开速度。由于树显示只是多种显示模式中的一种(非默认)模式,这可能就是没有这样的命令的原因。我尝试了类似的操作(触发<Enter>每个目录行上的映射以打开它):

:global/^│ /exe "normal \<CR>"

但不幸的是它没有起作用。

插件替代品

NERDTree 插件类似于网络,但它是围绕树形显示(在侧边栏中)构建的。因此,它还有打开子树的命令(但这些命令与 netrw 一样慢)。

答案2

这有效:

function ExpandAllDirectories()
  call cursor(0,0)
  let found = 1
  while found != 0
    " match lines with expand-able directories
    " do not wrap around to the start of the file
    let found = search('^|.*\/$', 'W')
    if found != 0
      execute "normal \<CR>"
    endif
  endwhile
endfunction

这将展开所有折叠的(子)目录。

要使用上述代码,请将其保存到文件中,例如xpand.vim.使用 netrw 打开一个文件夹(也许里面没有太多东西!),例如$ vim /some/folder/

确保 netrw 显示树形目录列表,其中所有子文件夹均已关闭(默认/初始树视图)。要么let g:netrw_liststyle= 3在你的 vimrc 中,要么点击i直到看到树形目录列表。:help netrw-i详情请参阅。

不管怎样,一旦你进入 Vim 并查看一棵树,就可以使用:source xpand.vim加载代码,然后:call ExpandAllDirectories()运行它。


我猜 NERDTree 更好,我只是想让它与 netrw 一起工作。它确实很慢...让我知道我是否在做一些愚蠢的事情(显然,除了拒绝使用 NERDTree 之外)。可能只是(我的)Vimscript 速度慢。命令tree行程序非常快,因此这种方法当然也可以优化(也许用另一种语言)。

答案3

我有这个~/.vimrc

function SideDirTree()
    Lexplore
    if bufname(winbufnr(0)) == 'NetrwTreeListing'
        2
        "while search('^\([|│] \)\+.\+\/$', '', line('$'))  " (no recursion limit)
        while search('^\([|│] \)\{1,3}[^|│].*/$', '', line('$'))  " (recursion limited to 3 subdirs)
            execute "normal \<CR>"
        endwhile
        3
    endif
endfunction
noremap <F9> :call SideDirTree()<CR>

正在研究 ViM/GViM 8.2(其他答案对我不起作用)。

它很老套,速度不快,但基本上可以满足您的要求。

相关内容