mirror of
https://github.com/LazyVim/LazyVim.git
synced 2025-06-21 16:39:06 +02:00
128 lines
3.9 KiB
Lua
128 lines
3.9 KiB
Lua
return {
|
|
|
|
-- file explorer
|
|
{
|
|
"nvim-neo-tree/neo-tree.nvim",
|
|
cmd = "Neotree",
|
|
keys = {
|
|
{
|
|
"<leader>fe",
|
|
function()
|
|
require("neo-tree.command").execute({ toggle = true, dir = LazyVim.root() })
|
|
end,
|
|
desc = "Explorer NeoTree (Root Dir)",
|
|
},
|
|
{
|
|
"<leader>fE",
|
|
function()
|
|
require("neo-tree.command").execute({ toggle = true, dir = vim.uv.cwd() })
|
|
end,
|
|
desc = "Explorer NeoTree (cwd)",
|
|
},
|
|
{ "<leader>e", "<leader>fe", desc = "Explorer NeoTree (Root Dir)", remap = true },
|
|
{ "<leader>E", "<leader>fE", desc = "Explorer NeoTree (cwd)", remap = true },
|
|
{
|
|
"<leader>ge",
|
|
function()
|
|
require("neo-tree.command").execute({ source = "git_status", toggle = true })
|
|
end,
|
|
desc = "Git Explorer",
|
|
},
|
|
{
|
|
"<leader>be",
|
|
function()
|
|
require("neo-tree.command").execute({ source = "buffers", toggle = true })
|
|
end,
|
|
desc = "Buffer Explorer",
|
|
},
|
|
},
|
|
deactivate = function()
|
|
vim.cmd([[Neotree close]])
|
|
end,
|
|
init = function()
|
|
-- FIX: use `autocmd` for lazy-loading neo-tree instead of directly requiring it,
|
|
-- because `cwd` is not set up properly.
|
|
vim.api.nvim_create_autocmd("BufEnter", {
|
|
group = vim.api.nvim_create_augroup("Neotree_start_directory", { clear = true }),
|
|
desc = "Start Neo-tree with directory",
|
|
once = true,
|
|
callback = function()
|
|
if package.loaded["neo-tree"] then
|
|
return
|
|
else
|
|
local stats = vim.uv.fs_stat(vim.fn.argv(0))
|
|
if stats and stats.type == "directory" then
|
|
require("neo-tree")
|
|
end
|
|
end
|
|
end,
|
|
})
|
|
end,
|
|
opts = {
|
|
sources = { "filesystem", "buffers", "git_status" },
|
|
open_files_do_not_replace_types = { "terminal", "Trouble", "trouble", "qf", "Outline" },
|
|
filesystem = {
|
|
bind_to_cwd = false,
|
|
follow_current_file = { enabled = true },
|
|
use_libuv_file_watcher = true,
|
|
},
|
|
window = {
|
|
mappings = {
|
|
["l"] = "open",
|
|
["h"] = "close_node",
|
|
["<space>"] = "none",
|
|
["Y"] = {
|
|
function(state)
|
|
local node = state.tree:get_node()
|
|
local path = node:get_id()
|
|
vim.fn.setreg("+", path, "c")
|
|
end,
|
|
desc = "Copy Path to Clipboard",
|
|
},
|
|
["O"] = {
|
|
function(state)
|
|
require("lazy.util").open(state.tree:get_node().path, { system = true })
|
|
end,
|
|
desc = "Open with System Application",
|
|
},
|
|
["P"] = { "toggle_preview", config = { use_float = false } },
|
|
},
|
|
},
|
|
default_component_configs = {
|
|
indent = {
|
|
with_expanders = true, -- if nil and file nesting is enabled, will enable expanders
|
|
expander_collapsed = "",
|
|
expander_expanded = "",
|
|
expander_highlight = "NeoTreeExpander",
|
|
},
|
|
git_status = {
|
|
symbols = {
|
|
unstaged = "",
|
|
staged = "",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
config = function(_, opts)
|
|
local function on_move(data)
|
|
Snacks.rename.on_rename_file(data.source, data.destination)
|
|
end
|
|
|
|
local events = require("neo-tree.events")
|
|
opts.event_handlers = opts.event_handlers or {}
|
|
vim.list_extend(opts.event_handlers, {
|
|
{ event = events.FILE_MOVED, handler = on_move },
|
|
{ event = events.FILE_RENAMED, handler = on_move },
|
|
})
|
|
require("neo-tree").setup(opts)
|
|
vim.api.nvim_create_autocmd("TermClose", {
|
|
pattern = "*lazygit",
|
|
callback = function()
|
|
if package.loaded["neo-tree.sources.git_status"] then
|
|
require("neo-tree.sources.git_status").refresh()
|
|
end
|
|
end,
|
|
})
|
|
end,
|
|
},
|
|
}
|