-- Unless you are still migrating, remove the deprecated commands from v1.x vim.cmd [[ let g:neo_tree_remove_legacy_commands = 1 ]] return { 'nvim-neo-tree/neo-tree.nvim', version = '*', dependencies = { 'nvim-lua/plenary.nvim', 'nvim-tree/nvim-web-devicons', 'MunifTanjim/nui.nvim', }, config = function() local function smart_open(state) local node = state.tree:get_node() if not node then return end local path = node:get_id() -- Reuse already open buffer in any tab safely for _, tab in ipairs(vim.api.nvim_list_tabpages()) do if vim.api.nvim_tabpage_is_valid(tab) then for _, win in ipairs(vim.api.nvim_tabpage_list_wins(tab)) do if vim.api.nvim_win_is_valid(win) then local buf = vim.api.nvim_win_get_buf(win) if vim.api.nvim_buf_is_valid(buf) and vim.api.nvim_buf_get_name(buf) == path then vim.api.nvim_set_current_tabpage(tab) vim.api.nvim_set_current_win(win) -- close Neo-tree if open for _, w in ipairs(vim.api.nvim_list_wins()) do if vim.api.nvim_win_is_valid(w) then local b = vim.api.nvim_win_get_buf(w) if vim.api.nvim_buf_is_valid(b) and vim.api.nvim_buf_get_option(b, 'filetype') == 'neo-tree' then vim.api.nvim_win_close(w, true) end end end return end end end end end -- Reuse empty buffer in current tab local wins = vim.api.nvim_tabpage_list_wins(0) local empty_buf = nil for _, win in ipairs(wins) do if vim.api.nvim_win_is_valid(win) then local buf = vim.api.nvim_win_get_buf(win) if vim.api.nvim_buf_is_valid(buf) then local bufname = vim.api.nvim_buf_get_name(buf) local buftype = vim.api.nvim_buf_get_option(buf, 'buftype') local modified = vim.api.nvim_buf_get_option(buf, 'modified') if bufname == '' and buftype == '' and not modified then empty_buf = buf vim.api.nvim_set_current_win(win) break end end end end if empty_buf then vim.cmd('edit ' .. vim.fn.fnameescape(path)) else vim.cmd('tabnew ' .. vim.fn.fnameescape(path)) end -- Always close Neo-tree window if open for _, win in ipairs(vim.api.nvim_list_wins()) do if vim.api.nvim_win_is_valid(win) then local buf = vim.api.nvim_win_get_buf(win) if vim.api.nvim_buf_is_valid(buf) and vim.api.nvim_buf_get_option(buf, 'filetype') == 'neo-tree' then vim.api.nvim_win_close(win, true) end end end end require('neo-tree').setup { close_if_last_window = true, popup_border_style = 'rounded', enable_git_status = true, enable_diagnostics = true, default_component_configs = { indent = { padding = 1, indent_size = 2 }, icon = { folder_closed = '', folder_open = '', folder_empty = 'ﰊ' }, }, window = { position = 'float', width = 40, mapping_options = { noremap = true, nowait = true }, mappings = { [''] = smart_open, ['t'] = 'noop', }, }, filesystem = { follow_current_file = true, use_libuv_file_watcher = true, hijack_netrw_behavior = 'open_default', filtered_items = { visible = true, hide_dotfiles = false, hide_gitignored = true, }, }, } end, }