如何在 vim Netrw 树视图中显示文件?

如何在 vim Netrw 树视图中显示文件?

如何在Netrw树视图中显示特定文件(通常是当前缓冲区),类似于:NERDTreeFind命令NERDTree

更准确地说……

我在缓冲区中打开了一个文件,并且我使用:Expore它来打开netrw

我想要显示我的活动缓冲区中的文件netrw(将所有目录从工作目录扩展到文件),以便我可以看到它的所有同级文件和文件夹。

答案1

这里有一个简单的方法。
您可以将:Explore命令更改为Vexplore:Hexplore等。

# show file in netrw
command! ExploreFind let @/=expand("%:t") | execute 'Explore' expand("%:h") | normal n

# or as a mapping
map <Leader>f :let @/=expand("%:t") <Bar> execute 'Explore' expand("%:h") <Bar> normal n<CR>

以下是一些解释:

  • let @/=expand("%:t")将上次搜索设置为当前文件名
  • execute 'Explore' expand("%:h")打开 netrw 并将当前文件路径作为参数传递,以确保它列出该目录
  • normal n在目录列表中搜索文件名

这个想法来自https://vim.fandom.com/wiki/Search_for_current_word_in_new_window

注意:这并不完全相同,NERDTreeFind因为它不会显示整个目录树,但它足以满足我的需要。

答案2

此版本可在 neovim(以 lua + vimscript 编写)中使用,其行为类似于 Jetbrains Idea IDE 中的“在项目视图中显示”。我的意思是,它看起来像是从项目的根目录 (pwd) 开始,然后打开目录直到您的文件。

vim.g.netrw_liststyle = 3
vim.keymap.set('n', '<leader>e', function ()
    local relative_path = vim.fn.expand("%:h")
    local startPos, endPos = string.find(relative_path, "/")
    if startPos == 1 then
       relative_path = "."
    end
    vim.cmd [[:let @/=expand("%:t")]]
    vim.cmd("Lexplore " .. relative_path)
    if startPos > 1 then
        while startPos ~= nil do
            startPos, endPos = string.find(relative_path, "/", endPos + 1)
            vim.cmd("call netrw#Call('NetrwBrowseUpDir', 1)")
        end
        vim.cmd("call netrw#Call('NetrwBrowseUpDir', 1)")
    end
    vim.cmd(":normal n<CR>zz")
end)

相关内容