diff --git a/lua/plugins.lua b/lua/plugins.lua index b9fd0f9..5f34121 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -32,7 +32,6 @@ return require("packer").startup( require("plugins/icons") end } - use { "kyazdani42/nvim-tree.lua", after = "nvim-web-devicons", @@ -222,5 +221,21 @@ return require("packer").startup( end, requires = {"mfussenegger/nvim-dap"} } + use { + "nvim-neo-tree/neo-tree.nvim", + branch = "main", + config = function() + require("plugins/neo-tree") + end, + requires = { + "nvim-lua/plenary.nvim", + "kyazdani42/nvim-web-devicons", -- not strictly required, but recommended + "MunifTanjim/nui.nvim", + "s1n7ax/nvim-window-picker" + }, + after = { + "monokai.nvim" + } + } end ) diff --git a/lua/plugins/heirline.lua b/lua/plugins/heirline.lua index e525cbf..8235307 100644 --- a/lua/plugins/heirline.lua +++ b/lua/plugins/heirline.lua @@ -654,8 +654,8 @@ local TabLineOffset = { local bufnr = vim.api.nvim_win_get_buf(win) self.winid = win - if vim.bo[bufnr].filetype == "NvimTree" then - self.title = "NvimTree" + if vim.bo[bufnr].filetype == "neo-tree" then + self.title = " NeoTree" return true -- elseif vim.bo[bufnr].filetype == "TagBar" then -- ... diff --git a/lua/plugins/lsp.lua b/lua/plugins/lsp.lua index 78620a1..88e9eff 100644 --- a/lua/plugins/lsp.lua +++ b/lua/plugins/lsp.lua @@ -1,18 +1,9 @@ local util = require "lspconfig.util" -local signError = vim.fn.sign_getdefined("DiagnosticSignError") -signError["text"] = "" -signError["texthl"] = "DiagnosticSignError" -vim.fn.sign_define("DiagnosticSignError", signError) -local signWarn = vim.fn.sign_getdefined("DiagnosticSignWarn") -signWarn["text"] = "" -signWarn["texthl"] = "DiagnosticSignWarn" -vim.fn.sign_define("DiagnosticSignWarn", signWarn) -local signHint = vim.fn.sign_getdefined("DiagnosticSignHint") -signHint["text"] = "" -signHint["texthl"] = "DiagnosticSignHint" -vim.fn.sign_define("DiagnosticSignHint", signHint) -vim.fn.sign_define("DiagnosticSignInfo", signHint) +vim.fn.sign_define("DiagnosticSignError", {text = " ", texthl = "DiagnosticSignError"}) +vim.fn.sign_define("DiagnosticSignWarn", {text = " ", texthl = "DiagnosticSignWarn"}) +vim.fn.sign_define("DiagnosticSignInfo", {text = " ", texthl = "DiagnosticSignInfo"}) +vim.fn.sign_define("DiagnosticSignHint", {text = "", texthl = "DiagnosticSignHint"}) --- Completion Icons require("lspkind").init({}) diff --git a/lua/plugins/neo-tree.lua b/lua/plugins/neo-tree.lua new file mode 100644 index 0000000..4003e41 --- /dev/null +++ b/lua/plugins/neo-tree.lua @@ -0,0 +1,218 @@ +vim.cmd([[ let g:neo_tree_remove_legacy_commands = 1 ]]) +vim.api.nvim_set_keymap("", "", ":Neotree reveal", {silent = true}) +require "window-picker".setup( + { + autoselect_one = true, + include_current = false, + filter_rules = { + -- filter using buffer options + bo = { + -- if the file type is one of following, the window will be ignored + filetype = {"neo-tree", "neo-tree-popup", "notify"}, + -- if the buffer type is one of following, the window will be ignored + buftype = {"terminal", "quickfix"} + } + }, + selection_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ", + other_win_hl_color = "#519aba" + } +) + +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 = 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) + -- if a.type == b.type then + -- return a.path > b.path + -- else + -- return a.type > b.type + -- end + -- end , -- this sorts files and directories descendantly + 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 = "", + default = "", + highlight = "NeoTreeFileIcon" + }, + modified = { + symbol = "[+]", + highlight = "NeoTreeGitAdded" + }, + name = { + trailing_slash = false, + 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 = "" + } + } + }, + window = { + position = "left", + width = 35, + mapping_options = { + noremap = true, + nowait = true + }, + mappings = { + [""] = { + "toggle_node", + nowait = false -- disable `nowait` if you have existing combos starting with this char that you want to use + }, + -- ["<2-LeftMouse>"] = "open", + -- [""] = "open", + [""] = "revert_preview", + ["P"] = {"toggle_preview", config = {use_float = true}}, + -- ["s"] = "open_split", + -- ["v"] = "open_vsplit", + ["s"] = "split_with_window_picker", + ["v"] = "vsplit_with_window_picker", + ["t"] = "open_tabnew", + -- [""] = "open_drop", + -- ["t"] = "open_tab_drop", + [""] = "open_with_window_picker", + ["<2-LeftMouse>"] = "open_with_window_picker", + --["P"] = "toggle_preview", -- enter preview mode, which shows the current node without focusing + ["C"] = "close_node", + ["z"] = "close_all_nodes", + --["Z"] = "expand_all_nodes", + ["a"] = { + "add", + -- some commands may take optional config options, see `:h neo-tree-mappings` for details + config = { + show_path = "absolute" -- "none", "relative", "absolute" + } + }, + ["A"] = "add_directory", -- also accepts the optional config.show_path option like "add". + ["d"] = "delete", + ["r"] = "rename", + ["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": + -- ["c"] = { + -- "copy", + -- config = { + -- show_path = "none" -- "none", "relative", "absolute" + -- } + --} + ["m"] = { + "move", + config = { + show_path = "absoulte" + } + }, -- takes text input for destination, also accepts the optional config.show_path option like "add". + ["q"] = "close_window", + ["R"] = "refresh", + ["?"] = "show_help", + [">"] = "prev_source", + ["<"] = "next_source" + } + }, + nesting_rules = {}, + filesystem = { + filtered_items = { + visible = false, -- when true, they will just be displayed differently than normal items + hide_dotfiles = false, + hide_gitignored = true, + hide_by_name = {".git"}, + hide_by_pattern = {}, + always_show = {"node_modules"}, + never_show = {}, + never_show_by_pattern = {} + }, + follow_current_file = false, -- This will find and focus the file in the active buffer every + -- time the current file is changed while the tree is open. + 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 = true, -- This will use the OS level file watchers to detect changes + -- instead of relying on nvim autocmd events. + window = { + mappings = { + [""] = "navigate_up", + ["."] = "set_root", + ["H"] = "toggle_hidden", + ["/"] = "fuzzy_finder", + ["D"] = "fuzzy_finder_directory", + ["f"] = "filter_on_submit", + [""] = "clear_filter", + ["[g"] = "prev_git_modified", + ["]g"] = "next_git_modified" + } + } + }, + buffers = { + follow_current_file = true, -- This will find and focus the file in the active buffer every + -- time the current file is changed while the tree is open. + group_empty_dirs = true, -- when true, empty folders will be grouped together + show_unloaded = true, + window = { + mappings = { + ["d"] = "buffer_delete", + [""] = "navigate_up", + ["."] = "set_root" + } + } + }, + git_status = { + window = { + position = "float", + mappings = { + ["gA"] = "git_add_all", + ["gu"] = "git_unstage_file", + ["ga"] = "git_add_file", + ["gr"] = "git_revert_file", + ["gc"] = "git_commit", + ["gp"] = "git_push", + ["gg"] = "git_commit_and_push" + } + } + }, + source_selector = { + winbar = true, + statusline = false + } + } +) diff --git a/lua/plugins/nvim-tree.lua b/lua/plugins/nvim-tree.lua index cc7c732..ad942c8 100644 --- a/lua/plugins/nvim-tree.lua +++ b/lua/plugins/nvim-tree.lua @@ -1,5 +1,5 @@ -- vim.g.nvim_tree_indent_markers = 1 -vim.api.nvim_set_keymap("", "", ":NvimTreeFindFile:NvimTreeFocus", {silent = true}) +-- vim.api.nvim_set_keymap("", "", ":NvimTreeFindFile:NvimTreeFocus", {silent = true}) vim.cmd [[ autocmd BufEnter * ++nested if winnr('$') == 1 && bufname() == 'NvimTree_' . tabpagenr() | quit | endif