-- ~/.config/nvim/lua/custom/hydra.lua local Hydra = require('hydra') -- Fenster-Management Hydra Hydra({ name = 'Fenster', mode = 'n', body = '', heads = { -- Navigieren zwischen Fenstern { 'h', 'h', { desc = 'links' } }, { 'j', 'j', { desc = 'unten' } }, { 'k', 'k', { desc = 'oben' } }, { 'l', 'l', { desc = 'rechts' } }, -- Fenster verschieben { 'H', 'H', { desc = 'nach links verschieben' } }, { 'J', 'J', { desc = 'nach unten verschieben' } }, { 'K', 'K', { desc = 'nach oben verschieben' } }, { 'L', 'L', { desc = 'nach rechts verschieben' } }, -- Größe ändern { '>', '>', { desc = 'breiter' } }, { '<', '<', { desc = 'schmaler' } }, { '+', '+', { desc = 'höher' } }, { '-', '-', { desc = 'niedriger' } }, { '=', '=', { desc = 'gleiche Größe' } }, -- Neue Fenster { 's', 's', { desc = 'horizontal teilen' } }, { 'v', 'v', { desc = 'vertikal teilen' } }, { 'n', 'new', { desc = 'neue horizontale Teilung' } }, { 'N', 'vnew', { desc = 'neue vertikale Teilung' } }, -- Fenster schließen { 'c', 'c', { desc = 'schließen' } }, { 'o', 'o', { desc = 'andere schließen' } }, -- Beenden { 'q', nil, { desc = 'beenden', exit = true } }, { '', nil, { desc = 'beenden', exit = true } }, } }) -- Harpoon Hydra Hydra({ name = 'Harpoon', mode = 'n', body = 'h', heads = { { 'a', function() require("harpoon.mark").add_file() end, { desc = 'Datei hinzufügen' } }, { 'h', function() require("harpoon.ui").toggle_quick_menu() end, { desc = 'Menü anzeigen' } }, { 'n', function() require("harpoon.ui").nav_next() end, { desc = 'Nächste Datei' } }, { 'p', function() require("harpoon.ui").nav_prev() end, { desc = 'Vorherige Datei' } }, { '1', function() require("harpoon.ui").nav_file(1) end, { desc = 'Datei 1' } }, { '2', function() require("harpoon.ui").nav_file(2) end, { desc = 'Datei 2' } }, { '3', function() require("harpoon.ui").nav_file(3) end, { desc = 'Datei 3' } }, { '4', function() require("harpoon.ui").nav_file(4) end, { desc = 'Datei 4' } }, { '5', function() require("harpoon.ui").nav_file(5) end, { desc = 'Datei 5' } }, { 'q', nil, { desc = 'beenden', exit = true } }, { '', nil, { desc = 'beenden', exit = true } }, } }) -- Git-Operationen Hydra (funktioniert mit Gitsigns und Neogit) Hydra({ name = 'Git', mode = 'n', body = 'g', heads = { -- Gitsigns { 'h', function() require("gitsigns").preview_hunk() end, { desc = 'Änderung anzeigen' } }, { 'n', function() require("gitsigns").next_hunk() end, { desc = 'Nächste Änderung' } }, { 'p', function() require("gitsigns").prev_hunk() end, { desc = 'Vorherige Änderung' } }, { 's', function() require("gitsigns").stage_hunk() end, { desc = 'Änderung stagen' } }, { 'u', function() require("gitsigns").undo_stage_hunk() end, { desc = 'Stagen rückgängig' } }, { 'r', function() require("gitsigns").reset_hunk() end, { desc = 'Änderung zurücksetzen' } }, -- Neogit { 'g', function() require("neogit").open() end, { desc = 'Neogit öffnen', exit = true } }, { 'c', function() require("neogit").open({ "commit" }) end, { desc = 'Commit', exit = true } }, { 'P', function() require("neogit").open({ "push" }) end, { desc = 'Push', exit = true } }, { 'l', function() require("neogit").open({ "log" }) end, { desc = 'Log', exit = true } }, -- Diffview { 'd', 'DiffviewOpen', { desc = 'Diff anzeigen', exit = true } }, -- Beenden { 'q', nil, { desc = 'beenden', exit = true } }, { '', nil, { desc = 'beenden', exit = true } }, } }) -- Neo-tree Hydra Hydra({ name = 'Explorer', mode = 'n', body = 'E', heads = { { 'e', 'Neotree toggle right', { desc = 'Explorer ein/aus', exit = true } }, { 'f', 'Neotree focus filesystem right', { desc = 'Dateisystem', exit = true } }, { 'b', 'Neotree focus buffers right', { desc = 'Buffer', exit = true } }, { 'g', 'Neotree focus git_status right', { desc = 'Git-Status', exit = true } }, -- Leap Integration { 's', function() -- Öffne Neo-tree und springe mit Leap vim.cmd('Neotree focus filesystem right') -- Eine kleine Verzögerung, damit Neo-tree Zeit hat, zu öffnen vim.defer_fn(function() require('leap').leap { target_windows = { vim.api.nvim_get_current_win() } } end, 100) end, { desc = 'Suchen mit Leap', exit = true } }, -- Beenden { 'q', nil, { desc = 'beenden', exit = true } }, { '', nil, { desc = 'beenden', exit = true } }, } }) -- LSP und Coding-Hydra Hydra({ name = 'Code', mode = 'n', body = 'c', heads = { -- LSP Aktionen { 'a', vim.lsp.buf.code_action, { desc = 'Code-Aktion' } }, { 'r', vim.lsp.buf.rename, { desc = 'Umbenennen' } }, { 'd', vim.lsp.buf.definition, { desc = 'Definition', exit = true } }, { 'D', vim.lsp.buf.declaration, { desc = 'Deklaration', exit = true } }, { 'i', vim.lsp.buf.implementation, { desc = 'Implementation', exit = true } }, { 'h', vim.lsp.buf.hover, { desc = 'Hover Info' } }, { 'f', function() require('conform').format() end, { desc = 'Formatieren' } }, -- Diagnostik { 'n', vim.diagnostic.goto_next, { desc = 'Nächster Fehler' } }, { 'p', vim.diagnostic.goto_prev, { desc = 'Vorheriger Fehler' } }, { 'l', vim.diagnostic.open_float, { desc = 'Fehler anzeigen' } }, -- Beenden { 'q', nil, { desc = 'beenden', exit = true } }, { '', nil, { desc = 'beenden', exit = true } }, } }) -- Erweiterte Navigation mit Leap und Harpoon Hydra({ name = 'Navigation', mode = 'n', body = 'n', heads = { -- Leap { 'f', function() require('leap').leap { target_windows = { vim.api.nvim_get_current_win() } } end, { desc = 'Leap vorwärts', exit = true } }, { 'F', function() require('leap').leap { backward = true, target_windows = { vim.api.nvim_get_current_win() } } end, { desc = 'Leap rückwärts', exit = true } }, { 'w', function() require('leap').leap { target_windows = vim.tbl_filter( function(win) return vim.api.nvim_win_get_config(win).relative == '' end, vim.api.nvim_list_wins() ) } end, { desc = 'Leap alle Fenster', exit = true } }, -- Harpoon { 'h', function() require("harpoon.ui").toggle_quick_menu() end, { desc = 'Harpoon-Menü', exit = true } }, { '1', function() require("harpoon.ui").nav_file(1) end, { desc = 'Harpoon 1', exit = true } }, { '2', function() require("harpoon.ui").nav_file(2) end, { desc = 'Harpoon 2', exit = true } }, { '3', function() require("harpoon.ui").nav_file(3) end, { desc = 'Harpoon 3', exit = true } }, { '4', function() require("harpoon.ui").nav_file(4) end, { desc = 'Harpoon 4', exit = true } }, -- Dateiexploration { 'e', 'Neotree toggle right', { desc = 'Explorer', exit = true } }, { 't', 'Telescope find_files', { desc = 'Dateien suchen', exit = true } }, { 'g', 'Telescope live_grep', { desc = 'Inhalte suchen', exit = true } }, -- Beenden { 'q', nil, { desc = 'beenden', exit = true } }, { '', nil, { desc = 'beenden', exit = true } }, } })