我可以通过将以下内容添加到我的 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(其他答案对我不起作用)。
它很老套,速度不快,但基本上可以满足您的要求。