summaryrefslogtreecommitdiffstatshomepage
AgeCommit message (Collapse)AuthorFiles
2026-04-22vim-patch:3918f32: runtime(doc): fix incorrect description of 'scrolloffpad'zeertzjq4
closes: vim/vim#20029 https://github.com/vim/vim/commit/3918f3232f874b3c96f8bfccc5049711f16c252e
2026-04-22vim-patch:9.2.0356: Cannot apply 'scrolloff' context lines at end of filezeertzjq16
Problem: Cannot apply 'scrolloff' context lines at end of file Solution: Add the 'scrolloffpad' option to keep 'scrolloff' context even when at the end of the file (McAuley Penney). closes: vim/vim#19040 https://github.com/vim/vim/commit/a414630393f81c9a5b8fa4d0fcc1287155f67751 Co-authored-by: McAuley Penney <jacobmpenney@gmail.com>
2026-04-22vim-patch:9.2.0385: Integer overflow with "ze" and large 'sidescrolloff' ↵zeertzjq3
(#39289) Problem: Integer overflow with "ze" and large 'sidescrolloff'. Solution: Check for overflow to avoid negative w_leftcol (zeertzjq). closes: vim/vim#20026 https://github.com/vim/vim/commit/33f3965087b01dccf4382ed419d34799ffd66cd9
2026-04-22vim-patch:10040bc: runtime(sh): allow "#" in special derefszeertzjq1
Code like ${!#} flags the "#" as shDerefWordError [1]; the "!prefix" syntax region delegates to one of the shDerefSpecial handlers via @shDerefList, but it misses the "#" case as valid for ${##} and ${!#}. [1]: https://vi.stackexchange.com/q/48617/10604 Correct that. Indirection is only valid in Bash in Ksh, so rearrange the "!" handling to be conditional. closes: vim/vim#20016 Helped-by: Christian Brabandt <cb@256bit.org> https://github.com/vim/vim/commit/10040bc9cde340c52b5093cacb1d60fd2e621883 Co-authored-by: D. Ben Knoble <ben.knoble+github@gmail.com>
2026-04-22vim-patch:16d2854: runtime(graphql): Update syntax script to September 2025 speczeertzjq1
A new graphqlEscape syntax graph has been introduced to represent escape sequences within strings, including the braced unicode form (\u{H+}) added in the September 2025 specification. See: https://spec.graphql.org/September2025/ closes: vim/vim#20030 https://github.com/vim/vim/commit/16d28548d2d3c49733750b6ab7a50bc05ab65e0c Co-authored-by: Jon Parise <jon@indelible.org>
2026-04-22vim-patch:9.2.0384: stale Insstart after cursor move breaks undo (#39290)zeertzjq2
vim-patch:9.2.0384: stale Insstart after <Cmd> cursor move breaks undo Problem: A <Cmd> command executed from Insert mode can sync undo and move the cursor before the next edit. stop_arrow() saved the new cursor line for undo, but left Insstart at the previous insertion point. A line-start backspace could then delete lines above the saved line without saving the joined range, leaving a pending undo entry whose bottom resolved above its top and raising E340. Solution: Update Insstart and Insstart_textlen after the pending undo save so the next edit starts from the command-updated cursor position (Jaehwang Jung). closes: vim/vim#20031 AI-assisted: Codex https://github.com/vim/vim/commit/d4fb31762ea0b9de6fffb529c4ffee509621f74c Co-authored-by: Jaehwang Jung <tomtomjhj@gmail.com>
2026-04-22fix(incsearch): support `c_CTRL-{G,T}` with an offset (#39097)Barrett Ruth5
vim-patch:9.2.0374: c_CTRL-{G,T} does not handle offset Problem: c_CTRL-{G,T} does not handle offset, when cycling between matches Solution: Refactor parsing logic into parse_search_pattern_offset() and handle offsets, note: highlighting does not handle offsets yet (Barrett Ruth). fixes: vim/vim#19991 closes: vim/vim#19998 https://github.com/vim/vim/commit/c62342e5cfc339a87c1eb40ef34b2b31070d72a6
2026-04-22test(tui_spec): fix "Uncaught Error" with PUC Lua (#39288)zeertzjq1
RUN T339 TUI :restart ZR: Uncaught Error: test/client/uv_stream.lua:111: ECONNRESET stack traceback: [C]: in function 'error' test/client/uv_stream.lua:111: in function <test/client/uv_stream.lua:109> [C]: in function 'run' test/client/session.lua:240: in function '_run' test/client/session.lua:216: in function '_blocking_request' test/client/session.lua:117: in function 'request' ...t_xdg_terminal/test/functional/terminal/tui_spec.lua:223: in function <...t_xdg_terminal/test/functional/terminal/tui_spec.lua:215> [C]: in function 'pcall' test/testutil.lua:82: in function 'retry' ...t_xdg_terminal/test/functional/terminal/tui_spec.lua:215: in function 'assert_restarted' ...t_xdg_terminal/test/functional/terminal/tui_spec.lua:275: in function <...t_xdg_terminal/test/functional/terminal/tui_spec.lua:232> [C]: in function 'xpcall' /home/runner/work/neovim/neovim/test/harness.lua:693: in function 'run_callable' /home/runner/work/neovim/neovim/test/harness.lua:1008: in function 'run_test' /home/runner/work/neovim/neovim/test/harness.lua:1083: in function 'run_suite' /home/runner/work/neovim/neovim/test/harness.lua:1081: in function 'run_suite' /home/runner/work/neovim/neovim/test/harness.lua:1081: in function 'run_suite' /home/runner/work/neovim/neovim/test/harness.lua:1507: in function 'run_test_file' /home/runner/work/neovim/neovim/test/harness.lua:1577: in function 'run_iteration' /home/runner/work/neovim/neovim/test/harness.lua:1665: in function 'main' /home/runner/work/neovim/neovim/test/runner.lua:30: in main chunk -- Tests exited non-zero: 255 CMake Error at /home/runner/work/neovim/neovim/cmake/RunTests.cmake:135 (message): functional tests failed with error: 255
2026-04-22fix(:restart): avoid ERR/WRN logging on Windows with --listen (#39287)zeertzjq4
Problem: :restart leads to ERR/WRN logging on Windows with --listen. Solution: Add a log_level flag to vim._with() and use it to suppress logging from serverstart()/serverstop() during restart.
2026-04-21fix(messages): "progress" kind for busy messages #39280luukvbaal10
Problem: The "Scanning:" completion, bufwrite, and indent (there may be more) messages which indicate progress can use the "progress" kind for their msg_show event. Indent message does not have a kind. Solution: Emit these messages with the "progress" kind. Set the message id to the replaced kind so that a UI knows to replace it (and to provide a migration path in case a UI was distinguishing these messages for whatever reason).
2026-04-21Merge pull request #39076 from bfredl/zig0.16bfredl16
IT IS HAPPENING: Zig 0.16
2026-04-21fix(:restart): reuse --listen addr on Windows #38539Sanzhar Kuandyk4
Problem: On Windows, :restart cannot immediately reuse the canonical --listen address because named pipe release is asynchronous. Solution: Start the new Nvim server on a temporary address; in the new Nvim, retry serverstart() with the original ("canonical") address until it succeeds.
2026-04-21Merge #38967 ZR performs :restartJustin M. Keyes8
2026-04-21feat(normal): normal-mode ZR does :restartJustin M. Keyes8
Make it a normal-mode command instead of a default mapping.
2026-04-21feat(defaults): map ZR to restartMike J. McGuirk5
Problem: No default mapping for :restart. Solution: Map to ZR in defaults. Closes: https://github.com/neovim/neovim/issues/38942
2026-04-21build: gen_char_blob.lua: "bad argument to format" if path contains "%" #39274Justin M. Keyes1
Problem: Build fails if user cloned the repo to a path with "%" chars: src/gen/gen_char_blob.lua:51: bad argument #1 to 'format' (number expected, got string) Solution: - Escape "%" chars. - Also use "%q" in case the path has spaces...
2026-04-21fix(substitute): don't crash with very large count (#39272)zeertzjq5
2026-04-21fix(build): more changes to make zig 0.16.0 workbfredl12
2026-04-21build(deps): bump tree-sitter to aff9b9d92Christian Clason2
2026-04-21feat(build.zig): update to zig 0.16Chinmay Dalal7
2026-04-21vim-patch:9.2.0371: filetype: ghostty config files are not recognized (#39267)zeertzjq3
Problem: filetype: ghostty config files are not recognized Solution: Detect ghostty configuration files as ghostty filetype, include a simple ghostty filetype plugin (Bez Hermoso) closes: vim/vim#20002 https://github.com/vim/vim/commit/b30803b231beea13e2efa42fefc04be71a4e9bb5 Co-authored-by: Bez Hermoso <bezalelhermoso@gmail.com> Co-authored-by: Christian Brabandt <cb@256bit.org>
2026-04-21vim-patch:1c88aee: runtime: Remove wrong syn oneline keyword from a few ↵zeertzjq5
syntax files (#39266) Also: - drop a few trailing whitespaces - mark the oneline keyword for :syn keyword as error in the Vim syntax script, add tests for it. closes: vim/vim#20018 https://github.com/vim/vim/commit/1c88aee1fa720aea07e133f32645914dcddd3435 Co-authored-by: Eisuke Kawashima <e-kwsm@users.noreply.github.com>
2026-04-21vim-patch:9.2.0380: completion: a few issues in completion code (#39264)zeertzjq1
Problem: ins_compl_stop() sets compl_best_matches = 0, but that's a pointer, should reset compl_num_bests instead, find_common_prefix() reads cpt_sources_array[cur_source] without checking cur_source != -1 which causes an OOB for -1, find_next_completion_match(): second `if` in the pending loop should be `else if`. Forward paging only moves one step per call. Solution: Reset compl_num_bests instead, add a check for cur_source not equal -1, change if to else if (glepnir) closes: vim/vim#20000 https://github.com/vim/vim/commit/b328686d6a1eae1c519a0cdc0420c0d87b6d1fd1 Co-authored-by: glepnir <glephunter@gmail.com>
2026-04-21vim-patch:9.2.0378: Using int as bool type in win_T struct (#39263)zeertzjq1
Problem: Several win_T fields are declared as "int" or "char" but are used strictly as boolean flags with TRUE/FALSE values. The integer types obscure the boolean intent and are wider than needed. Solution: Change the following win_T members to bool (stdbool.h) and update their assignments from TRUE/FALSE to true/false accordingly. The following conversions have been done: - int -> bool (10 members): w_set_curswant, w_botfill, w_old_botfill, w_do_win_fix_cursor, w_popup_fixed, w_border_highlight_isset, w_cline_folded, w_redr_status, w_arg_idx_invalid, w_has_scrollbar - char -> bool (4 members): w_topline_was_set, w_ru_empty, w_fold_manual, w_foldinvalid No existing code compares these members against TRUE/FALSE explicitly or uses ++/-- / bitwise ops on them, so only plain assignments are affected. Excluded: - w_locked (recursion counter with ++/--), - w_want_scrollbar (may hold -1 from dict_get_bool), - w_winbar_height (used in arithmetic and exposed as number via getwininfo()). related: vim/vim#20005 closes: vim/vim#20008 https://github.com/vim/vim/commit/146d5da0d16b7ea9c767a978cf02384d0831eb92 Co-authored-by: Hirohito Higashi <h.east.727@gmail.com> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-21vim-patch:9.2.0373: Ctrl-R mapping not triggered during completion (#39261)zeertzjq2
Problem: Ctrl-R mapping not triggered during completion. Solution: Move Ctrl-R check out of vim_is_ctrl_x_key() (zeertzjq). fixes: vim/vim#20004 closes: vim/vim#20006 https://github.com/vim/vim/commit/49e8630a2859e6ed497fb5702663c276f8ab6597
2026-04-21fix(move): avoid integer overflow with large 'scrolloff' (#39251)zeertzjq6
2026-04-20docs: update version.c (#38976)github-actions[bot]1
vim-patch:8.2.0900: function list test fails on MS-Windows vim-patch:8.2.3918: function list test fails vim-patch:9.2.0347: Vim9: script-local variable not found vim-patch:f9cb0d14d CI: Separate out ASan tests vim-patch:9.2.0361: tests: no tests for ch_listen() with IPs vim-patch:336533b35 CI: Bump the github-actions group across 2 directories with 4 updates vim-patch:9.2.0363: Vim9: variable shadowed by script-local function vim-patch:8.2.0150: cannot define python function when using :execute vim-patch:8.2.0344: ":def" not skipped properly vim-patch:8.2.0755: Vim9: No error when variable initializer is not a constant vim-patch:8.2.1732: stuck when win_execute() for a popup causes an error vim-patch:8.2.2967: Vim9: crash when using two levels of partials vim-patch:8.2.3023: Vim9: arguments for execute() not checked at compile time vim-patch:8.2.3816: compiler warning for posible loss of data on MS-Windows vim-patch:9.0.0028: MS-Windows: tests fail if there is a "runtime" directory vim-patch:9.0.0571: MS-Windows: CTRL-C can make Vim exit vim-patch:9.0.0720: MS-Windows GUI may have pixel dust from antialiasing vim-patch:9.0.0763: MS-Windows: warning for using int for size_t vim-patch:9.0.0938: MS-Windows: debug executable not found when running test vim-patch:9.0.1023: MS-Windows: dynamic loading of libsodium doesn't work vim-patch:c98bfb9f59b8045372e4c0e396d707f55d9d027a vim-patch:9.1.1207: MS-Windows: build warning in filepath.c vim-patch:9.1.1499: MS-Windows: no indication of ARM64 architecture vim-patch:9.1.1706: MS-Windows: Compile error when building with if_ruby vim-patch:9.1.1813: MS-Windows: title bar is always white vim-patch:9.1.1830: MS-Windows: Dark mode titlebar is not configurable vim-patch:9.1.1966: MS-Windows: dark mode in gui is not supported vim-patch:9.1.2006: MS-Windows: ANSI colors not correct in terminal vim-patch:9.1.2046: MS-Windows: compile warnings vim-patch:9.1.2081: MS-Windows: unnecessary "#ifdef FEAT_GUI" in os_win32.c vim-patch:9.1.2129: MS-Windows: font size calculation slightly wrong, causing line gaps vim-patch:9.1.2142: MS-Windows: mouse scroll events not handled for popups vim-patch:9.2.0011: A few double semicolons after statement vim-patch:9.2.0163: MS-Windows: Compile warning for unused variable vim-patch:9.2.0179: MS-Windows: Compiler warning for converting from size_t to int vim-patch:9.2.0215: MS-Windows: several tests fail in the Windows CUI. vim-patch:9.2.0216: MS-Windows: Rendering artifacts with DirectX vim-patch:9.2.0321: MS-Windows: No OpenType font support vim-patch:dc47344: Fix a few typos vim-patch:9.2.0353: Missing out-of-memory check in register.c
2026-04-20refactor(test): drop deprecated exc_exec #39242Justin M. Keyes77
2026-04-20fix(ui2): don't dismiss expanded messages for non-typed key #39247luukvbaal3
Problem: Invalid check for non-typed key to dismiss expanded cmdline. Unable to delay the timer that removes a message from the msg window. Solution: Check for empty string instead of nil to determine whether a key is typed. Restart the timer if it expires while the user is in the msg window. Allow entering the msg window with a mouse click.
2026-04-20fix(ui2): ensure msg window is visible after closing tabLuuk van Baal2
Problem: After closing a tabpage while the msg window is showing a message, it is hidden while the msg window still contains a message. Solution: Unhide the msg window after entering a tabpage and it still contains a message. Co-authored-by: Linykq <yukunlin590@gmail.com>
2026-04-20ci(backport): drop `needs:backport` label #39244Justin M. Keyes1
Problem: When auto-backport fails, it adds a `needs:backport` label. But that label isn't being used AFAIK, based on the fact there were 30+ old PRs with that label from last year (I have since cleaned those up). So the extra step of having to remove the label is unnecessary friction. In practice, when a manual backport is needed, it's best to either do it immediately or just remove the `backport-xx` label. Also, the presence of an unresolved "Failed backport" comment from the bot is already a kind of marker that indicates a backport is needed. Solution: Don't add `needs:backport` label on failed backport. Reverts https://github.com/neovim/neovim/pull/30363
2026-04-20docs: misc #39207Justin M. Keyes10
2026-04-20fix(api): expose fg_indexed/bg_indexed in nvim_get_hl #39210glepnir7
Problem: fg_indexed/bg_indexed were dropped from nvim_get_hl output due to a wrong short_keys guard. HL_FG_INDEXED also wasn't cleared in hl_blend_attrs, and HLATTRS_DICT_SIZE was too small. Solution: Remove the short_keys guard, clear HL_FG_INDEXED in hl_blend_attrs, bump HLATTRS_DICT_SIZE to 24, and clarify docs that these flags mean rgb is an approximation of the cterm palette index.
2026-04-20Merge #39194 from justinmk/luavimfnJustin M. Keyes11
2026-04-20vim-patch:partial:9.2.0368: too many strlen() calls when adding strings to ↵zeertzjq11
dicts (#39237) Problem: too many strlen() calls when adding strings to dicts Solution: Refactor code to use string_T, use dict_add_string_len() instead of dict_add_string() (John Marriott) Additionally: - In textprop.c, in function prop_fill_dict() use a string_T to store local variable text_align. - In popupwin.c, use a string_T to store struct member pp_name in struct poppos_entry_T. - In mark.c, refactor function add_mark() to pass in the length of argument mname. - In insexpand.c: ->Use a string_T to store the elements of static array ctrl_x_mode_names. ->Refactor function trigger_complete_done_event(): ->->change type of argument char_u *word to string_T *word. ->->make one access of array ctrl_x_mode_names instead of two. ->Refactor function ins_compl_mode() to accept a string_T to return the resulting string. - In fileio.c: ->Refactor function getftypewfd() to accept a string_T to return the resulting string. ->In function create_readdirex_item() use a string_T to store local variable q. - In cmdexpand.c, store global cmdline_orig as a string_T. - In autocmd.c, in function f_autocmd_get() use a string_T to store local variables event_name and group_name. Measure their lengths once when they are assigned so they are not remeasured on each call to dict_add_string() in the subsequent for loop. - In channel.c, in function channel_part_info() drop local variable status and use s instead. Make s a string_T. closes: vim/vim#19999 https://github.com/vim/vim/commit/c13232699db413e735f30b5649c78a7f38a9a069 Co-authored-by: John Marriott <basilisk@internode.on.net>
2026-04-20vim-patch:8.2.4912: using execute() to define a lambda doesn't work (#39229)Jan Edmund Lazo3
Problem: Using execute() to define a lambda doesn't work. (Ernie Rael) Solution: Put the getline function in evalarg. (closes vim/vim#10375) https://github.com/vim/vim/commit/a7583c42cd6b64fd276a5d7bb0db5ce7bfafa730 Co-authored-by: Bram Moolenaar <Bram@vim.org>
2026-04-20Merge pull request #39201 from tomtomjhj/textoff-showbreak-crashzeertzjq3
fix(smoothscroll): crash when resizing to textoff with showbreak
2026-04-20vim-patch:9.2.0364: tests: test_smoothscroll_textoff_showbreak() failszeertzjq1
Problem: tests: test_smoothscroll_textoff_showbreak() fails (after v9.2.0363) Solution: Add missing CheckRunVimInTerminal related: vim/vim#20011 https://github.com/vim/vim/commit/618a327ce6f6c7a47bdbf2a4f5d1c329d97e6037 Co-authored-by: Christian Brabandt <cb@256bit.org>
2026-04-20fix(smoothscroll): crash when resizing to textoff with showbreakJaehwang Jung3
vim-patch:9.2.0362: division by zero with smoothscroll and small windows Problem: Resizing a smoothscrolled wrapped window to its textoff width with 'showbreak' can leave wrapped continuation lines with zero text width. win_lbr_chartabsize() still runs the partial max_head_vcol calculation in that state and divides by width2, crashing during redraw. Solution: Skip that partial head calculation when the wrapped continuation width is zero, matching the other width2 guards in charset.c (Jaehwang Jung) closes: vim/vim#20012 AI-assisted: Codex https://github.com/vim/vim/commit/0e31fb024c846e36bb0d26d01ff179a0d1b3eae4
2026-04-20vim-patch:9.2.0365: using int as bool (#39232)zeertzjq4
Problem: using int as bool Solution: refactor: use bool type for internal flags in buf_T (Hirohito Higashi) Change the type of 23 internal state flag fields in buf_T from int to bool for improved type clarity and code readability. These fields are pure boolean flags that are never accessed via the option system's varp (which uses *(int *)varp = value), never compared with int fields holding non-0/1 values, and never use tristate values. Converted fields: - State flags: b_dev_valid, b_saving, b_mod_set, b_new_change, b_marks_read, b_modified_was_set, b_did_filetype, b_keep_filetype, b_au_did_filetype, b_u_synced, b_scanned, b_p_initialized - Characteristic flags: b_has_textprop, b_may_swap, b_did_warn, b_help, b_spell, b_shortname, b_has_sign_column, b_netbeans_file, b_was_netbeans_file, b_write_to_channel, b_diff_failed All TRUE/FALSE assignments to these fields have been updated to true/false accordingly. The type of temporary save variables (e.g. help_save in tag.c) has also been adjusted to bool. Option value fields (b_p_XXX) are kept as int because they are accessed via the option system and some use tristate (-1) semantics. Fields compared with int option values (b_start_eof, b_start_eol, b_start_bomb) are also kept as int to preserve comparison integrity. closes: vim/vim#20020 https://github.com/vim/vim/commit/1966a1c8963f59c00a9f25d129bec90366205e1b Co-authored-by: Hirohito Higashi <h.east.727@gmail.com> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-19feat(options): add 'winpinned' to pin a window #39157luukvbaal14
Problem: - Unable to "pin" a window to prevent closing without specifically being targeted. - :fclose closes hidden windows (even before visible windows). Solution: - Add 'winpinned' window-local option. When set, window is skipped by :fclose and :only. Pin the ui2 cmdline window (which should always be visible), so that it is not closed by :only/fclose. - Skip over hidden (and pinned) windows with :fclose. Co-authored-by: glepnir <glephunter@gmail.com>
2026-04-20fix(health): workaround nil vim.system():wait() resultJustin M. Keyes1
Workaround until https://github.com/neovim/neovim/issues/37922 is fixed.
2026-04-20fix(jobstart): use uv_os_environ directlyJustin M. Keyes1
2026-04-20fix(excmd): nlua_call_excmd require() failure is a "lua_error"Justin M. Keyes5
Although `nlua_call_excmd` is semantically for implementing Ex-commands, the `require()` should never fail, so that's a "Lua error". But if the call itself fails (the later `semsg` call), that's an "Ex cmd" error.
2026-04-20refactor(excmd): migrate ex_terminal to LuaJustin M. Keyes3
2026-04-20refactor(excmd): migrate help.c to LuaJustin M. Keyes1
2026-04-20refactor(excmd): migrate ex_checkhealth to LuaJustin M. Keyes3
2026-04-19fix(lsp): notify when maximum created `hl` groups is reached #39231Maria Solano1
2026-04-19docs(lsp): description for `on_list` example #39230Maria Solano2
2026-04-19fix(drawline): hang while redrawing diff filler above fold #39219Jaehwang Jung2
Problem: win_line() falls into infinite loop when a diff window has top filler above its first visible buffer line, that first visible buffer line is a closed fold, and the folded line uses normal non-empty foldtext. Solution: Allow flushing pending diff filler rows even when the underlying buffer line is folded with foldtext. AI-assisted: Codex Co-authored-by: zeertzjq <zeertzjq@outlook.com>