2.24.0 (2025-10-23)
Features
- bigfile: disable mini-hipatterns (#2170) (3d4dd13)
- dashboard: optional
filterfor projects. Closes #798 (fe88a07) - debug: allow debug evaluation of block selections (#1331) (231ffae)
- git: allow configuring extra git args and git cmd args for all git sources. See #2178 (5782b5c)
- image: add icns support (#2120) (9df47bc)
- image: added clear fun. Closes #1394 (30687d1)
- image: added support for base64 encoded images in url. Closes #2304 (2c56e10)
- image: allow specifying a page number for inlined pdfs (#1806) (3f0fe34)
- indent: pass win to filter func. Closes #2307 (8116e0b)
- input: added support for a custom highlight functions. Closes #2216 (9b80137)
- layout: height=0.7 for preview in vscode layout (c3d6c01)
- layout: static (non-flex) layouts now shrink the root box to fit the contents. See #2035 (ba7845b)
- picker.finder: added assertions that finder is still running when receiving results (a45503b)
- picker.git_diff: add
baseoption to show diff against a merge base. Useful to see changes on a branch/PR (7964f04) - picker.git: allow passing extra args to git log command for file renames (#1964) (2aee35d)
- picker.git: use default previewer args in git_show (#1736) (f324f96)
- picker.layout: added
confighook for resolved layouts. See #2035 (722f9ea) - picker.lsp_config: added more info to lsp picker (636be5c)
- picker.lsp: added lsp_incoming_calls and lsp_outgoing_calls. Closes #1843 (55d6670)
- picker.lsp: added option
keep_parentstolsp_symbols(defaultfalse). See #2083. closes #2266 (2b9d522) - picker.projects: make max_depth customizable (#2253) (3e9e2e2)
- picker.scratch: add scratch picker with grep, new and delete keybinds (#1019) (ca0f8b2)
- picker.select: select now fits the list to the items independent of the layout. Closes #2035 (5c63614)
- picker: add author field to git log (#2295) (2cf864a)
- picker: add exact match position highlighting for grep results (3b54c8d)
- picker: add git_restore action for git_status picker (2b22fe7)
- picker: add toggle_regex for grep (#1594) (bd6ee23)
- picker: added
Snacks.picker.tags()a picker for ctags. Closes #1728 (4290287) - picker: added custom options to
vim.ui.selectthat snacks can use for a better select (264cab1) - picker: added live support to
git_log, which uses-S(pickaxe) to search. Closes #1544 (c9fa6f7) - picker: allow configuring pathspec for git grep (#2311) (57fbda7)
- picker: also ignore dot bare git files (#2058) (4bb0dae)
- picker: enhanced resume with multi-state support and flexible API (bc6c446)
- picker: flexible filename format (#2294) (9ad5d53)
- picker: mapped
<c-g>toprint_cwdin list. See #2244 (faa6aba) - picker: Support rmagatti/autosession session manager (#1825) (fc06234)
- picker: updated Snacks.picker.lsp_config to work with
vim.lsp.config(292d46f) - picker: when resuming a source that has nothing to resume, start a picker with the source instead (db3c13c)
- terminal: minor improvements for user experience (#2276) (39b14c4)
- toggle: allow notification customization via function (#2247) (3ccab97)
- win: added support for
vim.o.winborder. Set win.border = true to use it (b30523c) - win: all existing snacks windows for all plugins now honor
vim.o.winborder. Defaults toroundedif not set. (c1737d8) - win: generalize footer options for keys (#363) (b8d1719)
- win: make split window "stacking" configurable (e46a094)
Bug Fixes
- bigfile: bigfile doesn't work on windows. (#1969) (b4944ff), closes #1722
- bufdelete: try alternate buffer first and otherwise last used buffer (914c900)
- dashboard: fix path filtering for
recent_fileswithcwdoption (#2201) (057d4ab) - dashboard: oldfiles filter should return a boolean instead of the result of find. Fixes #2283 (fcd309f)
- dashboard: pcall chansend for dashoard terminal widgets (dc65ffd)
- dashboard: recent cwd filter matching (5c4365e)
- dashboard: recent_files section not displaying files without cwd parameter (#2284) (1ed737e)
- dashboard: replace deprecated AutoSession command (#2288) (e9228d6)
- dashboard: restore showtabline/laststatus when entering another non-float window. Closes #1774 (cc69a93)
- dashboard: set
border = "none"onterminalsections (#1643) (83f364f) - dashboard: update cursor on loading the dashboard. Closes #2004 (29682a0)
- dashboard: use fqn for icon. Closes #1496 (24e92e0)
- dim: fixed the issue of dim's scope variable being nil and outputting… (#1938) (943a3c7)
- explorer.git: don't propagate deletes to parent dirs that don't exist (835c4cb)
- explorer.watch: handle systems where fs_event doesn't return file names. Closes #2190. Closes #2032 (d6e34b1)
- explorer: mounted directories being detected as non-directories in Tree:expand (#2053) (7a5eb10)
- explorer: reset main when entering another window. Closes #1587 (a5d45d5)
- git: always check parents for git root to fix an issue with git submodules. Closes #2143 (14dd362)
- gitbrowse: fixed urls for gitlab (#2073) (9ebf052)
- gitbrowse: send commit as a opt when calling gitbrowse (#2289) (a466429)
- git: set
diff.noprefix=falseforgit diffto ensure correct format (#2174) (93f43ca) - image.terminal: do only terminal detection for now. Closes #2323 (6c7ddae)
- image: correct off by one issue in render fallback (#1560) (441bdcd)
- image: correct render fallback to handle "editor" relative position (#2296) (c552cea)
- image: correct render fallback to handle "editor" relative position (#2297) (1c3f15c)
- image: detect kitty image protocol through terminal capability request. Closes #1695 (43261ba)
- image: do not save remote image if fetch fails (#1915) (cb6bf05)
- image: ENOENT on preview (#2301) (5173e96)
- image: hover close in insert mode (#2215) (ef59af0)
- image: markdown inline link query for shortened urls (#1481) (2daa1b2)
- image: set winblend=0 for floatwin when use unicode placeholders (#1615) (758e64c)
- image: skip
\usepackagein comments and body (#2325) (90227af) - image: work-around for sha256 not allowed to be a Blob (92a08ce)
- indent: check that win is valid in step. Closes #1943 (e409f31)
- indent: nil check before setting extmark (#1635) (02bf7d2)
- input: schedule stopinsert. Fixes #1841 (ad6cbc8)
- input: zindex (67d690d)
- input: zindex. Closes #2302 (d491236)
- layout: allocate at least 1 cell for a widget and enlarge/shrink the root box when needed. Closes #2261 (71d6d3c)
- layout: allow width/height to be a function. Closes #2184 (c757d4d)
- lazygit: allow extensible user args (#789) (da655a3)
- lazygit: check if default config file exists before adding to LG_CONFIG_FILE (#2256) (3731644)
- main: get correct winid for prev window (db399b1)
- notifier: include icon in padding in minimal style (#2239) (6daef52)
- notifier: keep filtered notifications in history (#2209) (ac61546)
- picker.actions:
<c-g>in list view now prints file path instead of cwd. Fallback to cwd (0b0a58a) - picker.actions: ensure the current window is updated after tabdrop (#2326) (b30121b)
- picker.actions: multi-action descriptions. Fixes #1501 (4edf207)
- picker.actions: take into account if source is
recentexplicitly (#1920) (b9bd8ae) - picker.core: respect camelCase for scoring when ignorecase is true (#1601) (a32735b)
- picker.format: added min_width for truncated paths (b7f8116)
- picker.format: apply hidden file hl group last. Fixes #2127 (0bf8fe4)
- picker.format: correcter max_width for truncpath (a5d2964)
- picker.format: simplified resolvable formatters and more correct (d5b6d30)
- picker.git_diff: use absolute path when adding buffer to avoid duplicates (#1819) (a012f39)
- picker.git: add
ignorecaseforgit_grep(#1629) (7502e77) - picker.git: use unmerged icon for unmerged. Fixes #1531 (abee3c9)
- picker.grep: better line/col parsing. Closes #2126. Fixes #2123 (1fee799)
- picker.grep: faulty rg cmd. Closes #2280 (65a5c8b)
- picker.list: resize when needed. Closes #2290 (df018ed)
- picker.lsp_config: cmd can be a function (ba745ba)
- picker.lsp: don't process lsp request results when aborted. Closes #2327 (4e10708)
- picker.lsp: move get_clients inside vim.schedule to prevent issues on Neovim 0.11. Closes #2320 (79f3a8d)
- picker.lsp: trigger docs workflow (6f1158f)
- picker.man: make tab/split/vsplit work. Closes #2171 (f39d114)
- picker.marks: fix buffer checking (#2287) (ca0858a)
- picker.preview: better hack to deal with buffer local option weirdness (c968d4d)
- picker.preview: directory preview should use cwd. Closes #2212. Fixes #2093 (d050712)
- picker.preview: don't record previeww searches in history and prevent scrolling from the top. Closes #2305 (080320b)
- picker.preview: dont do win-local hack for floating windows (12b2f0d)
- picker.qflist: error with qflist picker when the list contains invalid items (#2293) (6af1e76)
- picker.recent: include closed / unlisted buffers in recent. Closes #1745 (5959631)
- picker: add type field to qflist item (#1538) (#1539) (125978b)
- picker: added show_delay to config max ms to wait to show if no results found yet. Closes #2206 (64583a0)
- picker: allow some sources to use the current window as main. Closes #2012. See #1941 (5cda953)
- picker: correct z-index for preview="main" layout (e796aef)
- picker: do not record consecutive duplicate history (#2040) (d0a5310)
- picker: fixup for pickers that dont display files (1b4205e)
- picker: load correct actions in list of action names. Closes #1501 (b064be2)
- picker: lsp_config now includes any configfured LSP and excludes deprecated servers (a0d6eba)
- picker: prevent WinEnter handling during startup (756a791)
- picker: show_delay config value (67bb3a7)
- picker: show_delay is in ms. Also increase it to allow auto_confirm to work properly (924a930)
- picker: use nvim_paste instead of nvim_put. Closes #1941 (021e04f)
- projects: normalize item.text for correct Windows support (#2275) (457596b)
- rename: made rename more robust and make sure target directory exists. Closes #2252 (c494447)
- scope: allow user to disable keys (#1918) (bebf0bd)
- scratch: branch fallback for detached head (#1519) (98345c7)
- scratch: hide buffer after formatting when close (#1523) (4379085)
- scratch: use icon[1] when icon is a table to avoid table.concat error (#2242) (ba90011)
- scroll: don't animate 1 line scrolls (jk). Closes #1620 (d293b21)
- scroll: stop anim and reset state when win has new buf, or buf was changed. Closes #1820. Closes #2221 (766f7b8)
- statuscolumn: show open folds in consecutive levels (#1534) (7bcd3ba)
- terminal: check win valid before creating a new terminal (#1927) (ba7bbcd)
- terminal: make sure terminals opend with
open()can be found withlist(). Closes #2172. Closes #2173 (13f3006) - terminal: set buffer when opening terminal with position='current' (#2162) (2aacf55), closes #2148
- terminal: stack only terminal splits by default. Closes #2137 (8c50196)
- util: fix invalid window error (#1996) (32e5bf1)
- util: only use mini.icons if it has been setup. Closes #2199 (774bf9d)
- win: check parent win is valid before getting size (#2315) (471eb03)
- zen: make zoom and minimizing work in terminal mode (#1912) (fb54927)
Performance Improvements
- dashboard: add basic OSC11 and CSI6n support to terminal sections (gh 10 seconds faster) (fb016d2)
- git: invoke
git statuswith--no-optional-locks(#2175) (e441c64) - grep: move match parsing to resolve and fix an issue with
.*results. Closes #2308 (1417701) - picker: set
limit_live=10000by default. Makes no sense to load millions of matches when doing live searches. (04990d0)