You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 06:49:56