[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-70614":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":25,"hasPages":23,"topics":26,"createdAt":10,"pushedAt":10,"updatedAt":31,"readmeContent":32,"aiSummary":33,"trendingCount":16,"starSnapshotCount":16,"syncStatus":34,"lastSyncTime":35,"discoverSource":36},70614,"noice.nvim","folke\u002Fnoice.nvim","folke","💥 Highly experimental plugin that completely replaces the UI for messages, cmdline and the popupmenu.","",null,"Lua",5766,170,14,7,0,6,11,39,18,37.7,"Apache License 2.0",false,"main",true,[27,28,29,30],"neovim","neovim-lua-plugin","neovim-plugin","neovim-ui","2026-06-12 02:02:35","# 💥 Noice _(Nice, Noise, Notice)_\n\nHighly experimental plugin that completely replaces the UI for `messages`, `cmdline` and the `popupmenu`.\n\n![image](https:\u002F\u002Fuser-images.githubusercontent.com\u002F292349\u002F193263220-791847b2-516c-4f23-9802-31dd6bec5f6a.png)\n\n## ✨ Features\n\n- 🌅 fully **configurable views** like [nvim-notify](https:\u002F\u002Fgithub.com\u002Frcarriga\u002Fnvim-notify),\n  splits, popups, virtual text, ..\n- 🔍 use **filters** to **route messages** to different views\n- 🌈 message **highlights** are preserved in the views (like the colors of `:hi`)\n- 📝 command output like [:messages](https:\u002F\u002Fneovim.io\u002Fdoc\u002Fuser\u002Fmessage.html#:messages)\n  is shown in normal buffers, which makes it much easier to work with\n- 📚 `:Noice` command to show a full message history\n- ⌨️ no more [:h more-prompt](https:\u002F\u002Fneovim.io\u002Fdoc\u002Fuser\u002Fmessage.html#more-prompt)\n- 💻 fully customizable **cmdline** with icons\n- 💅 **syntax highlighting** for `vim` and `lua` on the **cmdline**\n- 🚥 **statusline** components\n- 🔭 open message history in [telescope.nvim](https:\u002F\u002Fgithub.com\u002Fnvim-telescope\u002Ftelescope.nvim) or [fzf-lua](https:\u002F\u002Fgithub.com\u002Fibhagwan\u002Ffzf-lua)\n\n## 🔥 Status\n\n**Noice** is using the new experimental `vim.ui_attach` API, so issues are to be expected.\nIt is highly recommended to use Neovim nightly, since a bunch of issues have already been fixed upstream.\nCheck this [tracking issue](https:\u002F\u002Fgithub.com\u002Ffolke\u002Fnoice.nvim\u002Fissues\u002F6) for a list of known issues.\n\n## ⚡️ Requirements\n\n- Neovim >= 0.9.0 **_(nightly highly recommended)_**\n- [nui.nvim](https:\u002F\u002Fgithub.com\u002FMunifTanjim\u002Fnui.nvim): used for proper rendering and multiple views\n- [nvim-notify](https:\u002F\u002Fgithub.com\u002Frcarriga\u002Fnvim-notify): notification view _**(optional)**_\n- a [Nerd Font](https:\u002F\u002Fwww.nerdfonts.com\u002F) **_(optional)_**\n- [nvim-treesitter](https:\u002F\u002Fgithub.com\u002Fnvim-treesitter\u002Fnvim-treesitter\u002F) **_(optional, but highly recommended)_**\n  used for highlighting the cmdline and lsp docs. Make sure to install the parsers for\n  `vim`, `regex`, `lua`, `bash`, `markdown` and `markdown_inline`\n\n## 📦 Installation\n\nInstall the plugin with your preferred package manager:\n\n```lua\n-- lazy.nvim\n{\n  \"folke\u002Fnoice.nvim\",\n  event = \"VeryLazy\",\n  opts = {\n    -- add any options here\n  },\n  dependencies = {\n    -- if you lazy-load any plugin below, make sure to add proper `module=\"...\"` entries\n    \"MunifTanjim\u002Fnui.nvim\",\n    -- OPTIONAL:\n    --   `nvim-notify` is only needed, if you want to use the notification view.\n    --   If not available, we use `mini` as the fallback\n    \"rcarriga\u002Fnvim-notify\",\n    }\n}\n```\n\nSuggested setup:\n\n```lua\nrequire(\"noice\").setup({\n  lsp = {\n    -- override markdown rendering so that **cmp** and other plugins use **Treesitter**\n    override = {\n      [\"vim.lsp.util.convert_input_to_markdown_lines\"] = true,\n      [\"vim.lsp.util.stylize_markdown\"] = true,\n      [\"cmp.entry.get_documentation\"] = true, -- requires hrsh7th\u002Fnvim-cmp\n    },\n  },\n  -- you can enable a preset for easier configuration\n  presets = {\n    bottom_search = true, -- use a classic bottom cmdline for search\n    command_palette = true, -- position the cmdline and popupmenu together\n    long_message_to_split = true, -- long messages will be sent to a split\n    inc_rename = false, -- enables an input dialog for inc-rename.nvim\n    lsp_doc_border = false, -- add a border to hover docs and signature help\n  },\n})\n```\n\nIt's a good idea to run `:checkhealth noice` after installing to check for common issues.\n\n\u003Cdetails>\u003Csummary>vim-plug\u003C\u002Fsummary>\n\n```vim\n\" vim-plug\ncall plug#begin()\n  Plug 'folke\u002Fnoice.nvim'\n  Plug 'MunifTanjim\u002Fnui.nvim'\ncall plug#end()\n\nlua require(\"noice\").setup()\n\n```\n\n\u003C\u002Fdetails>\n\n## ⚙️ Configuration\n\n**noice.nvim** comes with the following defaults:\n\nCheck the [wiki](https:\u002F\u002Fgithub.com\u002Ffolke\u002Fnoice.nvim\u002Fwiki\u002FConfiguration-Recipes) for configuration recipes.\n\n```lua\n{\n  cmdline = {\n    enabled = true, -- enables the Noice cmdline UI\n    view = \"cmdline_popup\", -- view for rendering the cmdline. Change to `cmdline` to get a classic cmdline at the bottom\n    opts = {}, -- global options for the cmdline. See section on views\n    ---@type table\u003Cstring, CmdlineFormat>\n    format = {\n      -- conceal: (default=true) This will hide the text in the cmdline that matches the pattern.\n      -- view: (default is cmdline view)\n      -- opts: any options passed to the view\n      -- icon_hl_group: optional hl_group for the icon\n      -- title: set to anything or empty string to hide\n      cmdline = { pattern = \"^:\", icon = \"\", lang = \"vim\" },\n      search_down = { kind = \"search\", pattern = \"^\u002F\", icon = \" \", lang = \"regex\" },\n      search_up = { kind = \"search\", pattern = \"^%?\", icon = \" \", lang = \"regex\" },\n      filter = { pattern = \"^:%s*!\", icon = \"$\", lang = \"bash\" },\n      lua = { pattern = { \"^:%s*lua%s+\", \"^:%s*lua%s*=%s*\", \"^:%s*=%s*\" }, icon = \"\", lang = \"lua\" },\n      help = { pattern = \"^:%s*he?l?p?%s+\", icon = \"\" },\n      input = { view = \"cmdline_input\", icon = \"󰥻 \" }, -- Used by input()\n      -- lua = false, -- to disable a format, set to `false`\n    },\n  },\n  messages = {\n    -- NOTE: If you enable messages, then the cmdline is enabled automatically.\n    -- This is a current Neovim limitation.\n    enabled = true, -- enables the Noice messages UI\n    view = \"notify\", -- default view for messages\n    view_error = \"notify\", -- view for errors\n    view_warn = \"notify\", -- view for warnings\n    view_history = \"messages\", -- view for :messages\n    view_search = \"virtualtext\", -- view for search count messages. Set to `false` to disable\n  },\n  popupmenu = {\n    enabled = true, -- enables the Noice popupmenu UI\n    ---@type 'nui'|'cmp'\n    backend = \"nui\", -- backend to use to show regular cmdline completions\n    ---@type NoicePopupmenuItemKind|false\n    -- Icons for completion item kinds (see defaults at noice.config.icons.kinds)\n    kind_icons = {}, -- set to `false` to disable icons\n  },\n  -- default options for require('noice').redirect\n  -- see the section on Command Redirection\n  ---@type NoiceRouteConfig\n  redirect = {\n    view = \"popup\",\n    filter = { event = \"msg_show\" },\n  },\n  -- You can add any custom commands below that will be available with `:Noice command`\n  ---@type table\u003Cstring, NoiceCommand>\n  commands = {\n    history = {\n      -- options for the message history that you get with `:Noice`\n      view = \"split\",\n      opts = { enter = true, format = \"details\" },\n      filter = {\n        any = {\n          { event = \"notify\" },\n          { error = true },\n          { warning = true },\n          { event = \"msg_show\", kind = { \"\" } },\n          { event = \"lsp\", kind = \"message\" },\n        },\n      },\n    },\n    -- :Noice last\n    last = {\n      view = \"popup\",\n      opts = { enter = true, format = \"details\" },\n      filter = {\n        any = {\n          { event = \"notify\" },\n          { error = true },\n          { warning = true },\n          { event = \"msg_show\", kind = { \"\" } },\n          { event = \"lsp\", kind = \"message\" },\n        },\n      },\n      filter_opts = { count = 1 },\n    },\n    -- :Noice errors\n    errors = {\n      -- options for the message history that you get with `:Noice`\n      view = \"popup\",\n      opts = { enter = true, format = \"details\" },\n      filter = { error = true },\n      filter_opts = { reverse = true },\n    },\n    all = {\n      -- options for the message history that you get with `:Noice`\n      view = \"split\",\n      opts = { enter = true, format = \"details\" },\n      filter = {},\n    },\n  },\n  notify = {\n    -- Noice can be used as `vim.notify` so you can route any notification like other messages\n    -- Notification messages have their level and other properties set.\n    -- event is always \"notify\" and kind can be any log level as a string\n    -- The default routes will forward notifications to nvim-notify\n    -- Benefit of using Noice for this is the routing and consistent history view\n    enabled = true,\n    view = \"notify\",\n  },\n  lsp = {\n    progress = {\n      enabled = true,\n      -- Lsp Progress is formatted using the builtins for lsp_progress. See config.format.builtin\n      -- See the section on formatting for more details on how to customize.\n      --- @type NoiceFormat|string\n      format = \"lsp_progress\",\n      --- @type NoiceFormat|string\n      format_done = \"lsp_progress_done\",\n      throttle = 1000 \u002F 30, -- frequency to update lsp progress message\n      view = \"mini\",\n    },\n    override = {\n      -- override the default lsp markdown formatter with Noice\n      [\"vim.lsp.util.convert_input_to_markdown_lines\"] = false,\n      -- override the lsp markdown formatter with Noice\n      [\"vim.lsp.util.stylize_markdown\"] = false,\n      -- override cmp documentation with Noice (needs the other options to work)\n      [\"cmp.entry.get_documentation\"] = false,\n    },\n    hover = {\n      enabled = true,\n      silent = false, -- set to true to not show a message if hover is not available\n      view = nil, -- when nil, use defaults from documentation\n      ---@type NoiceViewOptions\n      opts = {}, -- merged with defaults from documentation\n    },\n    signature = {\n      enabled = true,\n      auto_open = {\n        enabled = true,\n        trigger = true, -- Automatically show signature help when typing a trigger character from the LSP\n        luasnip = true, -- Will open signature help when jumping to Luasnip insert nodes\n        throttle = 50, -- Debounce lsp signature help request by 50ms\n      },\n      view = nil, -- when nil, use defaults from documentation\n      ---@type NoiceViewOptions\n      opts = {}, -- merged with defaults from documentation\n    },\n    message = {\n      -- Messages shown by lsp servers\n      enabled = true,\n      view = \"notify\",\n      opts = {},\n    },\n    -- defaults for hover and signature help\n    documentation = {\n      view = \"hover\",\n      ---@type NoiceViewOptions\n      opts = {\n        lang = \"markdown\",\n        replace = true,\n        render = \"plain\",\n        format = { \"{message}\" },\n        win_options = { concealcursor = \"n\", conceallevel = 3 },\n      },\n    },\n  },\n  markdown = {\n    hover = {\n      [\"|(%S-)|\"] = vim.cmd.help, -- vim help links\n      [\"%[.-%]%((%S-)%)\"] = require(\"noice.util\").open, -- markdown links\n    },\n    highlights = {\n      [\"|%S-|\"] = \"@text.reference\",\n      [\"@%S+\"] = \"@parameter\",\n      [\"^%s*(Parameters:)\"] = \"@text.title\",\n      [\"^%s*(Return:)\"] = \"@text.title\",\n      [\"^%s*(See also:)\"] = \"@text.title\",\n      [\"{%S-}\"] = \"@parameter\",\n    },\n  },\n  health = {\n    checker = true, -- Disable if you don't want health checks to run\n  },\n  ---@type NoicePresets\n  presets = {\n    -- you can enable a preset by setting it to true, or a table that will override the preset config\n    -- you can also add custom presets that you can enable\u002Fdisable with enabled=true\n    bottom_search = false, -- use a classic bottom cmdline for search\n    command_palette = false, -- position the cmdline and popupmenu together\n    long_message_to_split = false, -- long messages will be sent to a split\n    inc_rename = false, -- enables an input dialog for inc-rename.nvim\n    lsp_doc_border = false, -- add a border to hover docs and signature help\n  },\n  throttle = 1000 \u002F 30, -- how frequently does Noice need to check for ui updates? This has no effect when in blocking mode.\n  ---@type NoiceConfigViews\n  views = {}, ---@see section on views\n  ---@type NoiceRouteConfig[]\n  routes = {}, --- @see section on routes\n  ---@type table\u003Cstring, NoiceFilter>\n  status = {}, --- @see section on statusline components\n  ---@type NoiceFormatOptions\n  format = {}, --- @see section on formatting\n}\n```\n\n\u003Cdetails>\n\u003Csummary>If you don't want to use a Nerd Font, you can replace the icons with Unicode symbols.\u003C\u002Fsummary>\n\n```lua\n  require(\"noice\").setup({\n    cmdline = {\n      format = {\n        cmdline = { icon = \">\" },\n        search_down = { icon = \"🔍⌄\" },\n        search_up = { icon = \"🔍⌃\" },\n        filter = { icon = \"$\" },\n        lua = { icon = \"☾\" },\n        help = { icon = \"?\" },\n      },\n    },\n    format = {\n      level = {\n        icons = {\n          error = \"✖\",\n          warn = \"▼\",\n          info = \"●\",\n        },\n      },\n    },\n    popupmenu = {\n      kind_icons = false,\n    },\n    inc_rename = {\n      cmdline = {\n        format = {\n          IncRename = { icon = \"⟳\" },\n        },\n      },\n    },\n  })\n```\n\n\u003C\u002Fdetails>\n\n## 🔍 Filters\n\n**Noice** uses filters to route messages to specific views.\n\n| Name           | Type                   | Description                                                                                                              |\n| -------------- | ---------------------- | ------------------------------------------------------------------------------------------------------------------------ |\n| **any**        | `filter[]`             | checks that at least one of the filters matches                                                                          |\n| **blocking**   | `boolean`              | are we in blocking mode?                                                                                                 |\n| **cleared**    | `boolean`              | checks if the message is cleared, meaning it's in the history                                                            |\n| **cmdline**    | `boolean` or `string`  | checks if the message was generated by executing a cmdline. When `string`, then it is used as a pattern                  |\n| **error**      | `boolean`              | all error-like kinds from `ext_messages`                                                                                 |\n| **event**      | `string` or `string[]` | any of the events from `ext_messages` or `cmdline`. See [:h ui-messages](https:\u002F\u002Fneovim.io\u002Fdoc\u002Fuser\u002Fui.html#ui-messages) |\n| **find**       | `string`               | uses lua `string.find` to match the pattern                                                                              |\n| **has**        | `boolean`              | checks if the message is exists, meaning it's in the history                                                             |\n| **kind**       | `string` or `string[]` | any of the kinds from `ext_messages`. See [:h ui-messages](https:\u002F\u002Fneovim.io\u002Fdoc\u002Fuser\u002Fui.html#ui-messages)               |\n| **max_height** | `number`               | maximum height of the message                                                                                            |\n| **max_length** | `number`               | maximum length of the message (total width of all the lines)                                                             |\n| **max_width**  | `number`               | maximum width of the message                                                                                             |\n| **min_height** | `number`               | minimum height of the message                                                                                            |\n| **min_length** | `number`               | minimum length of the message (total width of all the lines)                                                             |\n| **min_width**  | `number`               | minimum width of the message                                                                                             |\n| **mode**       | `string`               | checks if `vim.api.nvim_get_mode()` contains the given mode                                                              |\n| **not**        | `filter`               | checks whether the filter matches or not                                                                                 |\n| **warning**    | `boolean`              | all warning-like kinds from `ext_messages`                                                                               |\n\n\u003Cdetails>\n\u003Csummary>Example:\u003C\u002Fsummary>\n\n```lua\n-- all messages over 10 lines, excluding echo and search_count\nlocal filter = {\n  event = \"msg_show\",\n  min_height = 10,\n  [\"not\"] = { kind = { \"search_count\", \"echo\" } },\n}\n```\n\n\u003C\u002Fdetails>\n\n## 🌅 Views\n\n**Noice** comes with the following built-in backends:\n\n- **popup**: powered by [nui.nvim](https:\u002F\u002Fgithub.com\u002FMunifTanjim\u002Fnui.nvim)\n- **split**: powered by [nui.nvim](https:\u002F\u002Fgithub.com\u002FMunifTanjim\u002Fnui.nvim)\n- **notify**: powered by [nvim-notify](https:\u002F\u002Fgithub.com\u002Frcarriga\u002Fnvim-notify)\n- **virtualtext**: shows the message as virtualtext (for example for `search_count`)\n- **mini**: similar to [notifier.nvim](https:\u002F\u002Fgithub.com\u002Fvigoux\u002Fnotifier.nvim) & [fidget.nvim](https:\u002F\u002Fgithub.com\u002Fj-hui\u002Ffidget.nvim)\n- **notify_send**: generate a desktop notification\n\nA **View** (`config.views`) is a combination of a `backend` and options.\n**Noice** comes with the following built-in views with sane defaults:\n\n| View               | Backend    | Description                                                                        |\n| ------------------ | ---------- | ---------------------------------------------------------------------------------- |\n| **notify**         | `notify`   | _nvim-notify_ with `level=nil`, `replace=false`, `merge=false`                     |\n| **split**          | `split`    | horizontal split                                                                   |\n| **vsplit**         | `split`    | vertical split                                                                     |\n| **popup**          | `popup`    | simple popup                                                                       |\n| **mini**           | `mini`     | minimal view, by default bottom right, right-aligned                               |\n| **cmdline**        | `popup`    | bottom line, similar to the classic cmdline                                        |\n| **cmdline_popup**  | `popup`    | fancy cmdline popup, with different styles according to the cmdline mode           |\n| **cmdline_output** | `split`    | split used by `config.presets.cmdline_output_to_split`                             |\n| **messages**       | `split`    | split used for `:messages`                                                         |\n| **confirm**        | `popup`    | popup used for `confirm` events                                                    |\n| **hover**          | `popup`    | popup used for lsp signature help and hover                                        |\n| **popupmenu**      | `nui.menu` | special view with the options used to render the popupmenu when backend is **nui** |\n\nPlease refer to [noice.config.views](https:\u002F\u002Fgithub.com\u002Ffolke\u002Fnoice.nvim\u002Fblob\u002Fmain\u002Flua\u002Fnoice\u002Fconfig\u002Fviews.lua)\nto see the options.\nAny options passed to existing views in `config.views`, will override those options only.\nYou can configure completely new views and use them in custom routes.\n\n\u003Cdetails>\n\u003Csummary>Example:\u003C\u002Fsummary>\n\n```lua\n-- override the default split view to always enter the split when it opens\nrequire(\"noice\").setup({\n  views = {\n    split = {\n      enter = true,\n    },\n  },\n})\n```\n\n\u003C\u002Fdetails>\n\n> All built-in Noice views have the filetype `noice`\n\n### Nui Options\n\nSee the Nui documentation for [Popup](https:\u002F\u002Fgithub.com\u002FMunifTanjim\u002Fnui.nvim\u002Ftree\u002Fmain\u002Flua\u002Fnui\u002Fpopup)\nand [Split](https:\u002F\u002Fgithub.com\u002FMunifTanjim\u002Fnui.nvim\u002Ftree\u002Fmain\u002Flua\u002Fnui\u002Fsplit).\n\n\u003Ctable>\n\u003Ctr>\u003Ctd>Option\u003C\u002Ftd>\u003Ctd>Description\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd> \u003Cb>size, position\u003C\u002Fb> \u003C\u002Ftd>\n\u003Ctd>Size, position and their constituents can additionally be specified as \u003Cb>\"auto\"\u003C\u002Fb>, to use the message height and width.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cb>win_options.winhighlight\u003C\u002Fb>\u003C\u002Ftd>\n\u003Ctd>\nString or can also be a table like:\n\n```lua\n{\n  win_options = {\n    winhighlight = {\n      Normal = \"NormalFloat\",\n      FloatBorder = \"FloatBorder\"\n    },\n  }\n}\n```\n\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctd> \u003Cb>scrollbar\u003C\u002Fb> \u003C\u002Ftd>\n\u003Ctd>Set to \u003Ccode>false\u003C\u002Fcode> to hide the scrollbar.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003C\u002Ftable>\n\n### Notify Options\n\n| Option      | Type             | Default          | Description                                                                                                                             |\n| ----------- | ---------------- | ---------------- | --------------------------------------------------------------------------------------------------------------------------------------- |\n| **title**   | `string`         | `\"Notification\"` | title to be used for the notification. Uses `Message.title` if available.                                                               |\n| **replace** | `boolean`        | `false`          | when true, messages routing to the same notify instance will replace existing messages instead of pushing a new notification every time |\n| **merge**   | `boolean`        | `false`          | Merge messages into one Notification or create separate notifications                                                                   |\n| **level**   | `number\\|string` | `nil`            | notification level. Uses `Message.level` if available.                                                                                  |\n\n### Virtual Text Options\n\nRight now there's only an option to set the `hl_group` used to render the virtual text.\n\n## 🎨 Formatting\n\nFormatting options can be specified with `config.format`.\nFor a list of the defaults, please refer to [config.format](https:\u002F\u002Fgithub.com\u002Ffolke\u002Fnoice.nvim\u002Fblob\u002Fmain\u002Flua\u002Fnoice\u002Fconfig\u002Fformat.lua)\n\n**Noice** includes the following formatters:\n\n- **level**: message level with optional `icon` and `hl_group` per level\n- **text**: any text with optional `hl_group`\n- **title**: message title with optional `hl_group`\n- **event**: message event with optional `hl_group`\n- **kind**: message kind with optional `hl_group`\n- **date**: formatted date with optional date format string\n- **message**: message content itself with optional `hl_group` to override message highlights\n- **confirm**: only useful for `confirm` messages. Will format the choices as buttons.\n- **cmdline**: will render the cmdline in the message that generated the message.\n- **progress**: progress bar used by lsp progress\n- **spinner**: spinners used by lsp progress\n- **data**: render any custom data from `Message.opts`. Useful in combination with the opts passed to `vim.notify`\n\nFormatters are used in `format` definitions. **Noice** includes the following built-in formats:\n\n```lua\n{\n  -- default format\n  default = { \"{level} \", \"{title} \", \"{message}\" },\n  -- default format for vim.notify views\n  notify = { \"{message}\" },\n  -- default format for the history\n  details = {\n    \"{level} \",\n    \"{date} \",\n    \"{event}\",\n    { \"{kind}\", before = { \".\", hl_group = \"NoiceFormatKind\" } },\n    \" \",\n    \"{title} \",\n    \"{cmdline} \",\n    \"{message}\",\n  },\n  telescope = ..., -- formatter used to display telescope results\n  telescope_preview = ..., -- formatter used to preview telescope results\n  fzf = ..., -- formatter used to display fzf results\n  fzf_preview = ..., -- formatter used to preview fzf results\n  lsp_progress = ..., -- formatter used by lsp progress\n  lsp_progress_done = ..., -- formatter used by lsp progress\n}\n```\n\nText before\u002Fafter the formatter or in the before\u002Fafter options, will only be rendered if the formatter itself rendered something.\n\nThe `format` view option, can be either a `string` (one of the built-in formats), or a table with a custom format definition.\n\nTo align text, you can use the `align` option for a view. Can be `center`, `left` or `right`.\n\n## 🚗 Routes\n\nA **route** has a `filter`, `view` and optional `opts` attribute.\n\n- **view**: one of the views (built-in or custom)\n- **filter** a filter for messages matching this route\n- **opts**: options for the view and the route\n\nRoute options can be any of the view options above, or one of:\n\n| Option   | Type      | Default | Description                                                                                                                                                          |\n| -------- | --------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| **skip** | `boolean` | `false` | messages matching this filter will be skipped and not shown in any views                                                                                             |\n| **stop** | `boolean` | `true`  | When `false` and a route matches the filter, then other routes can still process the message too. Useful if you want certain messages to be shown in multiple views. |\n\nPlease refer to [noice.config.routes](https:\u002F\u002Fgithub.com\u002Ffolke\u002Fnoice.nvim\u002Fblob\u002Fmain\u002Flua\u002Fnoice\u002Fconfig\u002Froutes.lua)\nfor an overview of the default routes.\n**Routes** passed to `setup()` will be prepended to the default routes.\n\n\u003Cdetails>\n\u003Csummary>Example\u003C\u002Fsummary>\n\n```lua\n-- skip search_count messages instead of showing them as virtual text\nrequire(\"noice\").setup({\n  routes = {\n    {\n      filter = { event = \"msg_show\", kind = \"search_count\" },\n      opts = { skip = true },\n    },\n  },\n})\n\n-- always route any messages with more than 20 lines to the split view\nrequire(\"noice\").setup({\n  routes = {\n    {\n      view = \"split\",\n      filter = { event = \"msg_show\", min_height = 20 },\n    },\n  },\n})\n```\n\n\u003C\u002Fdetails>\n\n## 🚥 Statusline Components\n\n**Noice** comes with the following statusline components:\n\n- **ruler**\n- **message**: last line of the last message (`event=show_msg`)\n- **command**: `showcmd`\n- **mode**: `showmode` (@recording messages)\n- **search**: search count messages\n\nSee [noice.config.status](https:\u002F\u002Fgithub.com\u002Ffolke\u002Fnoice.nvim\u002Fblob\u002Fmain\u002Flua\u002Fnoice\u002Fconfig\u002Fstatus.lua) for the default config.\n\nYou can add custom statusline components in setup under the `status` key.\n\nStatusline components have the following methods:\n\n- **get**: gets the content of the message **without** highlights\n- **get_hl**: gets the content of the message **with** highlights\n- **has**: checks if the component is available\n\n\u003Cdetails>\n\u003Csummary>Example of configuring \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fnvim-lualine\u002Flualine.nvim\">lualine.nvim\u003C\u002Fa>\u003C\u002Fsummary>\n\n```lua\nrequire(\"lualine\").setup({\n  sections = {\n    lualine_x = {\n      {\n        require(\"noice\").api.status.message.get_hl,\n        cond = require(\"noice\").api.status.message.has,\n      },\n      {\n        require(\"noice\").api.status.command.get,\n        cond = require(\"noice\").api.status.command.has,\n        color = { fg = \"#ff9e64\" },\n      },\n      {\n        require(\"noice\").api.status.mode.get,\n        cond = require(\"noice\").api.status.mode.has,\n        color = { fg = \"#ff9e64\" },\n      },\n      {\n        require(\"noice\").api.status.search.get,\n        cond = require(\"noice\").api.status.search.has,\n        color = { fg = \"#ff9e64\" },\n      },\n    },\n  },\n})\n```\n\n\u003C\u002Fdetails>\n\n## 🔭 Pickers\n\nFor convenience, you can do `:Noice pick`, which will open a picker with all the messages in the history,\neither with `telescope` or `fzf-lua`.\n\n## 🔭 Telescope\n\nIn order to use **Noice** in **Telescope**, you can either do `:Noice telescope`,\nor register the extension and use `:Telescope noice`.\nThe results panel is formatted using `config.format.formatters.telescope`. The preview is formatted with `config.format.formatters.telescope_preview`\n\n```lua\nrequire(\"telescope\").load_extension(\"noice\")\n```\n\n## 🔭 Fzf Lua\n\nIn order to use **Noice** in **FzfLua**, you can do `:Noice fzf`.\nThe results panel is formatted using `config.format.formatters.fzf`. The preview is formatted with `config.format.formatters.telescope_fzf`\n\n## 🚀 Usage\n\n- `:Noice` or `:Noice history` shows the message history\n- `:Noice last` shows the last message in a popup\n- `:Noice dismiss` dismiss all visible messages\n- `:Noice errors` shows the error messages in a split. Last errors on top\n- `:Noice disable` disables **Noice**\n- `:Noice enable` enables **Noice**\n- `:Noice stats` shows debugging stats\n- `:Noice telescope` opens message history in Telescope\n\nAlternatively, all commands also exist as a full name like `:NoiceLast`, `:NoiceDisable`.\n\nYou can also use `Lua` equivalents.\n\n```lua\nvim.keymap.set(\"n\", \"\u003Cleader>nl\", function()\n  require(\"noice\").cmd(\"last\")\nend)\n\nvim.keymap.set(\"n\", \"\u003Cleader>nh\", function()\n  require(\"noice\").cmd(\"history\")\nend)\n```\n\n> You can add custom commands with `config.commands`\n\n### ↪️ Command Redirection\n\nSometimes it's useful to redirect the messages generated by a command or function\nto a different view. That can be easily achieved with command redirection.\n\nThe redirect API can taken an optional `routes` parameter, which defaults to `{config.redirect}`.\n\n```lua\n-- redirect \":hi\"\nrequire(\"noice\").redirect(\"hi\")\n\n-- redirect some function\nrequire(\"noice\").redirect(function()\n  print(\"test\")\nend)\n```\n\nAdding the following keymap, will redirect the active cmdline when pressing `\u003CS-Enter>`.\nThe cmdline stays open, so you can change the command and execute it again.\nWhen exiting the cmdline, the popup window will be focused.\n\n```lua\nvim.keymap.set(\"c\", \"\u003CS-Enter>\", function()\n  require(\"noice\").redirect(vim.fn.getcmdline())\nend, { desc = \"Redirect Cmdline\" })\n```\n\n### Lsp Hover Doc Scrolling\n\n```lua\nvim.keymap.set({ \"n\", \"i\", \"s\" }, \"\u003Cc-f>\", function()\n  if not require(\"noice.lsp\").scroll(4) then\n    return \"\u003Cc-f>\"\n  end\nend, { silent = true, expr = true })\n\nvim.keymap.set({ \"n\", \"i\", \"s\" }, \"\u003Cc-b>\", function()\n  if not require(\"noice.lsp\").scroll(-4) then\n    return \"\u003Cc-b>\"\n  end\nend, { silent = true, expr = true })\n```\n\n## 🌈 Highlight Groups\n\n\u003Cdetails>\n\u003Csummary>Click to see all highlight groups\u003C\u002Fsummary>\n\n\u003C!-- hl_start -->\n\n| Highlight Group                        | Default Group                    | Description                                        |\n| -------------------------------------- | -------------------------------- | -------------------------------------------------- |\n| **NoiceCmdline**                       | _MsgArea_                        | Normal for the classic cmdline area at the bottom\" |\n| **NoiceCmdlineIcon**                   | _DiagnosticSignInfo_             | Cmdline icon                                       |\n| **NoiceCmdlineIconCalculator**         | _NoiceCmdlineIcon_               |                                                    |\n| **NoiceCmdlineIconCmdline**            | _NoiceCmdlineIcon_               |                                                    |\n| **NoiceCmdlineIconFilter**             | _NoiceCmdlineIcon_               |                                                    |\n| **NoiceCmdlineIconHelp**               | _NoiceCmdlineIcon_               |                                                    |\n| **NoiceCmdlineIconIncRename**          | _NoiceCmdlineIcon_               |                                                    |\n| **NoiceCmdlineIconInput**              | _NoiceCmdlineIcon_               |                                                    |\n| **NoiceCmdlineIconLua**                | _NoiceCmdlineIcon_               |                                                    |\n| **NoiceCmdlineIconSearch**             | _DiagnosticSignWarn_             | Cmdline search icon (`\u002F` and `?`)                  |\n| **NoiceCmdlinePopup**                  | _Normal_                         | Normal for the cmdline popup                       |\n| **NoiceCmdlinePopupBorder**            | _DiagnosticSignInfo_             | Cmdline popup border                               |\n| **NoiceCmdlinePopupBorderCalculator**  | _NoiceCmdlinePopupBorder_        |                                                    |\n| **NoiceCmdlinePopupBorderCmdline**     | _NoiceCmdlinePopupBorder_        |                                                    |\n| **NoiceCmdlinePopupBorderFilter**      | _NoiceCmdlinePopupBorder_        |                                                    |\n| **NoiceCmdlinePopupBorderHelp**        | _NoiceCmdlinePopupBorder_        |                                                    |\n| **NoiceCmdlinePopupBorderIncRename**   | _NoiceCmdlinePopupBorder_        |                                                    |\n| **NoiceCmdlinePopupBorderInput**       | _NoiceCmdlinePopupBorder_        |                                                    |\n| **NoiceCmdlinePopupBorderLua**         | _NoiceCmdlinePopupBorder_        |                                                    |\n| **NoiceCmdlinePopupBorderSearch**      | _DiagnosticSignWarn_             | Cmdline popup border for search                    |\n| **NoiceCmdlinePopupTitle**             | _DiagnosticSignInfo_             | Cmdline popup border                               |\n| **NoiceCmdlinePrompt**                 | _Title_                          | prompt for input()                                 |\n| **NoiceCompletionItemKindClass**       | _NoiceCompletionItemKindDefault_ |                                                    |\n| **NoiceCompletionItemKindColor**       | _NoiceCompletionItemKindDefault_ |                                                    |\n| **NoiceCompletionItemKindConstant**    | _NoiceCompletionItemKindDefault_ |                                                    |\n| **NoiceCompletionItemKindConstructor** | _NoiceCompletionItemKindDefault_ |                                                    |\n| **NoiceCompletionItemKindDefault**     | _Special_                        |                                                    |\n| **NoiceCompletionItemKindEnum**        | _NoiceCompletionItemKindDefault_ |                                                    |\n| **NoiceCompletionItemKindEnumMember**  | _NoiceCompletionItemKindDefault_ |                                                    |\n| **NoiceCompletionItemKindField**       | _NoiceCompletionItemKindDefault_ |                                                    |\n| **NoiceCompletionItemKindFile**        | _NoiceCompletionItemKindDefault_ |                                                    |\n| **NoiceCompletionItemKindFolder**      | _NoiceCompletionItemKindDefault_ |                                                    |\n| **NoiceCompletionItemKindFunction**    | _NoiceCompletionItemKindDefault_ |                                                    |\n| **NoiceCompletionItemKindInterface**   | _NoiceCompletionItemKindDefault_ |                                                    |\n| **NoiceCompletionItemKindKeyword**     | _NoiceCompletionItemKindDefault_ |                                                    |\n| **NoiceCompletionItemKindMethod**      | _NoiceCompletionItemKindDefault_ |                                                    |\n| **NoiceCompletionItemKindModule**      | _NoiceCompletionItemKindDefault_ |                                                    |\n| **NoiceCompletionItemKindProperty**    | _NoiceCompletionItemKindDefault_ |                                                    |\n| **NoiceCompletionItemKindSnippet**     | _NoiceCompletionItemKindDefault_ |                                                    |\n| **NoiceCompletionItemKindStruct**      | _NoiceCompletionItemKindDefault_ |                                                    |\n| **NoiceCompletionItemKindText**        | _NoiceCompletionItemKindDefault_ |                                                    |\n| **NoiceCompletionItemKindUnit**        | _NoiceCompletionItemKindDefault_ |                                                    |\n| **NoiceCompletionItemKindValue**       | _NoiceCompletionItemKindDefault_ |                                                    |\n| **NoiceCompletionItemKindVariable**    | _NoiceCompletionItemKindDefault_ |                                                    |\n| **NoiceCompletionItemMenu**            | _none_                           | Normal for the popupmenu                           |\n| **NoiceCompletionItemWord**            | _none_                           | Normal for the popupmenu                           |\n| **NoiceConfirm**                       | _Normal_                         | Normal for the confirm view                        |\n| **NoiceConfirmBorder**                 | _DiagnosticSignInfo_             | Border for the confirm view                        |\n| **NoiceCursor**                        | _Cursor_                         | Fake Cursor                                        |\n| **NoiceFormatConfirm**                 | _CursorLine_                     |                                                    |\n| **NoiceFormatConfirmDefault**          | _Visual_                         |                                                    |\n| **NoiceFormatDate**                    | _Special_                        |                                                    |\n| **NoiceFormatEvent**                   | _NonText_                        |                                                    |\n| **NoiceFormatKind**                    | _NonText_                        |                                                    |\n| **NoiceFormatLevelDebug**              | _NonText_                        |                                                    |\n| **NoiceFormatLevelError**              | _DiagnosticVirtualTextError_     |                                                    |\n| **NoiceFormatLevelInfo**               | _DiagnosticVirtualTextInfo_      |                                                    |\n| **NoiceFormatLevelOff**                | _NonText_                        |                                                    |\n| **NoiceFormatLevelTrace**              | _NonText_                        |                                                    |\n| **NoiceFormatLevelWarn**               | _DiagnosticVirtualTextWarn_      |                                                    |\n| **NoiceFormatProgressDone**            | _Search_                         | Progress bar done                                  |\n| **NoiceFormatProgressTodo**            | _CursorLine_                     | progress bar todo                                  |\n| **NoiceFormatTitle**                   | _Title_                          |                                                    |\n| **NoiceLspProgressClient**             | _Title_                          | Lsp progress client name                           |\n| **NoiceLspProgressSpinner**            | _Constant_                       | Lsp progress spinner                               |\n| **NoiceLspProgressTitle**              | _NonText_                        | Lsp progress title                                 |\n| **NoiceMini**                          | _MsgArea_                        | Normal for mini view                               |\n| **NoicePopup**                         | _NormalFloat_                    | Normal for popup views                             |\n| **NoicePopupBorder**                   | _FloatBorder_                    | Border for popup views                             |\n| **NoicePopupmenu**                     | _Pmenu_                          | Normal for the popupmenu                           |\n| **NoicePopupmenuBorder**               | _FloatBorder_                    | Popupmenu border                                   |\n| **NoicePopupmenuMatch**                | _Special_                        | Part of the item that matches the input            |\n| **NoicePopupmenuSelected**             | _PmenuSel_                       | Selected item in the popupmenu                     |\n| **NoiceScrollbar**                     | _PmenuSbar_                      | Normal for scrollbar                               |\n| **NoiceScrollbarThumb**                | _PmenuThumb_                     | Scrollbar thumb                                    |\n| **NoiceSplit**                         | _NormalFloat_                    | Normal for split views                             |\n| **NoiceSplitBorder**                   | _FloatBorder_                    | Border for split views                             |\n| **NoiceVirtualText**                   | _DiagnosticVirtualTextInfo_      | Default hl group for virtualtext views             |\n\n\u003C!-- hl_end -->\n\n\u003C\u002Fdetails>\n","Noice.nvim 是一个高度实验性的 Neovim 插件，旨在完全替换消息、命令行和弹出菜单的用户界面。它支持高度可配置的视图、过滤器来路由消息到不同的显示区域，并保持消息高亮显示。此外，该插件还提供了一个可以查看完整消息历史记录的命令 `:Noice`，以及对命令行输出进行语法高亮的功能。适用于追求极致定制化体验的 Neovim 用户，特别是那些希望改善编辑器内消息展示方式的人士。需要注意的是，由于 Noice 采用了新的实验性 API `vim.ui_attach`，建议使用最新版的 Neovim 以获得最佳体验。",2,"2026-06-11 03:33:00","high_star"]