neovim-config/lua/plugins/neo-tree.lua

261 lines
8.2 KiB
Lua

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',
's1n7ax/nvim-window-picker',
},
lazy = false, -- neo-tree will lazily load itself
opts = {},
config = function()
vim.cmd([[ let g:neo_tree_remove_legacy_commands = 1 ]])
vim.api.nvim_set_keymap('', '<TAB>', ':Neotree reveal<CR>', { silent = true })
require('window-picker').setup({
autoselect_one = true,
include_current = false,
filter_rules = {
bo = {
filetype = { 'neo-tree', 'neo-tree-popup', 'notify' },
buftype = { 'terminal', 'quickfix' },
},
},
selection_chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
highlights = {
statusline = {
focused = {
bg = '#519aba',
},
unfocused = {
bg = '#519aba',
},
},
winbar = {
focused = {
bg = '#519aba',
},
unfocused = {
bg = '#519aba',
},
},
},
})
require('neo-tree').setup({
default_component_configs = {
icon = {
folder_empty = '󰜌',
folder_empty_open = '󰜌',
},
git_status = {
symbols = {
renamed = '󰁕',
unstaged = '󰄱',
},
},
},
document_symbols = {
kinds = {
File = { icon = '󰈙', hl = 'Tag' },
Namespace = { icon = '󰌗', hl = 'Include' },
Package = { icon = '󰏖', hl = 'Label' },
Class = { icon = '󰌗', hl = 'Include' },
Property = { icon = '󰆧', hl = '@property' },
Enum = { icon = '󰒻', hl = '@number' },
Function = { icon = '󰊕', hl = 'Function' },
String = { icon = '󰀬', hl = 'String' },
Number = { icon = '󰎠', hl = 'Number' },
Array = { icon = '󰅪', hl = 'Type' },
Object = { icon = '󰅩', hl = 'Type' },
Key = { icon = '󰌋', hl = '' },
Struct = { icon = '󰌗', hl = 'Type' },
Operator = { icon = '󰆕', hl = 'Operator' },
TypeParameter = { icon = '󰊄', hl = 'Type' },
StaticMethod = { icon = '󰠄 ', hl = 'Function' },
},
},
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,
sort_function = nil,
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 = {
added = '',
modified = '',
deleted = '',
renamed = '󰁕',
untracked = '',
ignored = '',
unstaged = '',
staged = '',
conflict = '',
},
},
},
window = {
position = 'left',
width = 35,
mapping_options = {
noremap = true,
nowait = true,
},
mappings = {
['<space>'] = {
'toggle_node',
nowait = false,
},
['<esc>'] = 'revert_preview',
['P'] = { 'toggle_preview', config = { use_float = true } },
['s'] = 'split_with_window_picker',
['v'] = 'vsplit_with_window_picker',
['t'] = 'open_tabnew',
['<cr>'] = 'open_with_window_picker',
['<2-LeftMouse>'] = 'open_with_window_picker',
['C'] = 'close_node',
['z'] = 'close_all_nodes',
['a'] = {
'add',
config = {
show_path = 'absolute',
},
},
['d'] = 'delete',
['r'] = 'rename',
['y'] = 'copy_to_clipboard',
['x'] = 'cut_to_clipboard',
['p'] = 'paste_from_clipboard',
['c'] = 'copy',
['m'] = {
'move',
config = {
show_path = 'absolute',
},
},
['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 = { 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.
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 = {
['<bs>'] = 'navigate_up',
['.'] = 'set_root',
['H'] = 'toggle_hidden',
['/'] = 'fuzzy_finder',
['D'] = 'fuzzy_finder_directory',
['f'] = 'filter_on_submit',
['<c-x>'] = 'clear_filter',
['[g'] = 'prev_git_modified',
[']g'] = 'next_git_modified',
},
},
},
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.
group_empty_dirs = true, -- when true, empty folders will be grouped together
show_unloaded = true,
window = {
mappings = {
['d'] = 'buffer_delete',
['<bs>'] = '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,
sources = {
{
source = 'filesystem',
display_name = ' 󰉓 Files',
},
{
source = 'document_symbols',
display_name = ' 󰈙 Symbols',
},
{
source = 'git_status',
display_name = ' 󰊢 Git',
},
},
},
})
end,
}