如何在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)