kickstart.nvim/lua/kickstart/plugins/neo-tree.lua

301 lines
12 KiB
Lua

-- Neo-tree is a Neovim plugin to browse the file system
-- https://github.com/nvim-neo-tree/neo-tree.nvim
---@module 'lazy'
---@type LazySpec
return {
'nvim-neo-tree/neo-tree.nvim',
version = '*',
dependencies = {
'nvim-lua/plenary.nvim',
'nvim-tree/nvim-web-devicons', -- not strictly required, but recommended
'MunifTanjim/nui.nvim',
},
lazy = false,
keys = {
{ '\\', ':Neotree reveal<CR>', desc = 'NeoTree reveal', silent = true },
},
---@module 'neo-tree'
---@type neotree.Config
opts = {
filesystem = {
window = {
position = 'left',
width = 40,
mapping_options = {
noremap = true,
nowait = true,
},
mappings = {
['<space>'] = {
'toggle_node',
nowait = false, -- disable `nowait` if you have existing combos starting with this char that you want to use
},
['<2-LeftMouse>'] = 'open',
['<cr>'] = 'open',
['<esc>'] = 'cancel', -- close preview or floating neo-tree window
['P'] = {
'toggle_preview',
config = {
use_float = true,
use_snacks_image = true,
use_image_nvim = true,
},
},
-- Read `# Preview Mode` for more information
['l'] = 'focus_preview',
['S'] = 'open_split',
['s'] = 'open_vsplit',
-- ["S"] = "split_with_window_picker",
-- ["s"] = "vsplit_with_window_picker",
['t'] = 'open_tabnew',
-- ["<cr>"] = "open_drop",
-- ["t"] = "open_tab_drop",
['w'] = 'open_with_window_picker',
--["P"] = "toggle_preview", -- enter preview mode, which shows the current node without focusing
['C'] = 'close_node',
-- ['C'] = 'close_all_subnodes',
['z'] = 'close_all_nodes',
--["Z"] = "expand_all_nodes",
--["Z"] = "expand_all_subnodes",
['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-r>'] = 'clear_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', -- 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',
['i'] = 'show_file_details',
-- ["i"] = {
-- "show_file_details",
-- -- format strings of the timestamps shown for date created and last modified (see `:h os.date()`)
-- -- both options accept a string or a function that takes in the date in seconds and returns a string to display
-- -- config = {
-- -- created_format = "%Y-%m-%d %I:%M %p",
-- -- modified_format = "relative", -- equivalent to the line below
-- -- modified_format = function(seconds) return require('neo-tree.utils').relative_date(seconds) end
-- -- }
-- },
},
},
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_ignored = true, -- hide files that are ignored by other gitignore-like files
-- other gitignore-like files, in descending order of precedence.
ignore_files = {
'.neotreeignore',
'.ignore',
-- ".rgignore"
},
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 = false, -- 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.
hide_by_name = {
'node_modules',
'.DS_Store',
},
window = {
mappings = {
['<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',
['o'] = {
'show_help',
nowait = false,
config = { title = 'Order by', prefix_key = 'o' },
},
['oc'] = { 'order_by_created', nowait = false },
['od'] = { 'order_by_diagnostics', nowait = false },
['og'] = { 'order_by_git_status', nowait = false },
['om'] = { 'order_by_modified', nowait = false },
['on'] = { 'order_by_name', nowait = false },
['os'] = { 'order_by_size', nowait = false },
['ot'] = { 'order_by_type', nowait = false },
-- ['<key>'] = function(state) ... end,
['\\'] = 'close_window',
['<leader>e'] = 'close_window',
},
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',
['<S-CR>'] = 'close_keep_filter',
['<C-CR>'] = 'close_clear_filter',
['<C-w>'] = { '<C-S-w>', raw = true },
{
-- normal mode mappings
n = {
['j'] = 'move_cursor_down',
['k'] = 'move_cursor_up',
['<S-CR>'] = 'close_keep_filter',
['<C-CR>'] = 'close_clear_filter',
['<esc>'] = 'close',
},
},
-- ["<esc>"] = "noop", -- if you want to use normal mode
-- ["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',
['o'] = {
'show_help',
nowait = false,
config = { title = 'Order by', prefix_key = 'o' },
},
['oc'] = { 'order_by_created', nowait = false },
['od'] = { 'order_by_diagnostics', nowait = false },
['om'] = { 'order_by_modified', nowait = false },
['on'] = { 'order_by_name', nowait = false },
['os'] = { 'order_by_size', nowait = false },
['ot'] = { 'order_by_type', nowait = false },
},
},
},
git_status = {
window = {
position = 'float',
mappings = {
['A'] = 'git_add_all',
['gu'] = 'git_unstage_file',
['gU'] = 'git_undo_last_commit',
['ga'] = 'git_add_file',
['gt'] = 'git_toggle_file_stage',
['gr'] = 'git_revert_file',
['gc'] = 'git_commit',
['gp'] = 'git_push',
['gg'] = 'git_commit_and_push',
['o'] = {
'show_help',
nowait = false,
config = { title = 'Order by', prefix_key = 'o' },
},
['oc'] = { 'order_by_created', nowait = false },
['od'] = { 'order_by_diagnostics', nowait = false },
['om'] = { 'order_by_modified', nowait = false },
['on'] = { 'order_by_name', nowait = false },
['os'] = { 'order_by_size', nowait = false },
['ot'] = { 'order_by_type', nowait = false },
},
},
},
},
keys = {
{ '\\', ':Neotree reveal position=right<CR>', desc = 'NeoTree reveal', silent = true },
{ '<leader>e', ':Neotree reveal position=right<CR>', desc = 'NeoTree reveal', silent = true },
},
},
{
'antosha417/nvim-lsp-file-operations',
dependencies = {
'nvim-lua/plenary.nvim',
'nvim-neo-tree/neo-tree.nvim', -- makes sure that this loads after Neo-tree.
},
config = function()
require('lsp-file-operations').setup()
end,
},
{
's1n7ax/nvim-window-picker',
version = '2.*',
config = function()
require('window-picker').setup {
filter_rules = {
include_current_win = false,
autoselect_one = true,
-- 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' },
},
},
}
end,
},
}