+ keys = {
+ { "<leader>xx", "<cmd>Trouble diagnostics toggle<cr>", desc = "Diagnostics (Trouble)" },
+ { "<leader>xX", "<cmd>Trouble diagnostics toggle filter.buf=0<cr>", desc = "Buffer Diagnostics (Trouble)" },
+ { "<leader>cs", "<cmd>Trouble symbols toggle<cr>", desc = "Symbols (Trouble)" },
+ { "<leader>cS", "<cmd>Trouble lsp toggle<cr>", desc = "LSP references/definitions/... (Trouble)" },
+ { "<leader>xL", "<cmd>Trouble loclist toggle<cr>", desc = "Location List (Trouble)" },
+ { "<leader>xQ", "<cmd>Trouble qflist toggle<cr>", desc = "Quickfix List (Trouble)" },
+ {
+ "[q",
+ function()
+ if require("trouble").is_open() then
+ require("trouble").prev({ skip_groups = true, jump = true })
+ else
+ local ok, err = pcall(vim.cmd.cprev)
+ if not ok then
+ vim.notify(err, vim.log.levels.ERROR)
+ end
+ end
+ end,
+ desc = "Previous Trouble/Quickfix Item",
+ },
+ {
+ "]q",
+ function()
+ if require("trouble").is_open() then
+ require("trouble").next({ skip_groups = true, jump = true })
+ else
+ local ok, err = pcall(vim.cmd.cnext)
+ if not ok then
+ vim.notify(err, vim.log.levels.ERROR)
+ end
+ end
+ end,
+ desc = "Next Trouble/Quickfix Item",
+ },
+ },
+ },
+ { "folke/todo-comments.nvim",
+ -- Finds and lists all of the TODO, HACK, BUG, etc comment
+ -- in your project and loads them into a browsable list.
+ cmd = { "TodoTrouble"},
+ event = "LazyFile",
+ -- stylua: ignore
+ keys = {
+ { "]t", function() require("todo-comments").jump_next() end, desc = "Next Todo Comment" },
+ { "[t", function() require("todo-comments").jump_prev() end, desc = "Previous Todo Comment" },
+ { "<leader>xt", "<cmd>Trouble todo toggle<cr>", desc = "Todo (Trouble)" },
+ { "<leader>xT", "<cmd>Trouble todo toggle filter = {tag = {TODO,FIX,FIXME}}<cr>", desc = "Todo/Fix/Fixme (Trouble)" },
+ },
+ opts = {}
+ },
+ { "folke/flash.nvim",
+ -- Flash enhances the built-in search functionality by showing labels
+ -- at the end of each match, letting you quickly jump to a specific
+ -- location.
+ event = "VeryLazy",
+ vscode = true,
+ ---@type Flash.Config
+ opts = {},
+ -- stylua: ignore
+ keys = {
+ { "s", mode = { "n", "x", "o" }, function() require("flash").jump() end, desc = "Flash" },
+ { "S", mode = { "n", "o", "x" }, function() require("flash").treesitter() end, desc = "Flash Treesitter" },
+ { "r", mode = "o", function() require("flash").remote() end, desc = "Remote Flash" },
+ { "R", mode = { "o", "x" }, function() require("flash").treesitter_search() end, desc = "Treesitter Search" },
+ { "<c-s>", mode = { "c" }, function() require("flash").toggle() end, desc = "Toggle Flash Search" },
+ },
+ },
+ { "lewis6991/gitsigns.nvim",
+ -- git signs highlights text that has changed since the list
+ -- git commit, and also lets you interactively stage & unstage
+ -- hunks in a commit.
+ event = "LazyFile",
+ opts = {
+ signs = {
+ add = { text = "▎" },
+ change = { text = "▎" },
+ delete = { text = "" },
+ topdelete = { text = "" },
+ changedelete = { text = "▎" },
+ untracked = { text = "▎" },
+ },
+ signs_staged = {
+ add = { text = "▎" },
+ change = { text = "▎" },
+ delete = { text = "" },
+ topdelete = { text = "" },
+ changedelete = { text = "▎" },
+ },
+ on_attach = function(buffer)
+ local gs = package.loaded.gitsigns
+
+ local function map(mode, l, r, desc)
+ vim.keymap.set(mode, l, r, { buffer = buffer, desc = desc })