local function my_on_attach(bufnr) local api = require('nvim-tree.api') local opts = { buffer = bufnr } -- basics: copy/cut/paste/create/rename/remove vim.keymap.set('n', 'c', api.fs.copy.node, opts) vim.keymap.set('n', 'x', api.fs.cut, opts) vim.keymap.set('n', 'p', api.fs.paste, opts) vim.keymap.set('n', 'a', api.fs.create, opts) vim.keymap.set('n', 'r', api.fs.rename, opts) vim.keymap.set('n', 'R', api.fs.rename_basename, opts) vim.keymap.set('n', 'd', api.fs.remove, opts) -- bulk mark and delete/move vim.keymap.set('n', 's', api.marks.toggle, opts) vim.keymap.set('n', 'S', api.marks.clear, opts) vim.keymap.set('n', 'bd', api.marks.bulk.delete, opts) vim.keymap.set('n', 'bm', api.marks.bulk.move, opts) -- copy filename/path vim.keymap.set('n', 'y', api.fs.copy.filename, opts) vim.keymap.set('n', 'Y', api.fs.copy.relative_path, opts) vim.keymap.set('n', 'gy', api.fs.copy.absolute_path, opts) vim.keymap.set('n', 'ge', api.fs.copy.basename, opts) -- expand/collapse vim.keymap.set('n', 'e', api.tree.expand_all, opts) vim.keymap.set('n', 'E', api.tree.collapse_all, opts) -- filter vim.keymap.set('n', 'f', api.live_filter.start, opts) vim.keymap.set('n', 'F', api.live_filter.clear, opts) -- navigate vim.keymap.set('n', 'J', api.node.navigate.sibling.last, opts) vim.keymap.set('n', 'K', api.node.navigate.sibling.first, opts) vim.keymap.set('n', 'P', api.node.navigate.parent, opts) -- open vim.keymap.set('n', '', api.node.open.edit, opts) vim.keymap.set('n', 'o', api.node.open.edit, opts) vim.keymap.set('n', 'O', api.node.open.no_window_picker, opts) -- miscellaneous vim.keymap.set('n', 'K', api.node.show_info_popup, opts) vim.keymap.set('n', 'U', api.tree.reload, opts) end return { 'nvim-tree/nvim-tree.lua', version = '*', dev = true, opts = { on_attach = my_on_attach, view = { signcolumn = 'no' }, actions = { file_popup = { open_win_config = { border = 'rounded' } } }, renderer = { root_folder_label = false, -- root_folder_label = function(path) -- return '-- ' .. vim.fn.fnamemodify(path, ':t') .. ' --' -- end, special_files = {}, highlight_hidden = 'all', highlight_clipboard = 'all', indent_markers = { enable = true, inline_arrows = false, icons = { corner = '│', none = '│', bottom = ' ' }, }, icons = { bookmarks_placement = 'after', git_placement = 'after', show = { file = false, folder = false, folder_arrow = false, -- KEEP FALSE git = true, modified = false, hidden = false, diagnostics = false, bookmarks = true, }, glyphs = { -- default = '•', default = ' ', symlink = '', bookmark = '󰆤', modified = '●', hidden = '󰜌', folder = { arrow_closed = '', arrow_open = '', default = '▸', open = '▾', empty = '', empty_open = '', symlink = '', symlink_open = '', }, git = { unstaged = '◇', -- '✗', staged = '', unmerged = '', renamed = '', untracked = '', deleted = '', -- '󰧧', ignored = '', }, }, }, }, hijack_cursor = true, prefer_startup_root = true, update_focused_file = { enable = true, update_root = { enable = true, ignore_list = {} }, exclude = false, }, modified = { enable = true, show_on_dirs = true, show_on_open_dirs = true }, filters = { enable = true, git_ignored = true, dotfiles = false, git_clean = false, no_buffer = false, no_bookmark = false, custom = {}, exclude = {}, }, filesystem_watchers = { enable = true, debounce_delay = 50, ignore_dirs = { '/.git', '/.DS_Store', '/build', '/dist', '/public', '/node_modules', '/target', }, }, }, }