return { { "tpope/vim-repeat" }, { "tpope/vim-surround" }, { "easymotion/vim-easymotion" }, { "machakann/vim-highlightedyank" }, -- "gc" to comment visual regions/lines { "numToStr/Comment.nvim", config = function() require("Comment").setup({ pre_hook = function() return vim.bo.commentstring end, }) end, }, -- auto pairs { "echasnovski/mini.pairs", event = "VeryLazy", opts = {}, }, -- indent guides for Neovim { "lukas-reineke/indent-blankline.nvim", opts = { indent = { char = "│", tab_char = "│" }, scope = { enabled = false }, exclude = { filetypes = { "help", "alpha", "dashboard", "neo-tree", "Trouble", "trouble", "lazy", "mason", "notify", "toggleterm", "lazyterm", }, }, }, main = "ibl", }, -- Highlights the current level of indentation, and animates the highlighting. { "echasnovski/mini.indentscope", opts = { symbol = "│", options = { try_as_border = true } }, init = function() vim.api.nvim_create_autocmd("FileType", { pattern = { "help", "neo-tree", "Trouble", "trouble", "lazy", "mason", "notify", "toggleterm", }, callback = function() vim.b.miniindentscope_disable = true end, }) end, }, -- Finds and lists all of the TODO, HACK, BUG, etc comment { "folke/todo-comments.nvim", lazy = false, dependencies = { "nvim-lua/plenary.nvim" }, config = true, opts = { keywords = { HACK = { alt = { "TIP" } }, }, }, 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", }, { "dt", "TodoTrouble", desc = "Todo (Trouble)" }, { "dT", "TodoTrouble keywords=TODO,FIX,FIXME", desc = "Todo/Fix/Fixme (Trouble)" }, -- TODO: Include hidden files { "lt", "TodoTelescope", desc = "List Todo" }, { "lT", "TodoTelescope keywords=TODO,FIX,FIXME", desc = "List Todo/Fix/Fixme" }, }, }, -- better diagnostics list and others { "folke/trouble.nvim", cmd = { "TroubleToggle", "Trouble" }, opts = { use_diagnostic_signs = true }, keys = { { "dx", "TroubleToggle document_diagnostics", desc = "Document Diagnostics (Trouble)" }, { "dw", "TroubleToggle workspace_diagnostics", desc = "Workspace Diagnostics (Trouble)" }, { "dl", "TroubleToggle loclist", desc = "Location List (Trouble)" }, { "dq", "TroubleToggle quickfix", desc = "Quickfix List (Trouble)" }, { "[q", function() if require("trouble").is_open() then require("trouble").previous({ 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", }, }, }, -- Inlay hints { "lvimuser/lsp-inlayhints.nvim", config = function() require("lsp-inlayhints").setup() -- Lazy load on LspAttach vim.api.nvim_create_augroup("LspAttach_inlayhints", {}) vim.api.nvim_create_autocmd("LspAttach", { group = "LspAttach_inlayhints", callback = function(args) if not (args.data and args.data.client_id) then return end local bufnr = args.buf local client = vim.lsp.get_client_by_id(args.data.client_id) require("lsp-inlayhints").on_attach(client, bufnr) end, }) end, }, -- Lsp Breadcrumbs for lualine { "SmiteshP/nvim-navic", lazy = true, init = function() vim.g.navic_silence = true require("config.util").on_lsp_attach(function(client, buffer) if client.supports_method("textDocument/documentSymbol") then require("nvim-navic").attach(client, buffer) end end) end, opts = function() return { separator = " ", highlight = true, depth_limit = 5, icons = require("config.util").icons.kinds, lazy_update_context = true, } end, }, { "SmiteshP/nvim-navbuddy", dependencies = { "SmiteshP/nvim-navic", "MunifTanjim/nui.nvim", }, opts = { lsp = { auto_attach = true }, icons = require("config.util").icons.kinds, }, keys = { { "v", function() return require("nvim-navbuddy").open() end, desc = "N[v]igate through document symbols", }, }, }, }