return { -- Fuzzy Finder { 'nvim-telescope/telescope.nvim', dependencies = { 'nvim-lua/plenary.nvim', 'nvim-telescope/telescope-fzf-native.nvim', }, }, -- LSP & Completion { 'neovim/nvim-lspconfig', dependencies = { 'williamboman/mason.nvim', 'williamboman/mason-lspconfig.nvim', 'hrsh7th/nvim-cmp', 'hrsh7th/cmp-nvim-lsp', 'hrsh7th/cmp-buffer', 'hrsh7th/cmp-path', 'L3MON4D3/LuaSnip', 'saadparwaiz1/cmp_luasnip', 'j-hui/fidget.nvim', }, config = function() -- Nichts hier definieren - wir laden die Konfiguration aus der lsp.lua require("custom.lsp") end, }, -- Snipped { "rafamadriz/friendly-snippets", dependencies = { "L3MON4D3/LuaSnip", }, config = function() require("luasnip.loaders.from_vscode").lazy_load() end, }, -- Syntax Highlighting { 'nvim-treesitter/nvim-treesitter', build = ':TSUpdate', dependencies = { 'nvim-treesitter/nvim-treesitter-textobjects', }, }, -- Datei-Explorer { "nvim-neo-tree/neo-tree.nvim", dependencies = { "nvim-lua/plenary.nvim", "nvim-tree/nvim-web-devicons", -- Für Datei-Icons "MunifTanjim/nui.nvim", -- UI-Komponenten-Bibliothek }, config = function() -- Standardkonfiguration deaktivieren vim.g.neo_tree_remove_legacy_commands = 1 require("neo-tree").setup({ close_if_last_window = false, -- Neovim schließen, wenn nur noch Neo-tree offen ist? popup_border_style = "rounded", -- Stil für Popup-Fenster enable_git_status = true, -- Git-Integration aktivieren enable_diagnostics = true, -- Zeige Diagnostik-Informationen (LSP) default_component_configs = { container = { enable_character_fade = true, -- Schöne Übergänge bei Textlängen width = "100%", right_padding = 0, }, indent = { indent_size = 2, padding = 1, with_markers = true, indent_marker = "│", last_indent_marker = "└", highlight = "NeoTreeIndentMarker", with_expanders = true, -- Klick-/Tastatur-expandierbare Ordner expander_collapsed = "", expander_expanded = "", expander_highlight = "NeoTreeExpander", }, icon = { folder_closed = "", folder_open = "", folder_empty = "󰜌", default = "*", highlight = "NeoTreeFileIcon" }, modified = { symbol = "[+]", highlight = "NeoTreeModified", }, name = { trailing_slash = false, use_git_status_colors = true, highlight = "NeoTreeFileName", }, git_status = { symbols = { -- Symbole für Git-Status added = "✚", -- oder "✚" modified = "", -- oder "✹" deleted = "✖", -- oder "" renamed = "➜", -- oder "" untracked = "★", -- oder "✭" ignored = "◌", -- oder "◌" unstaged = "✗", -- oder "✗" staged = "✓", -- oder "✓" conflict = "", -- oder "≠" } }, }, -- Welche Ansichten verfügbar sein sollen source_selector = { winbar = true, -- Zeige Auswahl in der Fensterleiste statusline = false, -- Nicht in der Statuszeile anzeigen content_layout = "center", sources = { -- Verfügbare Quellen { source = "filesystem", display_name = " Dateien " }, { source = "buffers", display_name = " Buffer " }, { source = "git_status", display_name = " Git " }, }, tabs_layout = "equal", -- "equal", "focus" }, -- Dateisystemansicht filesystem = { filtered_items = { visible = true, -- Gefilterte Elemente mit anderen Stil anzeigen hide_dotfiles = false, -- Versteckte Dateien anzeigen hide_gitignored = false, -- Git-ignorierte Dateien anzeigen hide_hidden = false, -- Versteckte Dateien unter Windows anzeigen hide_by_name = { -- "node_modules", -- Auskommentieren, um zu verstecken }, hide_by_pattern = { -- "*.meta", -- Auskommentieren, um zu verstecken }, always_show = { -- Immer anzeigen, auch wenn sie sonst gefiltert würden ".gitignored", ".env", }, never_show = { -- Dateien, die immer ausgeblendet werden ".DS_Store", }, never_show_by_pattern = { -- Regex-Muster für Dateien, die nie angezeigt werden -- ".*\\.meta$", }, }, follow_current_file = { enabled = true, -- Hervorheben der aktuellen Datei im Explorer leave_dirs_open = false, -- Ordner öffnen, wenn Datei darin }, group_empty_dirs = false, -- Leere Unterordner unter Elternordner gruppieren hijack_netrw_behavior = "open_default", -- Netrw ersetzen use_libuv_file_watcher = true, -- Effiziente Dateiüberwachung (bemerkt Änderungen) window = { mappings = { -- Tastenkombinationen im Dateisystem-Fenster [""] = "none", -- Space für andere Funktionen freigeben ["<2-LeftMouse>"] = "open", [""] = "open", ["S"] = "open_split", -- In horizontales Split öffnen ["s"] = "open_vsplit", -- In vertikales Split öffnen ["t"] = "open_tabnew", -- In neuem Tab öffnen ["C"] = "close_node", -- Knoten schließen ["z"] = "close_all_nodes", -- Alle Knoten schließen ["R"] = "refresh", -- Aktualisieren ["a"] = { "add", -- Neue Datei/Ordner erstellen config = { show_path = "relative" -- Relativen Pfad beim Erstellen anzeigen } }, ["d"] = "delete", -- Löschen ["r"] = "rename", -- Umbenennen ["y"] = "copy_to_clipboard", -- In Zwischenablage kopieren ["x"] = "cut_to_clipboard", -- Ausschneiden ["p"] = "paste_from_clipboard", -- Einfügen ["c"] = "copy", -- Kopieren (mit Ziel-Auswahl) ["m"] = "move", -- Verschieben (mit Ziel-Auswahl) ["/"] = "filter_on_submit", -- Filtern [""] = "clear_filter", -- Filter löschen ["f"] = "filter_on_submit", -- Filtern (Alternative) [""] = "clear_filter", -- Filter löschen (Alternative) ["?"] = "show_help", -- Hilfe anzeigen } }, }, -- Buffer-Ansicht (Geöffnete Dateien) buffers = { follow_current_file = { enabled = true, -- Aktuelle Datei hervorheben }, group_empty_dirs = true, -- Leere Ordner gruppieren show_unloaded = true, -- Auch nicht geladene Buffer anzeigen }, -- Git-Status-Ansicht git_status = { window = { mappings = { ["A"] = "git_add_all", -- Alle Änderungen stagen ["u"] = "git_unstage_file", -- Datei unstagen ["a"] = "git_add_file", -- Datei stagen ["r"] = "git_revert_file", -- Änderungen zurücksetzen ["c"] = "git_commit", -- Commit erstellen ["p"] = "git_push", -- Push ["gg"] = "git_commit_and_push", -- Commit und Push } } }, -- Hauptfenster-Konfiguration window = { position = "right", -- Explorer auf der rechten Seite width = 35, -- Breite des Explorers mapping_options = { noremap = true, nowait = true, }, mappings = { [""] = "none", -- Space für andere Funktionen freigeben ["<2-LeftMouse>"] = "open", [""] = "open", ["S"] = "open_split", ["s"] = "open_vsplit", ["t"] = "open_tabnew", ["w"] = "open_with_window_picker", -- Mit Fensterauswahl öffnen ["C"] = "close_node", ["z"] = "close_all_nodes", ["R"] = "refresh", ["a"] = { "add", config = { show_path = "relative" } }, ["d"] = "delete", ["r"] = "rename", ["y"] = "copy_to_clipboard", ["x"] = "cut_to_clipboard", ["p"] = "paste_from_clipboard", ["c"] = "copy", ["m"] = "move", ["q"] = "close_window", -- Fenster schließen ["?"] = "show_help", } } }) -- Tastenkombination zum Öffnen des Explorers vim.keymap.set("n", "e", ":Neotree toggle right", { silent = true, desc = "Explorer ein/aus" }) -- Tastenkombination für Dateiansicht vim.keymap.set("n", "ef", ":Neotree focus filesystem right", { silent = true, desc = "Datei-Explorer" }) -- Tastenkombination für Buffer-Liste vim.keymap.set("n", "eb", ":Neotree focus buffers right", { silent = true, desc = "Buffer-Liste" }) -- Tastenkombination für Git-Status vim.keymap.set("n", "eg", ":Neotree focus git_status right", { silent = true, desc = "Git-Status" }) end, }, -- Schnellwechsel zwischen Dateien (wie Harpoon) { 'ThePrimeagen/harpoon', dependencies = { 'nvim-lua/plenary.nvim', }, config = function() -- Basiseinstellungen für Harpoon require("harpoon").setup() -- Einfache, direkte Keybindings vim.keymap.set("n", "a", require("harpoon.mark").add_file, { desc = "Datei markieren" }) vim.keymap.set("n", "h", require("harpoon.ui").toggle_quick_menu, { desc = "Harpoon-Menü" }) vim.keymap.set("n", "", function() require("harpoon.ui").nav_file(1) end) vim.keymap.set("n", "", function() require("harpoon.ui").nav_file(2) end) vim.keymap.set("n", "", function() require("harpoon.ui").nav_file(3) end) vim.keymap.set("n", "", function() require("harpoon.ui").nav_file(4) end) end, }, -- Git-Integration { 'lewis6991/gitsigns.nvim', config = true, }, -- Formatierung { 'stevearc/conform.nvim', }, -- Framework-Unterstützung -- PHP/Symfony { 'phpactor/phpactor', ft = 'php', build = 'composer install --no-dev -o', }, -- TypeScript/JavaScript/React/Vue/NestJS { 'pmizio/typescript-tools.nvim', dependencies = { 'nvim-lua/plenary.nvim', 'neovim/nvim-lspconfig', }, config = function() require("typescript-tools").setup({ settings = { tsserver_file_preferences = { importModuleSpecifierPreference = "relative", }, }, }) end, }, -- Vue.js -- { -- 'neovim/nvim-lspconfig', -- opts = function(_, opts) -- -- Füge Volar als Server hinzu -- opts.servers = opts.servers or {} -- opts.servers.volar = { -- filetypes = { 'vue', 'typescript', 'javascript' } -- } -- end, -- }, -- Playwright Testing { 'mxsdev/nvim-dap', dependencies = { 'rcarriga/nvim-dap-ui', 'mfussenegger/nvim-dap-python', }, }, -- YAML und JSON Unterstützung 'b0o/schemastore.nvim', -- Für Zen-Modus { "folke/zen-mode.nvim", cmd = "ZenMode", opts = { window = { width = 90, options = { number = false, relativenumber = false, }, }, }, }, -- Für Git-Integration { "sindrets/diffview.nvim", dependencies = { "nvim-lua/plenary.nvim" }, }, -- Für Neogit { "NeogitOrg/neogit", dependencies = { "nvim-lua/plenary.nvim", "sindrets/diffview.nvim", }, cmd = "Neogit", }, -- Für Farbvorschau in Code { "norcalli/nvim-colorizer.lua", cmd = "ColorizerToggle", config = true, }, -- Leap/Lightspeed { "ggandor/leap.nvim", config = function() require('leap').add_default_mappings() end, }, -- Hydra für kontextbezogene Tastaturmodi { "anuvyklack/hydra.nvim", event = "VeryLazy", config = function() -- Die Konfigurationen folgen im nächsten Schritt require("custom.hydra") end, }, -- Window-Picker { "s1n7ax/nvim-window-picker", version = "v2.*", config = function() require("window-picker").setup({ filter_rules = { -- Filtere diese Fenstertypen aus bo = { filetype = { "neo-tree", "neo-tree-popup", "notify", "quickfix" }, buftype = { "terminal" }, }, }, highlights = { statusline = { focused = { fg = "#000000", bg = "#E35E4F", }, unfocused = { fg = "#000000", bg = "#44CC41", }, }, }, picker_config = { statusline_winbar_picker = { -- Verwende Buchstaben des Alphabets für die Fensterauswahl selection_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ", }, }, }) end, } }