[Nvim-Tree] Replace with Neotree
This commit is contained in:
		
							
								
								
									
										340
									
								
								nvim/lua/plugins/nav/neotree.lua
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										340
									
								
								nvim/lua/plugins/nav/neotree.lua
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,340 @@ | ||||
| return { | ||||
|     "nvim-neo-tree/neo-tree.nvim", | ||||
|     dependencies = { | ||||
|         "nvim-lua/plenary.nvim", | ||||
|         "nvim-tree/nvim-web-devicons", -- not strictly required, but recommended | ||||
|         "MunifTanjim/nui.nvim", | ||||
|         -- {"3rd/image.nvim", opts = {}}, -- Optional image support in preview window: See `# Preview Mode` for more information | ||||
|     }, | ||||
|     lazy = false, -- neo-tree will lazily load itself | ||||
|     config = function() | ||||
|         require("neo-tree").setup({ | ||||
|             close_if_last_window = true, -- Close Neo-tree if it is the last window left in the tab | ||||
|             popup_border_style = "rounded", | ||||
|             enable_git_status = true, | ||||
|             enable_diagnostics = true, | ||||
|             use_default_mappings = false, | ||||
|             open_files_do_not_replace_types = { "terminal", "trouble", "qf" }, -- when opening files, do not use windows containing these filetypes or buftypes | ||||
|             open_files_using_relative_paths = false, | ||||
|             sort_case_insensitive = false,                            -- used when sorting files and directories in the tree | ||||
|             -- sort_function = nil,                                      -- use a custom function for sorting files and directories in the tree | ||||
|             sort_function = function(a, b)                            -- natural sort | ||||
|                 if a.type == b.type then | ||||
|                     local ap = a.path:lower() | ||||
|                     local bp = b.path:lower() | ||||
|  | ||||
|                     if ap == bp then | ||||
|                         return false | ||||
|                     end | ||||
|  | ||||
|                     for i = 1, math.max(string.len(ap), string.len(bp)), 1 do | ||||
|                         local l = string.sub(ap, i, -1) | ||||
|                         local r = string.sub(bp, i, -1) | ||||
|  | ||||
|                         if | ||||
|                             type(tonumber(string.sub(l, 1, 1))) == "number" | ||||
|                             and type(tonumber(string.sub(r, 1, 1))) == "number" | ||||
|                         then | ||||
|                             local l_number = tonumber(string.match(l, "^[0-9]+")) | ||||
|                             local r_number = tonumber(string.match(r, "^[0-9]+")) | ||||
|  | ||||
|                             if l_number ~= r_number then | ||||
|                                 return l_number < r_number | ||||
|                             end | ||||
|                         elseif string.sub(l, 1, 1) ~= string.sub(r, 1, 1) then | ||||
|                             return l < r | ||||
|                         end | ||||
|                     end | ||||
|                 else | ||||
|                     return a.type < b.type | ||||
|                 end | ||||
|             end, | ||||
|             default_component_configs = { | ||||
|                 container = { | ||||
|                     enable_character_fade = true, | ||||
|                 }, | ||||
|                 indent = { | ||||
|                     indent_size = 2, | ||||
|                     padding = 1, -- extra padding on left hand side | ||||
|                     -- indent guides | ||||
|                     with_markers = true, | ||||
|                     indent_marker = "│", | ||||
|                     last_indent_marker = "└", | ||||
|                     highlight = "NeoTreeIndentMarker", | ||||
|                     -- expander config, needed for nesting files | ||||
|                     with_expanders = nil, -- if nil and file nesting is enabled, will enable expanders | ||||
|                     expander_collapsed = "", | ||||
|                     expander_expanded = "", | ||||
|                     expander_highlight = "NeoTreeExpander", | ||||
|                 }, | ||||
|                 icon = { | ||||
|                     folder_closed = "", | ||||
|                     folder_open = "", | ||||
|                     folder_empty = "", | ||||
|                     provider = function(icon, node, state) -- default icon provider utilizes nvim-web-devicons if available | ||||
|                         if node.type == "file" or node.type == "terminal" then | ||||
|                             local success, web_devicons = pcall(require, "nvim-web-devicons") | ||||
|                             local name = node.type == "terminal" and "terminal" or node.name | ||||
|                             if success then | ||||
|                                 local devicon, hl = web_devicons.get_icon(name) | ||||
|                                 icon.text = devicon or icon.text | ||||
|                                 icon.highlight = hl or icon.highlight | ||||
|                             end | ||||
|                         end | ||||
|                     end, | ||||
|                     -- The next two settings are only a fallback, if you use nvim-web-devicons and configure default icons there | ||||
|                     -- then these will never be used. | ||||
|                     default = "*", | ||||
|                     highlight = "NeoTreeFileIcon", | ||||
|                 }, | ||||
|                 modified = { | ||||
|                     symbol = "[+]", | ||||
|                     highlight = "NeoTreeModified", | ||||
|                 }, | ||||
|                 name = { | ||||
|                     trailing_slash = true, | ||||
|                     use_git_status_colors = true, | ||||
|                     highlight = "NeoTreeFileName", | ||||
|                 }, | ||||
|                 git_status = { | ||||
|                     symbols = { | ||||
|                         -- Change type | ||||
|                         added = "+", -- or "✚", but this is redundant info if you use git_status_colors on the name | ||||
|                         modified = "", -- or "", but this is redundant info if you use git_status_colors on the name | ||||
|                         deleted = "✖", -- this can only be used in the git_status source | ||||
|                         renamed = "", -- this can only be used in the git_status source | ||||
|                         -- Status type | ||||
|                         untracked = "", | ||||
|                         ignored = "", | ||||
|                         unstaged = "", | ||||
|                         staged = "", | ||||
|                         conflict = "", | ||||
|                     }, | ||||
|                 }, | ||||
|                 -- If you don't want to use these columns, you can set `enabled = false` for each of them individually | ||||
|                 file_size = { | ||||
|                     enabled = true, | ||||
|                     width = 12, -- width of the column | ||||
|                     required_width = 64, -- min width of window required to show this column | ||||
|                 }, | ||||
|                 type = { | ||||
|                     enabled = true, | ||||
|                     width = 10, -- width of the column | ||||
|                     required_width = 122, -- min width of window required to show this column | ||||
|                 }, | ||||
|                 last_modified = { | ||||
|                     enabled = true, | ||||
|                     width = 20, -- width of the column | ||||
|                     required_width = 88, -- min width of window required to show this column | ||||
|                 }, | ||||
|                 created = { | ||||
|                     enabled = true, | ||||
|                     width = 20, -- width of the column | ||||
|                     required_width = 110, -- min width of window required to show this column | ||||
|                 }, | ||||
|                 symlink_target = { | ||||
|                     enabled = false, | ||||
|                 }, | ||||
|             }, | ||||
|             -- A list of functions, each representing a global custom command | ||||
|             -- that will be available in all sources (if not overridden in `opts[source_name].commands`) | ||||
|             -- see `:h neo-tree-custom-commands-global` | ||||
|             commands = {}, | ||||
|             window = { | ||||
|                 position = "left", | ||||
|                 width = 40, | ||||
|                 mapping_options = { | ||||
|                     noremap = true, | ||||
|                     nowait = true, | ||||
|                 }, | ||||
|                 mappings = { | ||||
|                     ["<2-LeftMouse>"] = "open", | ||||
|                     ["<cr>"] = "open", | ||||
|                     ["o"] = "open", | ||||
|                     ["<esc>"] = "cancel", -- close preview or floating neo-tree window | ||||
|                     ["P"] = { "toggle_preview", config = { use_float = true, use_image_nvim = true } }, | ||||
|                     -- Read `# Preview Mode` for more information | ||||
|                     ["l"] = "focus_preview", | ||||
|                     ["S"] = "open_split", | ||||
|                     ["v"] = "open_vsplit", | ||||
|                     ["t"] = "open_tabnew", | ||||
|                     ["w"] = "open_with_window_picker", | ||||
|                     ["C"] = "close_node", | ||||
|                     -- ['C'] = 'close_all_subnodes', | ||||
|                     ["z"] = "close_all_nodes", | ||||
|                     --["Z"] = "expand_all_nodes", | ||||
|                     ["q"] = "close_window", | ||||
|                     ["R"] = "refresh", | ||||
|                     ["?"] = "show_help", | ||||
|                     ["<"] = "prev_source", | ||||
|                     [">"] = "next_source", | ||||
|                     ["i"] = "show_file_details", | ||||
|                 }, | ||||
|             }, | ||||
|             nesting_rules = {}, | ||||
|             filesystem = { | ||||
|                 filtered_items = { | ||||
|                     visible = false, -- when true, they will just be displayed differently than normal items | ||||
|                     hide_dotfiles = true, | ||||
|                     hide_gitignored = true, | ||||
|                     hide_hidden = true, -- only works on Windows for hidden files/directories | ||||
|                     hide_by_name = { | ||||
|                         --"node_modules" | ||||
|                     }, | ||||
|                     hide_by_pattern = { -- uses glob style patterns | ||||
|                         --"*.meta", | ||||
|                         --"*/src/*/tsconfig.json", | ||||
|                     }, | ||||
|                     always_show = { -- remains visible even if other settings would normally hide it | ||||
|                         --".gitignored", | ||||
|                     }, | ||||
|                     always_show_by_pattern = { -- uses glob style patterns | ||||
|                         --".env*", | ||||
|                     }, | ||||
|                     never_show = { -- remains hidden even if visible is toggled to true, this overrides always_show | ||||
|                         --".DS_Store", | ||||
|                         --"thumbs.db" | ||||
|                     }, | ||||
|                     never_show_by_pattern = { -- uses glob style patterns | ||||
|                         --".null-ls_*", | ||||
|                     }, | ||||
|                 }, | ||||
|                 follow_current_file = { | ||||
|                     enabled = true,         -- This will find and focus the file in the active buffer every time | ||||
|                     --               -- the current file is changed while the tree is open. | ||||
|                     leave_dirs_open = false, -- `false` closes auto expanded dirs, such as with `:Neotree reveal` | ||||
|                 }, | ||||
|                 group_empty_dirs = false,   -- when true, empty folders will be grouped together | ||||
|                 hijack_netrw_behavior = "open_default", -- netrw disabled, opening a directory opens neo-tree | ||||
|                 -- in whatever position is specified in window.position | ||||
|                 -- "open_current",  -- netrw disabled, opening a directory opens within the | ||||
|                 -- window like netrw would, regardless of window.position | ||||
|                 -- "disabled",    -- netrw left alone, neo-tree does not handle opening dirs | ||||
|                 use_libuv_file_watcher = false, -- This will use the OS level file watchers to detect changes | ||||
|                 -- instead of relying on nvim autocmd events. | ||||
|                 window = { | ||||
|                     mappings = { | ||||
|                         ["a"] = { | ||||
|                             "add", | ||||
|                             -- this command supports BASH style brace expansion ("x{a,b,c}" -> xa,xb,xc). see `:h neo-tree-file-actions` for details | ||||
|                             -- some commands may take optional config options, see `:h neo-tree-mappings` for details | ||||
|                             config = { | ||||
|                                 show_path = "none", -- "none", "relative", "absolute" | ||||
|                             }, | ||||
|                         }, | ||||
|                         ["A"] = "add_directory", -- also accepts the optional config.show_path option like "add". this also supports BASH style brace expansion. | ||||
|                         ["d"] = "delete", | ||||
|                         ["r"] = "rename", | ||||
|                         ["b"] = "rename_basename", | ||||
|                         ["y"] = "copy_to_clipboard", | ||||
|                         ["x"] = "cut_to_clipboard", | ||||
|                         ["p"] = "paste_from_clipboard", | ||||
|                         ["c"] = "copy", -- takes text input for destination, also accepts the optional config.show_path option like "add": | ||||
|                         ["m"] = "move", -- takes text input for destination, also accepts the optional config.show_path option like "add". | ||||
|                         ["<bs>"] = "navigate_up", | ||||
|                         ["."] = "set_root", | ||||
|                         ["H"] = "toggle_hidden", | ||||
|                         ["/"] = "fuzzy_finder", | ||||
|                         ["D"] = "fuzzy_finder_directory", | ||||
|                         ["#"] = "fuzzy_sorter", -- fuzzy sorting using the fzy algorithm | ||||
|                         -- ["D"] = "fuzzy_sorter_directory", | ||||
|                         ["f"] = "filter_on_submit", | ||||
|                         ["<c-x>"] = "clear_filter", | ||||
|                         ["[g"] = "prev_git_modified", | ||||
|                         ["]g"] = "next_git_modified", | ||||
|                         ["s"] = { | ||||
|                             "show_help", | ||||
|                             nowait = false, | ||||
|                             config = { title = "Order by", prefix_key = "s" }, | ||||
|                         }, | ||||
|                         ["sc"] = { "order_by_created", nowait = false }, | ||||
|                         ["sd"] = { "order_by_diagnostics", nowait = false }, | ||||
|                         ["sg"] = { "order_by_git_status", nowait = false }, | ||||
|                         ["sm"] = { "order_by_modified", nowait = false }, | ||||
|                         ["sn"] = { "order_by_name", nowait = false }, | ||||
|                         ["ss"] = { "order_by_size", nowait = false }, | ||||
|                         ["st"] = { "order_by_type", nowait = false }, | ||||
|                         -- ['<key>'] = function(state) ... end, | ||||
|                     }, | ||||
|                     fuzzy_finder_mappings = { -- define keymaps for filter popup window in fuzzy_finder_mode | ||||
|                         ["<down>"] = "move_cursor_down", | ||||
|                         ["<C-n>"] = "move_cursor_down", | ||||
|                         ["<up>"] = "move_cursor_up", | ||||
|                         ["<C-p>"] = "move_cursor_up", | ||||
|                         ["<esc>"] = "close", | ||||
|                         -- ['<key>'] = function(state, scroll_padding) ... end, | ||||
|                     }, | ||||
|                 }, | ||||
|  | ||||
|                 commands = {}, -- Add a custom command or override a global one using the same function name | ||||
|             }, | ||||
|             buffers = { | ||||
|                 follow_current_file = { | ||||
|                     enabled = true, -- This will find and focus the file in the active buffer every time | ||||
|                     --              -- the current file is changed while the tree is open. | ||||
|                     leave_dirs_open = false, -- `false` closes auto expanded dirs, such as with `:Neotree reveal` | ||||
|                 }, | ||||
|                 group_empty_dirs = true, -- when true, empty folders will be grouped together | ||||
|                 show_unloaded = true, | ||||
|                 window = { | ||||
|                     mappings = { | ||||
|                         ["d"] = "buffer_delete", | ||||
|                         ["bd"] = "buffer_delete", | ||||
|                         ["<bs>"] = "navigate_up", | ||||
|                         ["."] = "set_root", | ||||
|                         ["s"] = { | ||||
|                             "show_help", | ||||
|                             nowait = false, | ||||
|                             config = { title = "Order by", prefix_key = "s" }, | ||||
|                         }, | ||||
|                         ["sc"] = { "order_by_created", nowait = false }, | ||||
|                         ["sd"] = { "order_by_diagnostics", nowait = false }, | ||||
|                         ["sm"] = { "order_by_modified", nowait = false }, | ||||
|                         ["sn"] = { "order_by_name", nowait = false }, | ||||
|                         ["ss"] = { "order_by_size", nowait = false }, | ||||
|                         ["st"] = { "order_by_type", nowait = false }, | ||||
|                     }, | ||||
|                 }, | ||||
|             }, | ||||
|             git_status = { | ||||
|                 window = { | ||||
|                     position = "float", | ||||
|                     mappings = { | ||||
|                         ["A"] = "git_add_all", | ||||
|                         ["u"] = "git_unstage_file", | ||||
|                         ["a"] = "git_add_file", | ||||
|                         ["r"] = "git_revert_file", | ||||
|                         ["c"] = "git_commit", | ||||
|                         ["p"] = "git_push", | ||||
|                         ["g"] = "git_commit_and_push", | ||||
|                         ["s"] = { | ||||
|                             "show_help", | ||||
|                             nowait = false, | ||||
|                             config = { title = "Order by", prefix_key = "s" }, | ||||
|                         }, | ||||
|                         ["sc"] = { "order_by_created", nowait = false }, | ||||
|                         ["sd"] = { "order_by_diagnostics", nowait = false }, | ||||
|                         ["sm"] = { "order_by_modified", nowait = false }, | ||||
|                         ["sn"] = { "order_by_name", nowait = false }, | ||||
|                         ["ss"] = { "order_by_size", nowait = false }, | ||||
|                         ["st"] = { "order_by_type", nowait = false }, | ||||
|                     }, | ||||
|                 }, | ||||
|             }, | ||||
|         }) | ||||
|  | ||||
|         vim.keymap.set("n", "<leader>e", "<Cmd>Neotree<CR>", { silent = true, desc = "Open Neotree" }) | ||||
|         vim.keymap.set( | ||||
|             "n", | ||||
|             "<leader><leader>e", | ||||
|             "<Cmd>Neotree reveal<CR>", | ||||
|             { silent = true, desc = "Go to currently open file in buffer or close" } | ||||
|         ) | ||||
|         vim.keymap.set( | ||||
|             "n", | ||||
|             "<leader><leader>g", | ||||
|             "<Cmd>Neotree source=git_status<CR>", | ||||
|             { silent = true, desc = "Open git view" } | ||||
|         ) | ||||
|     end, | ||||
| } | ||||
| @@ -1,24 +0,0 @@ | ||||
| return { | ||||
|     "nvim-tree/nvim-tree.lua", | ||||
|     version = "*", | ||||
|     lazy = false, | ||||
|     dependencies = { | ||||
|         "nvim-tree/nvim-web-devicons", | ||||
|     }, | ||||
|     config = function() | ||||
|         vim.g.loaded_netrw = 1 | ||||
|         vim.g.loaded_netrwPlugin = 1 | ||||
|  | ||||
|         require("nvim-tree").setup { | ||||
|             sort = { | ||||
|                 folders_first = true, | ||||
|                 sorter = "name" | ||||
|             }, | ||||
|             filters = { custom = { "^.git$" } } | ||||
|         } | ||||
|  | ||||
|         vim.keymap.set('n', '<leader>e', ":NvimTreeToggle<CR>", {silent = true, desc = "Open nvim-tree"}) | ||||
|         vim.keymap.set('n', '<leader><leader>h', ":NvimTreeCollapseKeepBuffers<CR>", { silent = true, desc = "Collapse nvim-tree keeping open buffers" }) | ||||
|         vim.keymap.set('n', '<leader><leader>e', ":NvimTreeFindFile<CR>", {silent = true, desc = "Go to currently open file in buffer or close"}) | ||||
|     end, | ||||
| } | ||||
		Reference in New Issue
	
	Block a user