return { -- Highly experimental plugin that completely replaces the UI for messages, cmdline and the popupmenu. "folke/noice.nvim", lazy = true, event = "VeryLazy", keys = { { "sn", "", desc = "+noice" }, { "", function() require("noice").redirect(vim.fn.getcmdline()) end, mode = "c", desc = "Redirect Cmdline", }, { "snl", function() require("noice").cmd "last" end, desc = "Noice Last Message", }, { "snh", function() require("noice").cmd "history" end, desc = "Noice History", }, { "sna", function() require("noice").cmd "all" end, desc = "Noice All", }, { "snd", function() require("noice").cmd "dismiss" end, desc = "Dismiss All", }, { "", function() if not require("noice.lsp").scroll(4) then return "" end end, silent = true, expr = true, desc = "Scroll forward", mode = { "i", "n", "s" }, }, { "", function() if not require("noice.lsp").scroll(-4) then return "" end end, silent = true, expr = true, desc = "Scroll backward", mode = { "i", "n", "s" }, }, }, opts = { lsp = { override = { ["vim.lsp.util.convert_input_to_markdown_lines"] = true, ["vim.lsp.util.stylize_markdown"] = true, ["cmp.entry.get_documentation"] = true, }, }, routes = { { filter = { event = "msg_show", any = { { find = "%d+L, %d+B" }, { find = "; after #%d+" }, { find = "; before #%d+" }, }, }, view = "mini", }, }, presets = { bottom_search = true, command_palette = true, long_message_to_split = true, }, }, config = function(_, opts) -- HACK: noice shows messages from before it was enabled, -- but this is not ideal when Lazy is installing plugins, -- so clear the messages in this case. if vim.o.filetype == "lazy" then vim.cmd [[messages clear]] end require("noice").setup(opts) end, }