aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/drawline.c
Commit message (Collapse)AuthorAge
* refactor(mbyte): use StrCharInfo/ClusterInfo also for str[len] casesbfredl2026-10-06
| | | | | | | | part of a series, next big one is gonna be bring utf_ptr2schar and friends into the New world. after that it might be worth brushing of some benchmarks and re-microoptimize the hottest loops. also some const-y constess but it is fine.
* fix(display): pad virtual text after listchars eol #41292Langning Zhang2026-10-03
| | | | | | | | | Problem: End-of-line virtual text is drawn directly after a displayed listchars eol character. Solution: Preserve the normal one-cell separator after the eol character. AI-assisted
* vim-patch:9.2.1114: Visual selection is not highlighted at the cursor ↵Takumi Katase2026-09-27
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | position #42105 vim-patch:9.2.1114: Visual selection is not highlighted at the cursor position Problem: In a terminal the character under the cursor is normally not shown as part of the visual selection. Solution: Don't set "noinvcur" in win_line() (Shane Harper). The problem did not occur in the GUI, only in a terminal. The name "noinvcur" ("don't invert the cursor") was misleading: the variable did not affect the cursor, but whether the character under the cursor could be displayed as part of the visual selection. The "noinvcur" handling may have been meant to help during a visual selection when Visual is shown in reverse video and the terminal draws the cursor by inverting the character under it, as otherwise the character under the cursor would not look highlighted like the rest of the selection. But Vim cannot know in general how a terminal draws the cursor, and when either the cursor is not drawn by inverting the character under it or Visual is not shown in reverse video, the handling just left a character of the visual selection unhighlighted. closes: vim/vim#21317 https://github.com/vim/vim/commit/d10aab4ba6602f8f2f2576d2d62ceb63869db6fb Co-authored-by: Shane Harper <shane@shaneharper.net> AI-assisted
* perf(mbyte): single decoder loop for both cluster byte length and cell widthbfredl2026-09-25
| | | | | | | | | | | | | | | This applies to the callsites which already used utf_ptr2CharInfo and then utfc_next. There is more work to be done, but this is a lagom bisectable unit. A lot of code is still wounded by the historical distinction between "low" characters (c < 128) and "high" characters, with the UTF-8 specific rules behind compiler flags and virtual function calls. As a result, there are both ptr2cells() and utf_ptr2cells(). My work aims at slowly reintegrating the realms. As such, we consider ptr2cells() the "correct" abstraction as is matches what actually is printed in a displayed message and buffer text without extra bells and whistles, except for tabs.
* refactor(option): simplify error buffer handlingLewis Russell2026-09-21
| | | | | | | | | | | | | | | | | | | | | | | | | | Problem: Option validators and setters repeatedly pass error buffers and their sizes separately. Some setters return messages in static storage. Solution: - Add CharBuf for borrowed writable storage, with its length including space for a terminating NUL. - Move option error buffers to the callers that report errors. Preserve existing buffer sizes, truncation, and calls that do not need a message. - Consolidate option error formatting and the duplicated code that lists valid option values. - Return error messages directly from do_one_set_option(). - Remove unused arguments from get_option_newval() and set_option_value_for(). - Handle legacy TTY assignments in the existing callers and remove the redundant compatibility wrapper. - Reuse CharBuf for Tree-sitter query errors. - Pass CharBuf through the statusline and statuscolumn builders, retaining the buffer sizes provided by their callers, including title formatting. AI-assisted
* refactor(charset): use a variable instead of (g_chartab[c] & CT_CELL_MASK)bfredl2026-09-17
| | | | | | | | | | Incremental cleanup. A lot of this logic really made sense only for vim in in single-byte/DBCS modes, where the user got to program their own charset. Now we are just using UTF-8 internally, so the meaning of each byte in context is fixed. I think 'isprint' and CT_PRINT_CHAR also are in time to say goodby, but that will be a separate followup.
* vim-patch:9.2.1038: CursorLineFold/Sign highlighting depends on ↵zeertzjq2026-09-08
| | | | | | | | | | | | | | | | 'cursorlineopt' (#41785) Problem: CursorLineFold and CursorLineSign are only applied when 'cursorlineopt' contains "number" or is "both" (Evgeni Chasnovski). Solution: Apply those groups whenever 'cursorline' is set, independent of 'cursorlineopt' (Vrushali Zampalkar). fixes: vim/vim#20480 closes: vim/vim#21112 https://github.com/vim/vim/commit/1f8d3c44c5bd5a3d5032b3fc53e9d3aa1052583c Co-authored-by: Vrushali-Z <zampalkarvasu@gmail.com>
* fix(plines): 'linebreak' ignores inline virtual text width #41227Freddie Haddad2026-08-22
| | | | | | | | | | | | Problem: With 'linebreak', a word is moved to the next screen line when it does not fit on the current one. The check measures only the buffer text, so inline virtual text anchored inside the word is not counted. The word is kept on a line it cannot fit, and the virtual text is split across the screen line boundary. Solution: Count the width of inline virtual text anchored within the word, so the check uses the width that is actually displayed.
* refactor(drawline.c): flatten condition #41382Marc Maravall Díez2026-08-20
|
* feat(extmark): virt_lines can highlight until EOL #41289Goldpigg2026-08-18
|
* fix(decor): highlight without 'hl_eol' bleeds into wrap gaps #41160Freddie Haddad2026-08-07
| | | | | | | | | | | | | | | | Problem: 'linebreak' filler and 'breakindent'/'showbreak' padding are screen cells with no buffer character behind them, yet a decoration draws over them whether or not it asked to cover such cells. A highlight bounded to its text then paints a tail out to the edge of the row, most visible on inline code spans from plugins. That same highlight already leaves the cells past the end of a line alone, so it treats identical cells two different ways. Solution: Only a decoration with 'hl_eol' draws the gaps, which is what the flag already means at the end of a line. A full-width background such as a fenced code block sets it and still covers them. Classic :syntax has no such flag and is unchanged.
* fix(drawline): 'statuscolumn' breaks unprintable char wrapping (#41198)zeertzjq2026-08-07
| | | | | | | | Problem: Evaluating 'statuscolumn' overwrites transchar_charbuf[], which breaks the drawing of an unprintable char if p_extra points there. Solution: Make a copy in wlv.extra so that it won't be overwritten.
* fix(decor): 'breakindent'/'showbreak' gap ignores active highlight #41073Freddie Haddad2026-08-03
| | | | | | | | | | | | | | | | | | | | Problem: 'breakindent' and 'showbreak' draw their own padding with no reference to whatever decoration or syntax highlight is currently active, so it goes unhighlighted even mid-highlight, not just past a real EOL. Gating this on the decoration's `hl_eol` flag (as an earlier version of this fix did) missed plain highlights with no `hl_eol` at all, which have the exact same problem. Solution: Snapshot decor_attr into decor_attr_save right before it can be reset by 'linebreak' filler handling, and pass it into handle_breakindent()/handle_showbreak_and_filler() to extend into their padding: it is not a real end of the highlight, just screen cells with no buffer text. Like the 'linebreak' filler, an underline/strikethrough/overline is excluded, since it looks like a broken line drawn over the gap. This also fixes 'breakindent' losing the highlight right after a real 'linebreak' word-push, since that reset otherwise leaked into the next row.
* fix(ui): highlight bleeds into 'linebreak' filler #41072Freddie Haddad2026-08-03
| | | | | | | | | | | | | | | | | Problem: When 'linebreak' pushes a word entirely to the next screen row, the filler cells left on the current row keep whatever highlight was set by the last real character before the break, even when that highlight should not extend past it (e.g. an underline, which looks broken drawn over blank cells). Solution: Reset decor_attr and area_attr at the filler when their attribute has an underline, undercurl, strikethrough, or overline; otherwise leave them, since a plain background or reverse-video highlight looks correct extending through blank filler cells, regardless of where the pushed-down word happens to end. search_attr keeps the same check, plus its pre-existing on_last_col case (its own match ending exactly here).
* feat(options): lua closure/function optionsJustin M. Keyes2026-07-31
| | | | | | | | | | | | | | | Problem: Cannot assign Lua functions/closures to "func" ('completefunc', 'tagfun', …) or "expr" ('foldexpr', 'indentexpr', …) options. Solution: - Store "func"/"expr" options as `Callback` instead of string. - Delete oceans of copy-pasted code. - BREAKING: LuaRef returned via RPC/Vimscript is now represented as `"<Lua N: file:line>"` (like what `:map` shows) instead of `nil`. - Note: `man.vim` still uses `v:lua` string, bc it's a vimscript ftplugin. Helped-by: Lewis Russell <lewis6991@gmail.com>
* feat(options): schema, "dict" options, messagesJustin M. Keyes2026-07-24
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem: Options parsing is still painful for dict-style options. Solution: schema-maxxing => better `opt:get()` (will be the basis for `vim.o()`), unified (and more-detailed) err msgs. - Drop bespoke structure-builder in `_core/options.lua`. - Define `schema` for all non-primitive options (except 'guicursor' and statusline-style options); generate reified keysets `OptKeyDict`). - Generate 'fillchars' => `fcs_tab`, 'listchars' => `lcs_tab`. - `nvim_set_option_value`: - Return the improved structures. Also from `vim.opt.x:get()`. - Eliminate api <=> lua roundtrip, centralize option structure handling. - Improve/unify errors. - Bump ERR_BUFLEN 80 → 256 so the "one of" list isn't truncated. - Eliminate old 'diffopt' order-dependence (`iwhiteall` before `iwhite`) Error samples: Typed-key path (opt_strings_check → diffopt/mousescroll/breakindentopt): E474: Unknown item 'foo' E474: 'context' requires a number E474: 'ver' number is out of range E474: 'algorithm' must be one of: myers, minimal, patience, histogram E474: 'filler' does not take a value Related: - #31084 - #34661 - #31820 - #14739 - #20107 - fix #18875 - :get() returns `{ sbr = true, shift = '3' }` (reified-keyset) instead of `{'sbr', 'shift:3'}` - Setting via table now works too. `object_as_optval_for` `is_map` now recognizes struct options. - fix #30296 - instead of `E474: Invalid argument`, errors now look like: ``` E474: Invalid value 'x', expected one of: single, double: ambiwidth=x E474: Unknown item 'foo': diffopt=foo E474: 'context' requires a number: diffopt=context:x ``` simplify `win_float_parse_option` from #26799.
* refactor(globals): group Visual-mode globals in VisualState #40777Justin M. Keyes2026-07-16
|
* refactor(search): SearchStateJustin M. Keyes2026-07-16
|
* refactor(globals): group search state into SearchState structcarladams1299-lab2026-07-16
|
* feat(cmdwin): implement cmdwin as a normal buf+winJustin M. Keyes2026-06-25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem: cmdwin (the `:q` cmdline buffer) has various limitations which require special-casing all over the codebase. Besides complicating the code, it also breaks async plugins if they try to create buffers/windows after some work is done, if the user happens to open cmdwin at the wrong the moment: Lua callback: …/guh.nvim/lua/guh/util.lua:531: E11: Invalid in command-line window; <CR> executes, CTRL-C quits stack traceback: [C]: in function 'nvim_buf_delete' …/guh.nvim/lua/guh/util.lua:531: in function <…/guh.nvim/lua/guh/util.lua:526> Solution: Just say no to "inception". Reimplement cmdwin as a normal buffer+window. All of the cmdwin contortions (in both core, and innocent plugins) exist literally only to support "inception": recursive cmdwin-in-cmdline-things, like `<c-r>=`, `/`, search-during-substitute, `:input()`, etc. So we just won't support that (though I have a potential plan for that later, which I call "modal parking lot"). The benefit is that plugins, and core, no longer have to care about cmdwin. BONUS: - mouse-drag on vertical separators works (it only worked for horizontal/statusline before) - inccommand-in-cmdwin now works correctly, for free (thus don't need #40077). POTENTIAL FOLLOWUPS - Drop `CHECK_CMDWIN` ("E11: Invalid in command-line window"), allow chaos. - Unify `BUFLOCK_OK` / `LOCK_OK` ? DESIGN: - Eliminate lots of C globals, `EX_CMDWIN`, etc. - `text_locked()` no longer reports true for cmdwin. - cmdwin = a normal window with 'winfixbuf', 'bufhidden=wipe', 'buftype=nofile'. Invariants come from those options rather than special cases throughout the codebase. - `nv_record` for q:/q//q? calls Lua `nlua_call_vimfn("vim._core.cmdwin", …)`. No `K_CMDWIN` / cmdline-reader detour. - `cedit_key` (`c_CTRL-F`) schedules a deferred event that calls `vim._core.cmdwin.open(type, content, pos)` and returns `Ctrl_C` so the in-flight cmdline cancels. Reader state is not serialized; instead the captured `(type, line, col)` is replayed via `nvim_feedkeys(type..line.."<CR>", "nt", …)` after user confirms. - On confirm/cancel: `<CR>` / `<C-C>` calls into Lua which closes the window and re-feeds the cmdline. BREAKING CHANGES: - Expression-register cmdline (`<C-R>=` from insert-mode) no longer supports cmdwin. Same applies to `input()` / `inputlist()` (already covered by `text_locked`). - Usage of cmdwin in macros/mappings will probably break (assuming they ever worked).
* vim-patch:9.2.0707: completion: popup misplaced when text before it is ↵zeertzjq2026-06-23
| | | | | | | | | | | | | | | | | | concealed (#40374) Problem: When the cursor line has concealed text before the start of the completion, the insert-mode completion popup is drawn at the wrong screen column and the cursor no longer lines up with the completed text. Solution: Record the concealed width before the cursor on its screen line in a new `win_T` field while `win_line()` draws it, subtract it in `pum_display()` to place the menu over the visible text, and redraw the cursor line so `win_line()` corrects the cursor too. closes: vim/vim#20539 https://github.com/vim/vim/commit/d167c50de4b954e5ddd97208187c5b3b77dd89cc Co-authored-by: Barrett Ruth <br@barrettruth.com>
* feat(column): per row click handlers for 'statuscolumn' (#40265)luukvbaal2026-06-20
| | | | | | | | | | | | | | Problem: - Current 'statuscolumn' click label caveat is restrictive. - v:virtnum is not unique to a line if it has both above and below virtual lines. - 'statuscolumn' click handler may expect v:virt/lnum to be set. Solution: - Store per-row click definitions for the statuscolumn in a (nested line/virt number) map. - Implement strategy that gives each 'statuscolumn' row a unique v:virtnum. - Set v:virt/lnum when determining which line is clicked.
* fix(folds): foldcolumn is interrupted for virtual line above nested fold ↵Matei Stroia2026-06-11
| | | | | | | | | | | (#39999) Problem: `foldcolumn` is empty for virtual lines above the start of a nested fold. Solution: For virtual lines, compute the outer fold level and display it by reusing the logic from `fill_foldcolumn`.
* feat(extmark): virt_lines_overflow "wrap" and "auto"jreidx2026-06-08
| | | | | | Problem: Extmark has support for horizontal scrolling and truncating, but not wrapping. Solution: Extend virt_lines_overflow flags to support "wrap" and "auto" based on proposed changes in #18282.
* fix(fold): virtual lines duplicate foldopen (#39891)Matei Stroia2026-05-20
| | | | | | | | | | | | Problem: Virtual lines above a line where a fold starts show `foldopen` in `foldcolumn`. Solution: Check if the line below the virtual one is inside a fold that starts higher up or if it's the start of a fold. In the latter case, don't show anything in `foldcolumn` for the virtual line. refactor: lint
* fix(drawline): hang while redrawing diff filler above fold #39219Jaehwang Jung2026-04-19
| | | | | | | | | | | | | | 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>
* vim-patch:9.2.0346: Wrong cursor position when entering command line window ↵zeertzjq2026-04-15
| | | | | | | | | | | | | | | | | | | | | | | | | (#39072) Problem: Wrong cursor position when entering command line window Solution: Add check_cursor() command to verify the cursor position (Hirohito Higashi). When opening the command-line window with CTRL-F after typing a command that fills the screen width, the cursor was placed past the end of the line. Add check_cursor() after setting State to MODE_NORMAL so the cursor is adjusted to the last character. Also fix the cmdwin prefix character (e.g. ':') being drawn on wrapped continuation rows. Draw an empty space instead so that the text alignment is preserved. closes: vim/vim#19964 https://github.com/vim/vim/commit/c4fe1e958a2051d443abe072c8a5366a887da9b3 Cherry-pick Test_wildmenu_pum() changes from patch 9.1.1995. Co-authored-by: Hirohito Higashi <h.east.727@gmail.com> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* vim-patch:9.2.0296: Redundant and incorrect integer pointer casts in ↵zeertzjq2026-04-04
| | | | | | | | | | | | | | | drawline.c (#38757) Problem: Currently `colnr_T` and `int` and the same type, so casting `int *` to `colnr_T *` is redundant. Additionally, even if they are changed to different types in the future, these casts are incorrect as they won't work on big-endian platforms. Solution: Remove the casts. Also fix two cases of passing false instead of 0 to an integer argument (zeertzjq). related: vim/vim#19672 closes: vim/vim#19907 https://github.com/vim/vim/commit/18cd55dbc4b97f06360905aa3efce5ab5d9bcad8
* vim-patch:9.2.0289: 'linebreak' may lead to wrong Visual block highlighting ↵zeertzjq2026-04-04
| | | | | | | | | | | | | (#38749) Problem: 'linebreak' may lead to wrong Visual block highlighting when end char occupies multiple cells (after 7.4.467). Solution: Exclude 'linebreak' from the ending column instead of setting 'virtualedit' temporarily (zeertzjq). fixes: vim/vim#19898 closes: vim/vim#19900 https://github.com/vim/vim/commit/23be1889d1a1212445ca8bb9cd378484d3755f79
* fix: use correct window dimension for range estimationvanaigr2026-03-23
|
* fix(decor): clamp last column by decor provider rangevanaigr2026-03-23
|
* vim-patch:9.2.0090: "leadtab" behavior inconsistent on line with only TABszeertzjq2026-03-03
| | | | | | | | | | | Problem: "leadtab" behavior inconsistent on line with only TABs (after 9.2.0088). Solution: Don't consider those as leading TABs. Also add more tests for existing behavior of "lead" and "leadmultispace" (zeertzjq). closes: vim/vim#19549 https://github.com/vim/vim/commit/4b30e40a1f0c27622f71e70648aff99a5a99be5f
* vim-patch:9.2.0088: cannot display tabs for indentationzeertzjq2026-03-03
| | | | | | | | | | | | | Problem: cannot display tabs for indentation Solution: Add the "leadtab" value to the 'listchars' option to distinguish between tabs used for indentation and tabs used for alignment (HarshK97). closes: vim/vim#19094 https://github.com/vim/vim/commit/8526d32647245b3b623986949e7807b4b353e624 Co-authored-by: HarshK97 <harshkapse1234@gmail.com>
* vim-patch:9.2.0028: matchadd() conceal may use unrelated syntax cchar (#37974)zeertzjq2026-02-19
| | | | | | | | | Problem: matchadd() conceal may use unrelated syntax cchar. Solution: Only use syntax cchar when syntax_flags has HL_CONCEAL (zeertzjq). closes: vim/vim#19459 https://github.com/vim/vim/commit/d01f234ec1d04cc09bfd0c3db1e53cab7acb0d65
* fix(extmark): wrong eol_right_align width calculation (#37034)glepnir2026-01-23
| | | | | | | | | Problem: Multiple eol_right_align virtual texts with different widths are incorrectly positioned. The lookahead loop uses `item` instead of `lookaheadItem` when checking kind and accessing data, causing all items to use the first item's width. Solution: Use `lookaheadItem->kind` and `lookaheadItem->data.vt` instead of `item->kind` and `item->data.vt` in the lookahead loop.
* docs: misc, lspJustin M. Keyes2025-12-20
|
* fix(highlight): respect 'winhighlight' in CursorLine Normal check #36927glepnir2025-12-16
| | | | | | | Problem: CursorLine background check used global `normal_bg`, ignoring 'winhighlight'. Solution: Use `bg_attr` to get window-local Normal background instead.
* docs: misc, editorconfigJustin M. Keyes2025-12-15
| | | | fix https://github.com/neovim/neovim/issues/36858
* fix(highlight): Normal-linked groups shouldn't override CursorLine #35026glepnir2025-12-09
| | | | | | | | Problem: CursorLine doesn't consistently highlight text using groups linked to Normal (e.g., in quickfix, passwd files), while it works for direct Normal usage. Solution: Don't let normal background from linked groups override explicit non-normal backgrounds during attribute combination.
* vim-patch:9.1.1883: Wrong display with 'smoothscroll' with -diff (#36372)zeertzjq2025-10-28
| | | | | | | | Problem: Wrong display with 'smoothscroll' when FEAT_DIFF is disabled. Solution: Use plines_correct_topline() (zeertzjq). closes: vim/vim#18649 https://github.com/vim/vim/commit/e06e70f7b129e983b307be405c44449348ac470f
* vim-patch:partial:8.1.1939: code for handling v: variables in generic eval ↵Jan Edmund Lazo2025-10-04
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | file (#35968) Problem: Code for handling v: variables in generic eval file. Solution: Move v: variables to evalvars.c. (Yegappan Lakshmanan, closes vim/vim#4872) https://github.com/vim/vim/commit/e5cdf153bcb348c68011b308c8988cea42d6ddeb Remove direct reference to "vimvars" for following functions: - assert_error() - get_vim_var_nr() - get_vim_var_list() - get_vim_var_dict() - get_vim_var_str() - set_cmdarg() - set_reg_var() - set_vcount() - set_vexception() - set_vthrowpoint() - set_vim_var_bool() - set_vim_var_dict() - set_vim_var_list() - set_vim_var_nr() - set_vim_var_special() - set_vim_var_string() - set_vim_var_type() Reorder functions based on v8.2.4930 for eval_one_expr_in_str() and eval_all_expr_in_str(). Co-authored-by: Bram Moolenaar <Bram@vim.org>
* vim-patch:9.1.1819: Cannot configure the inner foldlevel indicator (#36010)zeertzjq2025-10-03
| | | | | | | | | | | | Problem: Cannot configure the inner foldlevel indicator for the foldcolumn Solution: Add "foldinner" suboption value to the 'fillchar' option (Maria José Solano). closes: vim/vim#18365 https://github.com/vim/vim/commit/1a691afd2717732c6f42dfe3278a9540db0d8110 Co-authored-by: Maria José Solano <majosolano99@gmail.com>
* vim-patch:9.1.1802: 'nowrap' in a modeline may hide malicious code (#35946)zeertzjq2025-09-29
| | | | | | | | | | | | | | | | Problem: 'nowrap' in a modeline may hide malicious code. Solution: Forcibly use '>' as 'listchars' "extends" if 'nowrap' was set from a modeline (zeertzjq). Manual `:setlocal nowrap` disables this behavior. There is a separate problem with `:set nowrap` that also applies to some other options. related: vim/vim#18214 related: vim/vim#18399 closes: vim/vim#18425 https://github.com/vim/vim/commit/9d5208a9313dd8b0d62c97af5485f1715af98a1c Cherry-pick some test_modeline.vim changes from patches 9.0.{0363,0626}.
* vim-patch:9.1.1798: Wrong display with 'sms' and long wrapped virt text at ↵zeertzjq2025-09-27
| | | | | | | | | | | | EOL (#35930) Problem: Wrong display with 'smoothscroll' and long wrapped virtual text at EOL. Solution: Handle w_skipcol inside long wrapped virtual text at EOL (zeertzjq). closes: vim/vim#18408 https://github.com/vim/vim/commit/d9318acc0223bafd3ed5e7f8cdde26328bf200e7
* perf: add on_range in treesitter highlightingvanaigr2025-08-28
|
* fix(column): wrong alignment and highlight with empty 'display' (#35495)zeertzjq2025-08-27
| | | This fixes a regression from #26961.
* refactor(build): remove INCLUDE_GENERATED_DECLARATIONS guardsbfredl2025-08-14
| | | | | | | | | These are not needed after #35129 but making uncrustify still play nice with them was a bit tricky. Unfortunately `uncrustify --update-config-with-doc` breaks strings with backslashes. This issue has been reported upstream, and in the meanwhile auto-update on every single run has been disabled.
* vim-patch:9.1.1557: not possible to anchor specific lines in diff mode (#34967)zeertzjq2025-07-18
| | | | | | | |