[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-73381":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":28,"readmeContent":29,"aiSummary":30,"trendingCount":16,"starSnapshotCount":16,"syncStatus":31,"lastSyncTime":32,"discoverSource":33},73381,"snacks.nvim","folke\u002Fsnacks.nvim","folke","🍿 A collection of QoL plugins for Neovim","",null,"Lua",7723,464,24,25,0,16,37,143,48,39,"Apache License 2.0",false,"main",true,[27],"neovim-plugin","2026-06-12 02:03:12","# 🍿 `snacks.nvim`\n\nA collection of small QoL plugins for Neovim.\n\n## ✨ Features\n\n\u003C!-- toc:start -->\n\n| Snack | Description | Setup |\n| ----- | ----------- | :---: |\n| [animate](https:\u002F\u002Fgithub.com\u002Ffolke\u002Fsnacks.nvim\u002Fblob\u002Fmain\u002Fdocs\u002Fanimate.md) | Efficient animations including over 45 easing functions _(library)_ |  |\n| [bigfile](https:\u002F\u002Fgithub.com\u002Ffolke\u002Fsnacks.nvim\u002Fblob\u002Fmain\u002Fdocs\u002Fbigfile.md) | Deal with big files | ‼️ |\n| [bufdelete](https:\u002F\u002Fgithub.com\u002Ffolke\u002Fsnacks.nvim\u002Fblob\u002Fmain\u002Fdocs\u002Fbufdelete.md) | Delete buffers without disrupting window layout |  |\n| [dashboard](https:\u002F\u002Fgithub.com\u002Ffolke\u002Fsnacks.nvim\u002Fblob\u002Fmain\u002Fdocs\u002Fdashboard.md) |  Beautiful declarative dashboards | ‼️ |\n| [debug](https:\u002F\u002Fgithub.com\u002Ffolke\u002Fsnacks.nvim\u002Fblob\u002Fmain\u002Fdocs\u002Fdebug.md) | Pretty inspect & backtraces for debugging |  |\n| [dim](https:\u002F\u002Fgithub.com\u002Ffolke\u002Fsnacks.nvim\u002Fblob\u002Fmain\u002Fdocs\u002Fdim.md) | Focus on the active scope by dimming the rest |  |\n| [explorer](https:\u002F\u002Fgithub.com\u002Ffolke\u002Fsnacks.nvim\u002Fblob\u002Fmain\u002Fdocs\u002Fexplorer.md) | A file explorer (picker in disguise) | ‼️ |\n| [gh](https:\u002F\u002Fgithub.com\u002Ffolke\u002Fsnacks.nvim\u002Fblob\u002Fmain\u002Fdocs\u002Fgh.md) | GitHub CLI integration |  |\n| [git](https:\u002F\u002Fgithub.com\u002Ffolke\u002Fsnacks.nvim\u002Fblob\u002Fmain\u002Fdocs\u002Fgit.md) | Git utilities |  |\n| [gitbrowse](https:\u002F\u002Fgithub.com\u002Ffolke\u002Fsnacks.nvim\u002Fblob\u002Fmain\u002Fdocs\u002Fgitbrowse.md) | Open the current file, branch, commit, or repo in a browser (e.g. GitHub, GitLab, Bitbucket) |  |\n| [image](https:\u002F\u002Fgithub.com\u002Ffolke\u002Fsnacks.nvim\u002Fblob\u002Fmain\u002Fdocs\u002Fimage.md) | Image viewer using Kitty Graphics Protocol, supported by `kitty`, `wezterm` and `ghostty` | ‼️ |\n| [indent](https:\u002F\u002Fgithub.com\u002Ffolke\u002Fsnacks.nvim\u002Fblob\u002Fmain\u002Fdocs\u002Findent.md) | Indent guides and scopes |  |\n| [input](https:\u002F\u002Fgithub.com\u002Ffolke\u002Fsnacks.nvim\u002Fblob\u002Fmain\u002Fdocs\u002Finput.md) | Better `vim.ui.input` | ‼️ |\n| [keymap](https:\u002F\u002Fgithub.com\u002Ffolke\u002Fsnacks.nvim\u002Fblob\u002Fmain\u002Fdocs\u002Fkeymap.md) | Better `vim.keymap` with support for filetypes and LSP clients |  |\n| [layout](https:\u002F\u002Fgithub.com\u002Ffolke\u002Fsnacks.nvim\u002Fblob\u002Fmain\u002Fdocs\u002Flayout.md) | Window layouts |  |\n| [lazygit](https:\u002F\u002Fgithub.com\u002Ffolke\u002Fsnacks.nvim\u002Fblob\u002Fmain\u002Fdocs\u002Flazygit.md) | Open LazyGit in a float, auto-configure colorscheme and integration with Neovim |  |\n| [notifier](https:\u002F\u002Fgithub.com\u002Ffolke\u002Fsnacks.nvim\u002Fblob\u002Fmain\u002Fdocs\u002Fnotifier.md) | Pretty `vim.notify` | ‼️ |\n| [notify](https:\u002F\u002Fgithub.com\u002Ffolke\u002Fsnacks.nvim\u002Fblob\u002Fmain\u002Fdocs\u002Fnotify.md) | Utility functions to work with Neovim's `vim.notify` |  |\n| [picker](https:\u002F\u002Fgithub.com\u002Ffolke\u002Fsnacks.nvim\u002Fblob\u002Fmain\u002Fdocs\u002Fpicker.md) | Picker for selecting items | ‼️ |\n| [profiler](https:\u002F\u002Fgithub.com\u002Ffolke\u002Fsnacks.nvim\u002Fblob\u002Fmain\u002Fdocs\u002Fprofiler.md) | Neovim lua profiler |  |\n| [quickfile](https:\u002F\u002Fgithub.com\u002Ffolke\u002Fsnacks.nvim\u002Fblob\u002Fmain\u002Fdocs\u002Fquickfile.md) | When doing `nvim somefile.txt`, it will render the file as quickly as possible, before loading your plugins. | ‼️ |\n| [rename](https:\u002F\u002Fgithub.com\u002Ffolke\u002Fsnacks.nvim\u002Fblob\u002Fmain\u002Fdocs\u002Frename.md) | LSP-integrated file renaming with support for plugins like [neo-tree.nvim](https:\u002F\u002Fgithub.com\u002Fnvim-neo-tree\u002Fneo-tree.nvim) and [mini.files](https:\u002F\u002Fgithub.com\u002Fnvim-mini\u002Fmini.files). |  |\n| [scope](https:\u002F\u002Fgithub.com\u002Ffolke\u002Fsnacks.nvim\u002Fblob\u002Fmain\u002Fdocs\u002Fscope.md) | Scope detection, text objects and jumping based on treesitter or indent | ‼️ |\n| [scratch](https:\u002F\u002Fgithub.com\u002Ffolke\u002Fsnacks.nvim\u002Fblob\u002Fmain\u002Fdocs\u002Fscratch.md) | Scratch buffers with a persistent file |  |\n| [scroll](https:\u002F\u002Fgithub.com\u002Ffolke\u002Fsnacks.nvim\u002Fblob\u002Fmain\u002Fdocs\u002Fscroll.md) | Smooth scrolling | ‼️ |\n| [statuscolumn](https:\u002F\u002Fgithub.com\u002Ffolke\u002Fsnacks.nvim\u002Fblob\u002Fmain\u002Fdocs\u002Fstatuscolumn.md) | Pretty status column | ‼️ |\n| [terminal](https:\u002F\u002Fgithub.com\u002Ffolke\u002Fsnacks.nvim\u002Fblob\u002Fmain\u002Fdocs\u002Fterminal.md) | Create and toggle floating\u002Fsplit terminals |  |\n| [toggle](https:\u002F\u002Fgithub.com\u002Ffolke\u002Fsnacks.nvim\u002Fblob\u002Fmain\u002Fdocs\u002Ftoggle.md) | Toggle keymaps integrated with which-key icons \u002F colors |  |\n| [util](https:\u002F\u002Fgithub.com\u002Ffolke\u002Fsnacks.nvim\u002Fblob\u002Fmain\u002Fdocs\u002Futil.md) | Utility functions for Snacks _(library)_ |  |\n| [win](https:\u002F\u002Fgithub.com\u002Ffolke\u002Fsnacks.nvim\u002Fblob\u002Fmain\u002Fdocs\u002Fwin.md) | Create and manage floating windows or splits |  |\n| [words](https:\u002F\u002Fgithub.com\u002Ffolke\u002Fsnacks.nvim\u002Fblob\u002Fmain\u002Fdocs\u002Fwords.md) | Auto-show LSP references and quickly navigate between them | ‼️ |\n| [zen](https:\u002F\u002Fgithub.com\u002Ffolke\u002Fsnacks.nvim\u002Fblob\u002Fmain\u002Fdocs\u002Fzen.md) | Zen mode • distraction-free coding |  |\n\n\u003C!-- toc:end -->\n\n## ⚡️ Requirements\n\n- **Neovim** >= 0.9.4\n- for proper icons support:\n  - [mini.icons](https:\u002F\u002Fgithub.com\u002Fnvim-mini\u002Fmini.icons) _(optional)_\n  - [nvim-web-devicons](https:\u002F\u002Fgithub.com\u002Fnvim-tree\u002Fnvim-web-devicons) _(optional)_\n  - a [Nerd Font](https:\u002F\u002Fwww.nerdfonts.com\u002F) **_(optional)_**\n\n## 📦 Installation\n\nInstall the plugin with your package manager:\n\n### [lazy.nvim](https:\u002F\u002Fgithub.com\u002Ffolke\u002Flazy.nvim)\n\n> [!important]\n> A couple of plugins **require** `snacks.nvim` to be set-up early.\n> Setup creates some autocmds and does not load any plugins.\n> Check the [code](https:\u002F\u002Fgithub.com\u002Ffolke\u002Fsnacks.nvim\u002Fblob\u002Fmain\u002Flua\u002Fsnacks\u002Finit.lua) to see what it does.\n\n> [!caution]\n> You need to explicitly pass options for a plugin or set `enabled = true` to enable it.\n\n> [!tip]\n> It's a good idea to run `:checkhealth snacks` to see if everything is set up correctly.\n\n```lua\n{\n  \"folke\u002Fsnacks.nvim\",\n  priority = 1000,\n  lazy = false,\n  ---@type snacks.Config\n  opts = {\n    -- your configuration comes here\n    -- or leave it empty to use the default settings\n    -- refer to the configuration section below\n    bigfile = { enabled = true },\n    dashboard = { enabled = true },\n    explorer = { enabled = true },\n    indent = { enabled = true },\n    input = { enabled = true },\n    picker = { enabled = true },\n    notifier = { enabled = true },\n    quickfile = { enabled = true },\n    scope = { enabled = true },\n    scroll = { enabled = true },\n    statuscolumn = { enabled = true },\n    words = { enabled = true },\n  },\n}\n```\n\nFor an in-depth setup of `snacks.nvim` with `lazy.nvim`, check the [example](https:\u002F\u002Fgithub.com\u002Ffolke\u002Fsnacks.nvim?tab=readme-ov-file#-usage) below.\n\n## ⚙️ Configuration\n\nPlease refer to the readme of each plugin for their specific configuration.\n\n\u003Cdetails>\u003Csummary>Default Options\u003C\u002Fsummary>\n\n\u003C!-- config:start -->\n\n```lua\n---@class snacks.Config\n---@field animate? snacks.animate.Config\n---@field bigfile? snacks.bigfile.Config\n---@field dashboard? snacks.dashboard.Config\n---@field dim? snacks.dim.Config\n---@field explorer? snacks.explorer.Config\n---@field gh? snacks.gh.Config\n---@field gitbrowse? snacks.gitbrowse.Config\n---@field image? snacks.image.Config\n---@field indent? snacks.indent.Config\n---@field input? snacks.input.Config\n---@field layout? snacks.layout.Config\n---@field lazygit? snacks.lazygit.Config\n---@field notifier? snacks.notifier.Config\n---@field picker? snacks.picker.Config\n---@field profiler? snacks.profiler.Config\n---@field quickfile? snacks.quickfile.Config\n---@field scope? snacks.scope.Config\n---@field scratch? snacks.scratch.Config\n---@field scroll? snacks.scroll.Config\n---@field statuscolumn? snacks.statuscolumn.Config\n---@field terminal? snacks.terminal.Config\n---@field toggle? snacks.toggle.Config\n---@field win? snacks.win.Config\n---@field words? snacks.words.Config\n---@field zen? snacks.zen.Config\n---@field styles? table\u003Cstring, snacks.win.Config>\n---@field image? snacks.image.Config|{}\n{\n  image = {\n    -- define these here, so that we don't need to load the image module\n    formats = {\n      \"png\",\n      \"jpg\",\n      \"jpeg\",\n      \"gif\",\n      \"bmp\",\n      \"webp\",\n      \"tiff\",\n      \"heic\",\n      \"avif\",\n      \"mp4\",\n      \"mov\",\n      \"avi\",\n      \"mkv\",\n      \"webm\",\n      \"pdf\",\n      \"icns\",\n    },\n  },\n}\n```\n\n\u003C!-- config:end -->\n\n\u003C\u002Fdetails>\n\nSome plugins have examples in their documentation. You can include them in your\nconfig like this:\n\n```lua\n{\n  dashboard = { example = \"github\" }\n}\n```\n\nIf you want to customize options for a plugin after they have been resolved, you\ncan use the `config` function:\n\n```lua\n{\n  gitbrowse = {\n    config = function(opts, defaults)\n      table.insert(opts.remote_patterns, { \"my\", \"custom pattern\" })\n    end\n  },\n}\n```\n\n## 🚀 Usage\n\nSee the example below for how to configure `snacks.nvim`.\n\n\u003C!-- example:start -->\n\n```lua\n{\n  \"folke\u002Fsnacks.nvim\",\n  priority = 1000,\n  lazy = false,\n  ---@type snacks.Config\n  opts = {\n    bigfile = { enabled = true },\n    dashboard = { enabled = true },\n    explorer = { enabled = true },\n    indent = { enabled = true },\n    input = { enabled = true },\n    notifier = {\n      enabled = true,\n      timeout = 3000,\n    },\n    picker = { enabled = true },\n    quickfile = { enabled = true },\n    scope = { enabled = true },\n    scroll = { enabled = true },\n    statuscolumn = { enabled = true },\n    words = { enabled = true },\n    styles = {\n      notification = {\n        -- wo = { wrap = true } -- Wrap notifications\n      }\n    }\n  },\n  keys = {\n    -- Top Pickers & Explorer\n    { \"\u003Cleader>\u003Cspace>\", function() Snacks.picker.smart() end, desc = \"Smart Find Files\" },\n    { \"\u003Cleader>,\", function() Snacks.picker.buffers() end, desc = \"Buffers\" },\n    { \"\u003Cleader>\u002F\", function() Snacks.picker.grep() end, desc = \"Grep\" },\n    { \"\u003Cleader>:\", function() Snacks.picker.command_history() end, desc = \"Command History\" },\n    { \"\u003Cleader>n\", function() Snacks.picker.notifications() end, desc = \"Notification History\" },\n    { \"\u003Cleader>e\", function() Snacks.explorer() end, desc = \"File Explorer\" },\n    -- find\n    { \"\u003Cleader>fb\", function() Snacks.picker.buffers() end, desc = \"Buffers\" },\n    { \"\u003Cleader>fc\", function() Snacks.picker.files({ cwd = vim.fn.stdpath(\"config\") }) end, desc = \"Find Config File\" },\n    { \"\u003Cleader>ff\", function() Snacks.picker.files() end, desc = \"Find Files\" },\n    { \"\u003Cleader>fg\", function() Snacks.picker.git_files() end, desc = \"Find Git Files\" },\n    { \"\u003Cleader>fp\", function() Snacks.picker.projects() end, desc = \"Projects\" },\n    { \"\u003Cleader>fr\", function() Snacks.picker.recent() end, desc = \"Recent\" },\n    -- git\n    { \"\u003Cleader>gb\", function() Snacks.picker.git_branches() end, desc = \"Git Branches\" },\n    { \"\u003Cleader>gl\", function() Snacks.picker.git_log() end, desc = \"Git Log\" },\n    { \"\u003Cleader>gL\", function() Snacks.picker.git_log_line() end, desc = \"Git Log Line\" },\n    { \"\u003Cleader>gs\", function() Snacks.picker.git_status() end, desc = \"Git Status\" },\n    { \"\u003Cleader>gS\", function() Snacks.picker.git_stash() end, desc = \"Git Stash\" },\n    { \"\u003Cleader>gd\", function() Snacks.picker.git_diff() end, desc = \"Git Diff (Hunks)\" },\n    { \"\u003Cleader>gf\", function() Snacks.picker.git_log_file() end, desc = \"Git Log File\" },\n    -- gh\n    { \"\u003Cleader>gi\", function() Snacks.picker.gh_issue() end, desc = \"GitHub Issues (open)\" },\n    { \"\u003Cleader>gI\", function() Snacks.picker.gh_issue({ state = \"all\" }) end, desc = \"GitHub Issues (all)\" },\n    { \"\u003Cleader>gp\", function() Snacks.picker.gh_pr() end, desc = \"GitHub Pull Requests (open)\" },\n    { \"\u003Cleader>gP\", function() Snacks.picker.gh_pr({ state = \"all\" }) end, desc = \"GitHub Pull Requests (all)\" },\n    -- Grep\n    { \"\u003Cleader>sb\", function() Snacks.picker.lines() end, desc = \"Buffer Lines\" },\n    { \"\u003Cleader>sB\", function() Snacks.picker.grep_buffers() end, desc = \"Grep Open Buffers\" },\n    { \"\u003Cleader>sg\", function() Snacks.picker.grep() end, desc = \"Grep\" },\n    { \"\u003Cleader>sw\", function() Snacks.picker.grep_word() end, desc = \"Visual selection or word\", mode = { \"n\", \"x\" } },\n    -- search\n    { '\u003Cleader>s\"', function() Snacks.picker.registers() end, desc = \"Registers\" },\n    { '\u003Cleader>s\u002F', function() Snacks.picker.search_history() end, desc = \"Search History\" },\n    { \"\u003Cleader>sa\", function() Snacks.picker.autocmds() end, desc = \"Autocmds\" },\n    { \"\u003Cleader>sb\", function() Snacks.picker.lines() end, desc = \"Buffer Lines\" },\n    { \"\u003Cleader>sc\", function() Snacks.picker.command_history() end, desc = \"Command History\" },\n    { \"\u003Cleader>sC\", function() Snacks.picker.commands() end, desc = \"Commands\" },\n    { \"\u003Cleader>sd\", function() Snacks.picker.diagnostics() end, desc = \"Diagnostics\" },\n    { \"\u003Cleader>sD\", function() Snacks.picker.diagnostics_buffer() end, desc = \"Buffer Diagnostics\" },\n    { \"\u003Cleader>sh\", function() Snacks.picker.help() end, desc = \"Help Pages\" },\n    { \"\u003Cleader>sH\", function() Snacks.picker.highlights() end, desc = \"Highlights\" },\n    { \"\u003Cleader>si\", function() Snacks.picker.icons() end, desc = \"Icons\" },\n    { \"\u003Cleader>sj\", function() Snacks.picker.jumps() end, desc = \"Jumps\" },\n    { \"\u003Cleader>sk\", function() Snacks.picker.keymaps() end, desc = \"Keymaps\" },\n    { \"\u003Cleader>sl\", function() Snacks.picker.loclist() end, desc = \"Location List\" },\n    { \"\u003Cleader>sm\", function() Snacks.picker.marks() end, desc = \"Marks\" },\n    { \"\u003Cleader>sM\", function() Snacks.picker.man() end, desc = \"Man Pages\" },\n    { \"\u003Cleader>sp\", function() Snacks.picker.lazy() end, desc = \"Search for Plugin Spec\" },\n    { \"\u003Cleader>sq\", function() Snacks.picker.qflist() end, desc = \"Quickfix List\" },\n    { \"\u003Cleader>sR\", function() Snacks.picker.resume() end, desc = \"Resume\" },\n    { \"\u003Cleader>su\", function() Snacks.picker.undo() end, desc = \"Undo History\" },\n    { \"\u003Cleader>uC\", function() Snacks.picker.colorschemes() end, desc = \"Colorschemes\" },\n    -- LSP\n    { \"gd\", function() Snacks.picker.lsp_definitions() end, desc = \"Goto Definition\" },\n    { \"gD\", function() Snacks.picker.lsp_declarations() end, desc = \"Goto Declaration\" },\n    { \"gr\", function() Snacks.picker.lsp_references() end, nowait = true, desc = \"References\" },\n    { \"gI\", function() Snacks.picker.lsp_implementations() end, desc = \"Goto Implementation\" },\n    { \"gy\", function() Snacks.picker.lsp_type_definitions() end, desc = \"Goto T[y]pe Definition\" },\n    { \"gai\", function() Snacks.picker.lsp_incoming_calls() end, desc = \"C[a]lls Incoming\" },\n    { \"gao\", function() Snacks.picker.lsp_outgoing_calls() end, desc = \"C[a]lls Outgoing\" },\n    { \"\u003Cleader>ss\", function() Snacks.picker.lsp_symbols() end, desc = \"LSP Symbols\" },\n    { \"\u003Cleader>sS\", function() Snacks.picker.lsp_workspace_symbols() end, desc = \"LSP Workspace Symbols\" },\n    -- Other\n    { \"\u003Cleader>z\",  function() Snacks.zen() end, desc = \"Toggle Zen Mode\" },\n    { \"\u003Cleader>Z\",  function() Snacks.zen.zoom() end, desc = \"Toggle Zoom\" },\n    { \"\u003Cleader>.\",  function() Snacks.scratch() end, desc = \"Toggle Scratch Buffer\" },\n    { \"\u003Cleader>S\",  function() Snacks.scratch.select() end, desc = \"Select Scratch Buffer\" },\n    { \"\u003Cleader>n\",  function() Snacks.notifier.show_history() end, desc = \"Notification History\" },\n    { \"\u003Cleader>bd\", function() Snacks.bufdelete() end, desc = \"Delete Buffer\" },\n    { \"\u003Cleader>cR\", function() Snacks.rename.rename_file() end, desc = \"Rename File\" },\n    { \"\u003Cleader>gB\", function() Snacks.gitbrowse() end, desc = \"Git Browse\", mode = { \"n\", \"v\" } },\n    { \"\u003Cleader>gg\", function() Snacks.lazygit() end, desc = \"Lazygit\" },\n    { \"\u003Cleader>un\", function() Snacks.notifier.hide() end, desc = \"Dismiss All Notifications\" },\n    { \"\u003Cc-\u002F>\",      function() Snacks.terminal() end, desc = \"Toggle Terminal\" },\n    { \"\u003Cc-_>\",      function() Snacks.terminal() end, desc = \"which_key_ignore\" },\n    { \"]]\",         function() Snacks.words.jump(vim.v.count1) end, desc = \"Next Reference\", mode = { \"n\", \"t\" } },\n    { \"[[\",         function() Snacks.words.jump(-vim.v.count1) end, desc = \"Prev Reference\", mode = { \"n\", \"t\" } },\n    {\n      \"\u003Cleader>N\",\n      desc = \"Neovim News\",\n      function()\n        Snacks.win({\n          file = vim.api.nvim_get_runtime_file(\"doc\u002Fnews.txt\", false)[1],\n          width = 0.6,\n          height = 0.6,\n          wo = {\n            spell = false,\n            wrap = false,\n            signcolumn = \"yes\",\n            statuscolumn = \" \",\n            conceallevel = 3,\n          },\n        })\n      end,\n    }\n  },\n  init = function()\n    vim.api.nvim_create_autocmd(\"User\", {\n      pattern = \"VeryLazy\",\n      callback = function()\n        -- Setup some globals for debugging (lazy-loaded)\n        _G.dd = function(...)\n          Snacks.debug.inspect(...)\n        end\n        _G.bt = function()\n          Snacks.debug.backtrace()\n        end\n\n        -- Override print to use snacks for `:=` command\n        if vim.fn.has(\"nvim-0.11\") == 1 then\n          vim._print = function(_, ...)\n            dd(...)\n          end\n        else\n          vim.print = _G.dd \n        end\n\n        -- Create some toggle mappings\n        Snacks.toggle.option(\"spell\", { name = \"Spelling\" }):map(\"\u003Cleader>us\")\n        Snacks.toggle.option(\"wrap\", { name = \"Wrap\" }):map(\"\u003Cleader>uw\")\n        Snacks.toggle.option(\"relativenumber\", { name = \"Relative Number\" }):map(\"\u003Cleader>uL\")\n        Snacks.toggle.diagnostics():map(\"\u003Cleader>ud\")\n        Snacks.toggle.line_number():map(\"\u003Cleader>ul\")\n        Snacks.toggle.option(\"conceallevel\", { off = 0, on = vim.o.conceallevel > 0 and vim.o.conceallevel or 2 }):map(\"\u003Cleader>uc\")\n        Snacks.toggle.treesitter():map(\"\u003Cleader>uT\")\n        Snacks.toggle.option(\"background\", { off = \"light\", on = \"dark\", name = \"Dark Background\" }):map(\"\u003Cleader>ub\")\n        Snacks.toggle.inlay_hints():map(\"\u003Cleader>uh\")\n        Snacks.toggle.indent():map(\"\u003Cleader>ug\")\n        Snacks.toggle.dim():map(\"\u003Cleader>uD\")\n      end,\n    })\n  end,\n}\n```\n\n\u003C!-- example:end -->\n\n## 🌈 Highlight Groups\n\nSnacks defines **a lot** of highlight groups and it's impossible to document them all.\n\nInstead, you can use the picker to see all the highlight groups.\n\n```lua\nSnacks.picker.highlights({pattern = \"hl_group:^Snacks\"})\n```\n","`snacks.nvim` 是一个为 Neovim 提供多种生活质量插件的集合。它包含了诸如高效动画、大文件处理、缓冲区删除而不影响窗口布局、美观的声明式仪表盘、调试工具、聚焦当前作用域等功能，所有这些都旨在提升开发者的使用体验。此项目利用 Lua 编写，支持与 GitHub CLI 集成、Git 工具、图像查看器（基于 Kitty Graphics Protocol）、改进的输入和键映射等特性。适用于希望增强 Neovim 功能性和可用性的开发者，特别是那些频繁进行代码编辑和项目管理的专业人士。",2,"2026-06-11 03:45:14","high_star"]