如何让nvim-tree打开时折叠除当前缓冲区外的所有文件夹?
让nvim-tree默认仅展开当前缓冲区所在路径的文件夹
要实现和NerdTree一致的行为——打开时仅展开当前缓冲区所在路径的文件夹,其余全部折叠,可以通过以下两种方式配置:
方式一:自定义打开命令(推荐)
在nvim-tree的配置中添加on_attach函数,自定义打开树的快捷键,实现「打开→折叠所有→定位当前文件并展开路径」的流程:
local function nvim_tree_on_attach(bufnr) local api = require('nvim-tree.api') -- 替换默认的打开快捷键(比如<C-n>),可按需修改 vim.keymap.set('n', '<C-n>', function() api.tree.open() api.tree.collapse_all() api.tree.find_file(vim.fn.expand('%')) api.tree.focus() end, { buffer = bufnr, noremap = true, silent = true }) -- 保留其他默认映射(可选) local function opts(desc) return { desc = 'nvim-tree: ' .. desc, buffer = bufnr, noremap = true, silent = true, nowait = true } end vim.keymap.set('n', '<CR>', api.node.open.edit, opts('Open')) vim.keymap.set('n', 'l', api.node.open.edit, opts('Open')) vim.keymap.set('n', 'h', api.node.navigate.parent_close, opts('Close Directory')) end require("nvim-tree").setup({ on_attach = nvim_tree_on_attach, -- 可选:开启聚焦文件时自动更新树的状态 update_focused_file = { enable = true, }, })
方式二:自动聚焦时折叠其他文件夹
如果希望切换缓冲区时,nvim-tree自动折叠非当前路径的文件夹,可以添加一个自动命令:
vim.api.nvim_create_autocmd('BufEnter', { pattern = '*', callback = function() if require('nvim-tree.api').tree.is_visible() then require('nvim-tree.api').tree.collapse_all() require('nvim-tree.api').tree.find_file(vim.fn.expand('%')) end end, }) require("nvim-tree").setup({ update_focused_file = { enable = true, }, })
这样每次切换缓冲区时,只要nvim-tree处于打开状态,就会自动折叠所有文件夹并展开当前文件的路径。
内容的提问来源于stack exchange,提问作者doctopus
相关产品推荐
相关产品推荐

