450 lines
12 KiB
Lua
450 lines
12 KiB
Lua
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
|
|
["<space>"] = "none", -- Space für andere Funktionen freigeben
|
|
["<2-LeftMouse>"] = "open",
|
|
["<cr>"] = "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
|
|
["<esc>"] = "clear_filter", -- Filter löschen
|
|
["f"] = "filter_on_submit", -- Filtern (Alternative)
|
|
["<c-x>"] = "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 = {
|
|
["<space>"] = "none", -- Space für andere Funktionen freigeben
|
|
["<2-LeftMouse>"] = "open",
|
|
["<cr>"] = "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", "<leader>e", ":Neotree toggle right<CR>",
|
|
{ silent = true, desc = "Explorer ein/aus" })
|
|
-- Tastenkombination für Dateiansicht
|
|
vim.keymap.set("n", "<leader>ef", ":Neotree focus filesystem right<CR>",
|
|
{ silent = true, desc = "Datei-Explorer" })
|
|
-- Tastenkombination für Buffer-Liste
|
|
vim.keymap.set("n", "<leader>eb", ":Neotree focus buffers right<CR>",
|
|
{ silent = true, desc = "Buffer-Liste" })
|
|
-- Tastenkombination für Git-Status
|
|
vim.keymap.set("n", "<leader>eg", ":Neotree focus git_status right<CR>",
|
|
{ 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", "<leader>a", require("harpoon.mark").add_file, { desc = "Datei markieren" })
|
|
vim.keymap.set("n", "<leader>h", require("harpoon.ui").toggle_quick_menu,
|
|
{ desc = "Harpoon-Menü" })
|
|
vim.keymap.set("n", "<C-j>", function() require("harpoon.ui").nav_file(1) end)
|
|
vim.keymap.set("n", "<C-k>", function() require("harpoon.ui").nav_file(2) end)
|
|
vim.keymap.set("n", "<C-l>", function() require("harpoon.ui").nav_file(3) end)
|
|
vim.keymap.set("n", "<C-;>", 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,
|
|
}
|
|
}
|