runtime(make): Makefile highlighting breaks with ')' in string
Problem: Makefile syntax highlighting incorrectly ends function calls
when encountering ')' inside double or single quoted strings,
causing incorrect highlighting for the remainder of the line.
Solution: Add makeDString and makeSString to the contains list for
makeIdent regions. This allows strings to be recognized inside
variable references and function calls.
fixes: #18687
closes: #18818
Signed-off-by: Beleswar Prasad Padhi <beleswarprasad@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
Yiyang Wu [Tue, 23 Dec 2025 21:25:04 +0000 (21:25 +0000)]
runtime(make): Move target greedy match after $() to avoid region matching overflow
Partially revert 2a33b499a3d7f46dc307234847a6562cef6cf1d8, where all
syn match makeIdent are moved before syn region makeIdent to match $()
(reason: see https://github.com/vim/vim/pull/18403#issuecomment-3341161566)
However this results in https://github.com/vim/vim/issues/18890 ,
because lines like
`$(a) =`
will first start a region search beginning with `$(`
but then the whole target including `)` will be matched by
`syn match makeIdent "^ *[^:#= \t]*\s*="me=e-1`
which leaves the region search for the never-found `)` and let the
region matching overflow.
Same for
`$(a) ::`
`$(a) +=`
The solution is to move those greedy target match back, so they take
priority and prevents region match from happening.
fixes: #18890
closes: #18938
Signed-off-by: Yiyang Wu <xgreenlandforwyy@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
When a line is wrapped on word boundaries, getregionpos() may report a
different end column for a visual block than the cursor position used to
define the selection.
Update the blockwise calculation in getregionpos() to use the same
wrapping assumptions as visual block mode, so the reported region
matches the selection boundaries.
Add a regression test that forces wrapping and checks that the end
position stays consistent under "setlocal wrap" and "setlocal
linebreak".
closes: #19006
Signed-off-by: McAuley Penney <jacobmpenney@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
Anttoni Erkkilä [Tue, 23 Dec 2025 20:42:57 +0000 (20:42 +0000)]
patch 9.1.2016: cindent wrong indentation after do-while loop
Problem: At "if(0) do if(0); while(0); else", else should be aligned
with outer if, but is aligned with inner if.
Solution: In function find_match, ignore "if" and "else" inside a
do-while loop, when looking for "if". (Anttoni Erkkilä)
closes: #19004
Signed-off-by: Anttoni Erkkilä <anttoni.erkkila@protonmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
Foxe Chen [Tue, 23 Dec 2025 20:29:08 +0000 (20:29 +0000)]
patch 9.1.2014: clipboard: clipboard register corrupted with clipboard provider
Problem: clipboard: clipboard register corrupted with clipboard
provider (Satoru Kitaguchi and mikoto2000 after v9.1.1972)
Solution: Only adjust clipboard register points to the unnamed register
(Foxe Chen)
fixes: #18983
fixes: #18988
closes: #19000
Signed-off-by: Foxe Chen <chen.foxe@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
Muraoka Taro [Tue, 23 Dec 2025 20:22:54 +0000 (20:22 +0000)]
patch 9.1.2013: tests: Test_terminal_shell_option fails with conpty
Problem: tests: When opening a conpty terminal, if process startup
fails, it will silently exit. As a result, the
Test_terminal_shell_option in test_terminal3.vim failed in
conpty.
In a winpty terminal, the winpty-provided error message
"CreateProcess failed" was displayed. The test is designed to
catch this error as an exception.
Solution: Make conpty fail with an error messages in the same way as winpty.
(Muraoka Taro)
In addition, since the GetWin32Error() function can obtain more detailed
error messages, the format has been changed to "CreateProcess failed:
{localized message from the OS}" for conpty.
Also, since the GetWin32Error() function returns errors in ACP (Active
Code Page) encoding, these have been converted to Vim's internal
encoding, enc. This will prevent messages from being garbled in
Japanese environments, etc. The output of this function was basically
used by the semsg() function in other places, so this change also fixes
potential similar garbled characters.
The test now errors out immediately in places where it is expected not
to be reached, and comments have been added about the expected content
of the winpty and conpty error messages.
closes: #18998
Signed-off-by: Muraoka Taro <koron.kaoriya@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
patch 9.1.2011: crash when unreferencing gtk icon theme
Problem: crash when unreferencing gtk icon theme
(noamhalevy-wq, after v9.1.1583)
Solution: Remove the g_object_unref() call.
gtk_icon_theme_get_default() returns a singleton that should NOT be
unreferenced. From GTK documentation:
> A unique GtkIconTheme associated with the default screen. This icon
theme is associated with the screen and can be used as long as the
screen is open. Do not ref or unref it.
Problem: No syntax highlighting for bpftrace files.
Solution: Add basic syntax rules, which cover comments, keywords, strings,
numbers, macros and probes (the bpftrace specific items).
closes: #18999
Signed-off-by: Stanislaw Gruszka <stf_xl@wp.pl> Signed-off-by: Christian Brabandt <cb@256bit.org>
Muraoka Taro [Mon, 22 Dec 2025 18:33:50 +0000 (18:33 +0000)]
patch 9.1.2009: tests: "Xm4" test directory may not be deleted
Problem: tests: "Xm4" test directory may not be deleted
Solution: Use "R" flag with mkdir() call to have the directory
recursively deleted at the end of function Test_m4_format()
(Muraoka Taro)
Test_m4_format in test_filetype.vim creates the "Xm4" directory with the
'D' flag. Then it creates two files in the "Xm4" directory. One of them,
"alocal.m4," was created with the 'D' flag, so it will disappear after
the test is complete. However, the other, "configure.ac," was created
without any flags, so it will remain even after the test is complete.
Because the parent directory "Xm4" was created with the 'D' flag, the
latter "configure.ac" remains and is not empty, so it will not be
deleted.
This forces the directory to be deleted regardless of its contents. As a
result, the two files "alocal.m4" and "configure.ac" created in the
directory are no longer needed, so they have been deleted.
closes: #18995
Signed-off-by: Muraoka Taro <koron.kaoriya@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
Muraoka Taro [Sun, 21 Dec 2025 19:42:23 +0000 (19:42 +0000)]
patch 9.1.2006: MS-Windows: ANSI colors not correct in terminal
Problem: ANSI escape colors are not displayed correctly in
non-termguicolors in vim (cli) on Windows. The red and blue
channels seem to be swapped.
Cause: When converting VTerm ANSI index colors to cterm colors in
terminal.c, the Windows case equivalent to NR-16 (:help
cterm-colors) is ignored.
Solution: Created and used a table to convert ANSI indexed colors to
cterm's NR-16 representation (Windows only). This table
corresponds to the inverse conversion of cterm_ansi_idx in
term.c. The values in both tables are exactly the same, but
the meanings are opposite, so they are separate tables
(Muraoka Taro).
closes: #18931
Signed-off-by: Muraoka Taro <koron.kaoriya@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
- Start each field at the correct tabstop - on a new line if required.
- Use "Type1/Type2" for return types rather than "Type1 or Type2",
matching the dominant style.
- Convert hyperlinked Ex commands to command markup, `:cmd`.
- Wrap overlong lines.
closes: #18438
Signed-off-by: Doug Kearns <dougkearns@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
Muraoka Taro [Sun, 21 Dec 2025 19:19:39 +0000 (19:19 +0000)]
patch 9.1.2004: MS-Windows: executable() cannot find file in directory with single char
Problem: MS-Windows: If a directory with a single character name is
included in the PATH environment variable without a trailing
path separator, executable() will not be able to find the
executable file under it.
Solution: The second argument of the after_pathsep() function is now
passed the next pointer where a path separator may exist
(Muraoka Taro).
As a specific example, the default installation path for PowerShell v7
is "C:\Program Files\PowerShell\7", but if you set this as is in the
PATH environment variable, Vim will not be able to find the pwsh.exe
command. In this case, Vim will try to search for "C:\Program
Files\PowerShell\7pwsh.exe".
Cause: The after_pathsep() function determines whether the location
passed as its second argument immediately follows a path separator.
However, in the code where the problem occurred, the second argument was
passed a location that might contain a path separator. As a result, it
was mistakenly determined that a path separator was present in cases
where the final directory name was a single character and not followed
by a path separator, and the path to search was incorrect.
closes: #18979
Signed-off-by: Muraoka Taro <koron.kaoriya@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
Muraoka Taro [Sun, 21 Dec 2025 19:09:20 +0000 (19:09 +0000)]
patch 9.1.2003: tests: Test_glob_symlinks may fail on Window
Problem: tests: Test_glob_symlinks may fail on Windows with UCRT
runtime
Solution: Comment out the code, do not use _wstat().
(author)
For Test_glob_symlinks() to succeed, vim_stat() (which is actually
mswin_stat_impl()) must fail on empty symlinks. When the dynamically
linked C runtime is linked, _wstat() succeeds even on empty symbolic
links. As a result, Test_glob_symlinks() fails.
For details, see here:
https://github.com/koron/vc-stat-behavior-verification
closes: #18962
Signed-off-by: Muraoka Taro <koron.kaoriya@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
patch 9.1.2002: Vim9: heap-use-after-free when when accessing protect class member
Problem: Vim9: heap-use-after-free when when accessing protect class
member (Foxe Chen)
Solution: Set cl->class_type_list and return directly, add tests for
using protected class method and variable from another class
(Yegappan Lakshmanan).
closes: #18971
Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
Mao-Yining [Sat, 20 Dec 2025 18:29:16 +0000 (18:29 +0000)]
translation(zh_CN): Add license disclaimer
Added disclaimer to clarify that the Chinese translation is for
reference only and is not legally binding. The original English version
of the license is the sole authoritative text. No liability is accepted
for any ambiguities or errors arising from the translation.
closes: #18980
Signed-off-by: Mao-Yining <mao.yining@outlook.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
Muraoka Taro [Sat, 20 Dec 2025 18:13:18 +0000 (18:13 +0000)]
runtime(getscript): GLVS plugin fails with wget.exe with PowerShell
Problem: Only Windows: The GLVS plugin fails in a PowerShell Desktop if
wget.exe is installed. The PowerShell Desktop has an alias
called wget which hides wget.exe.
Solution: Force .exe extension if wget.exe is available.
closes: #18987
Signed-off-by: Muraoka Taro <koron.kaoriya@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
glepnir [Sat, 20 Dec 2025 17:26:39 +0000 (17:26 +0000)]
patch 9.1.2001: cursor may end up in wrong window after :botright copen
Problem: After :botright copen and closing the quikfix window, the
cursor ends up in the wrong window. The problem is fr_child
always points to the first (leftmost for FR_ROW, topmost for
FR_COL) child frame. When do :vsplit, the new window is
created on the left, and frame_insert() updates the parent's
fr_child to point to this new left window.
Solution: Create a snapshot before open the quickfix window and restore
it when close it (glepnir).
closes: #18961
Signed-off-by: glepnir <glephunter@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
John Marriott [Sat, 20 Dec 2025 16:00:17 +0000 (16:00 +0000)]
patch 9.1.2000: Vim9: object member used char_u pointers
Problem: Vim9: class and object member names are stored as char_u *
pointer requiring repeated strlen() calls and making it harder
to use length-aware string operations consistently.
Solution: Store ocm_name as a string_T instead of char_u *
(John Marriott).
In addition in vim9class.c:
1: change some calls from ga_concat() to ga_concat_len() where the
length is known.
2: in ex_class() remove unneeded variable name.
3. in intf_method_present() remove unneeded variable cl_name.
4: in update_member_method_lookup_table() move some assignments from
inner loops into outer loops.
5: in member_lookup() remove unneeded else.
6: in is_duplicate_variable() and is_duplicate_enum() rearrange the
string comparisons to first check the lengths match.
closes: #18973
Signed-off-by: John Marriott <basilisk@internode.on.net> Signed-off-by: Christian Brabandt <cb@256bit.org>
Foxe Chen [Thu, 18 Dec 2025 20:47:34 +0000 (21:47 +0100)]
patch 9.1.1999: clipboard provider does not respect 'clipboard' option
Problem: clipboard provider does not respect 'clipboard' option
(Satoru Kitaguchi, after v9.1.1972)
Solution: make clipboard provider register respect "unnamed/unnamedplus"
from the 'clipboard' option value
fixes: #18930
closes: #18952
Signed-off-by: Foxe Chen <chen.foxe@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
runtime(tutor): Chapter 2: consistently use upper case letter, fix typo after 1e3e1ba067c79a
Chapter 2: Fix missing "R" after 1e3e1ba067c79a when using register from insert
mode. While at it, consistently use upper case letter for CTRL-R in the
new-tutor.
John Marriott [Wed, 17 Dec 2025 21:31:59 +0000 (22:31 +0100)]
patch 9.1.1997: Missing out-of-memory check in vim9class.c
Problem: Missing out-of-memory check in vim9class.c in calls to
vim_strnsave().
Solution: Refactor is_duplicate_variable() and is_duplicate_enum() and
make use of string_T struct instead (John Marriott).
closes: #18947
Signed-off-by: John Marriott <basilisk@internode.on.net> Signed-off-by: Christian Brabandt <cb@256bit.org>
yilisharcs [Wed, 17 Dec 2025 21:29:24 +0000 (22:29 +0100)]
runtime(compiler): Match gcc.vim make error format
Problem: gcc.vim interprets "make: *** [Makefile" in the error message
"make: *** [Makefile:2: all] Error 1" as a valid filename.
Solution: Add pattern to extract the filename correctly. Note that this
doesn't remove the dangling "]" from the output ("all]").
closes: #18956
Signed-off-by: yilisharcs <yilisharcs@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
Aliaksei Budavei [Wed, 17 Dec 2025 21:08:19 +0000 (22:08 +0100)]
patch 9.1.1995: tests: flaky test_cmdline.vim causes test failures
Problem: Data races between test buffers are currently addressed by
relying on arbitrary execution delays or blissfully dismissed.
Solution: Prefer more deterministic synchronisation between test buffers
for test cases that generate screendump files with expected
results (Aliaksei Budavei)
closes: #18920
Signed-off-by: Aliaksei Budavei <0x000c70@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
Aliaksei Budavei [Wed, 17 Dec 2025 21:00:49 +0000 (22:00 +0100)]
patch 9.1.1994: CI: slow cursor positioning may cause flaky test failures
Problem: More deterministic synchronisation can be established between
processes running test cases and collecting visual effects to
a screendump file for future verification by anticipating
the availability of known parts of such a file and asserting
the location of the cursor.
Solution: Provide a convenience test function that waits a specified
time for cursor positioning (Aliaksei Budavei)
related: #18920
Signed-off-by: Aliaksei Budavei <0x000c70@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
Muraoka Taro [Wed, 17 Dec 2025 19:52:32 +0000 (20:52 +0100)]
patch 9.1.1990: tests: Test_term_gettty() fails when using conpty on Windows
Problem: tests: Test_term_gettty() fails when using conpty on Windows,
CI uses winpty, so this test passes.
Solution: Skip the test Test_term_gettty(). Since conpty communicates
via anonymous pipes, there is no name that can be obtained
with term_gettty() (Muraoka Taro)
closes: #18954
Signed-off-by: Muraoka Taro <koron.kaoriya@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
patch 9.1.1989: Vim intro screen shows register message
Problem: Vim intro screen shows register message (after v9.1.1893)
Solution: Remove the register message, registering is no longer useful
and possible.
fixes: #18933
closes: #18934
Signed-off-by: Signed-off-by: Christian Brabandt <cb@256bit.org>
Foxe Chen [Tue, 16 Dec 2025 19:35:53 +0000 (20:35 +0100)]
patch 9.1.1988: osc52 package can be further improved
Problem: osc52 package can be further improved (after v9.1.1984).
Solution: Improve plugin, update test and check for clipboard_provider
feature (Foxe Chen).
closes: #18935
Signed-off-by: Foxe Chen <chen.foxe@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
Victorhck [Tue, 16 Dec 2025 18:56:59 +0000 (19:56 +0100)]
runtime(tutor): Improve Spanish translations
This change does the following:
- fix lesson number in tutor 1
- added and explanation about how get vimtutor lesson 2
- fix credits to authors in lesson 2
closes: #18940
Signed-off-by: Victorhck <victorhck@mailbox.org> Signed-off-by: Christian Brabandt <cb@256bit.org>
Muraoka Taro [Tue, 16 Dec 2025 18:51:26 +0000 (19:51 +0100)]
patch 9.1.1985: tests: test_sound.vim fails on Windows
Problem: tests: test_sound.vim fails when run locally on Windows
Solution: Skip Test_play_silent in Windows non-GUI environments.
Cause: There are two causes:
1) The global variable g:id is undefined, causing an undefined
reference. Due to the execution order of test cases, g:id is defined in
Test_play_event. However, on Windows, this test is skipped, so g:id is
not defined. It is referenced in Test_play_silent's WaitForAssert()
without being defined, resulting in an undefined error.
Solution: Define g:id at the beginning of Test_play_silent.
2) In the non-GUI Windows version of vim, there is no message loop,
so the callback when play file sound ends does not occur, and
Test_play_silent's WaitForAssert times out and fails. In CI,
sound_playfile() returns 0, so Test_play_silent is skipped. The
reason for this is unknown, but it may be because CI is running on
Windows Server or something like that.
Solution: Skip Test_play_silent in Windows non-GUI environments.
Signed-off-by: Muraoka Taro <koron.kaoriya@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
closes: #18941
Foxe Chen [Mon, 15 Dec 2025 20:45:07 +0000 (21:45 +0100)]
patch 9.1.1984: terminal OSC52 support can be improved
Problem: terminal OSC52 support to access the clipboard can be improved
Solution: Include and package the optional osc52 package, note: this
requires a Vim with clipboard provider feature (Foxe Chen).
related: #14995
closes: #18575
Signed-off-by: Foxe Chen <chen.foxe@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
John Marriott [Mon, 15 Dec 2025 20:09:29 +0000 (21:09 +0100)]
patch 9.1.1983: Vim9: class_name definition can be improved
Problem: Vim9: class_name definition can be improved
Solution: Use string_T to store class_name, avoid using STRLEN() calls,
simplify code, remove unused definition of struct
oc_newmember_S (John Marriott)
Use struct string_T to store the field class_name in struct class_T,
which means we can just use the .length field in struct string_T
instead of measuring it.
In addition:
1. In eval.c use string_T to store class_name and s in function
class_tv2string().
2. In vim9type.c change some calls from ga_concat() to ga_concat_len()
where the length is known.
3. In vim9class.c remove unused struct definition oc_newmember_S.
Change some calls from ga_concat() to ga_concat_len() where the
length is known.
4. In scriptfile.c use string_T to store type_name, class_name and
es_name in function estack_sfile().
5. In function estack_sfile() simplify construction of the grow array ga
and change some calls from ga_concat() to ga_concat_len() when the
length is known.
closes: #18925
Signed-off-by: John Marriott <basilisk@internode.on.net> Signed-off-by: Christian Brabandt <cb@256bit.org>
MURAOKA Taro [Mon, 15 Dec 2025 18:51:55 +0000 (19:51 +0100)]
patch 9.1.1981: tests: test suite may stop on error in gen_opt_test.vim
Problem: tests: test suite may stop on error in gen_opt_test.vim
Solution: Use a different output file for log files (Muraoka Taro)
When running newtests, it may unexpectedly stop just before
test_options_all.
Cause: When generating the opt_test.vim file for test_options_all, the
failure is detected by the existence of test.log. Therefore, if a test
performed before test_options_all fails and test.log is created, it is
mistakenly thought that the generation of opt_tet.vim has failed, and
the test suite stops there.
So let's change the filename created when utils/gen_opt_test.vim fails
from test.log to gen_opt_test.log, so that it can be detected
independently from other test failures.
closes: #18928
Signed-off-by: MURAOKA Taro <koron.kaoriya@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
Foxe Chen [Sat, 13 Dec 2025 17:14:59 +0000 (18:14 +0100)]
patch 9.1.1976: Cannot define callbacks for redraw events
Problem: When using listeners, there is no way to run callbacks at
specific points in the redraw cycle.
Solution: Add redraw_listener_add() and redraw_listener_remove() and
allow specifying callbacks for redraw start and end
(Foxe Chen).
closes: #18902
Signed-off-by: Foxe Chen <chen.foxe@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
Foxe Chen [Fri, 12 Dec 2025 07:44:14 +0000 (08:44 +0100)]
patch 9.1.1973: some minor problems with clipboard provider code
Problem: some minor problems with clipboard provider code
(after v9.1.1972)
Solution: Fix minor issues (Foxe Chen)
- allow empty register type for paste function to mean automatic
- fix internal inc_clip_provider() and dec_clip_provider() functions not
setting the pause count correctly
- don't call paste function when yanking
closes: #18909
Signed-off-by: Foxe Chen <chen.foxe@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
glepnir [Thu, 11 Dec 2025 19:45:09 +0000 (20:45 +0100)]
patch 9.1.1971: Crash when buffer gets deleted inside charconvert during save
Problem: Crash when buffer gets deleted inside charconvert during save
Solution: Check for `b_saving` inside `can_unload_buffer()`, so we don’t try to
unload a buffer while it’s still being saved (glepnir).
closes: #18901
Signed-off-by: glepnir <glephunter@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
zeertzjq [Thu, 11 Dec 2025 19:28:48 +0000 (20:28 +0100)]
patch 9.1.1969: Wrong cursor position after formatting with long 'formatprg'
Problem: Wrong cursor position after formatting with long 'formatprg'.
Solution: Don't show hit-enter prompt when there are stuffed characters.
Previously a stuffed character at the hit-enter prompt will dismiss the
prompt immediately and be put in the typeahead buffer, which leads to
incorrect behavior as the typeahead buffer is processed after the stuff
buffers. Using vungetc() when KeyStuffed is TRUE can fix this problem,
but since the hit-enter prompt isn't visible anyway (and is likely not
desired here), just skip the prompt instead, which also avoids a wait
when using "wait" instead of "hit-enter" in 'messagesopt'.
fixes: #18905
closes: #18906
Signed-off-by: zeertzjq <zeertzjq@outlook.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
patch 9.1.1965: q can accidentally start recording at more prompt
Problem: When exiting at the end of the more prompt (at the hit enter
prompt) by hitting q the recording mode will be started.
(Jakub Łuczyński)
Solution: Don't add the q key to the typeahead buffer
in the function wait_return (Bjoern Foersterling)
fixes: #2589
closes: #18889
Signed-off-by: Bjoern Foersterling <bjoern.foersterling@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
zeertzjq [Tue, 9 Dec 2025 12:10:12 +0000 (13:10 +0100)]
patch 9.1.1964: Wrong display when using setline() at hit-enter prompt
Problem: Wrong display when using setline() at hit-enter prompt
(after 8.2.3204).
Solution: Only skip scrolling for changed lines in top area if it's
scrolled down due to w_topline change. Also add more testing
for what 8.2.3204 fixed (zeertzjq).
closes: #18887
Signed-off-by: zeertzjq <zeertzjq@outlook.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
patch 9.1.1963: diff: missing diff size limit for xdiff
Problem: diff: missing diff size limit for xdiff
Solution: Impose file size limit for internal diff (xdiff)
(Yee Cheng Chin).
Git imposes a hard cap on file size for content that it passes to xdiff
(added to Git in dcd1742e56e, defined in xdiff-interface.h), due to
integer overflow concerns in xdiff. Vim doesn't specify such a limit
right now, which means it's possible for a user to diff a large file
(1GB+) and trigger these overflow issues.
Add the same size limit (1GB minus 1MB) to Vim and simply throws an
error when Vim encounters files larger than said limit. For now, reuse
the same error message regarding internal diff failures. There is no
need to add the same limit for external diff as it's up to each tool to
error check their input to decide what is appropriate or not.
closes: #18891
Signed-off-by: Yee Cheng Chin <ychin.git@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
Port changes from JuliaEditorSupport/julia-vim made during 2022-2025.
Most notably:
- 88f178c Do not reset shiftwidth/expandtab at undo
- f17257a Allow else block in try/catch
- 7946ce3 Support public statements (added in Julia v1.11.0-DEV.469)
Signed-off-by: Sergio Alejandro Vargas <savargasqu+git@unal.edu.co> Signed-off-by: Christian Brabandt <cb@256bit.org>
Aaron Jacobs [Tue, 9 Dec 2025 11:43:39 +0000 (12:43 +0100)]
runtime(rust): use textwidth=100 for the Rust recommended style
The help text here said 99 was the recommended style for the standard
library, but I can't find a citation for this anywhere. In contrast the
Rust Style Guide hosted on rust-lang.org
[says](https://doc.rust-lang.org/stable/style-guide/#indentation-and-line-width)
the maximum line width is 100, and rustfmt
[agrees](https://github.com/rust-lang/rust/blob/37aa2135b5d0936bd13aa699d941aaa94fbaa645/src/tools/rustfmt/src/config/options.rs#L570).
Having the two disagree causes an annoying off-by-one error in vim: if
you configure vim to highlight too-long lines then it will occasionally
complain about a line that rustfmt refuses to fix.
closes: #18892
Signed-off-by: Aaron Jacobs <jacobsa@google.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
glepnir [Sun, 7 Dec 2025 17:54:26 +0000 (18:54 +0100)]
patch 9.1.1960: Wrong position of info popup
Problem: When the popup menu is displayed above the cursor and the
selected item has no room below for the info popup,
popup_adjust_position() places the popup in the available
space above. The calculation added some extra lines, causing
the popup to be misaligned.
Solution: For info popups, undo that extra spacing so the popup stays
aligned with the selected item (glepnir)
closes: #18860
Signed-off-by: glepnir <glephunter@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
glepnir [Sun, 7 Dec 2025 17:48:22 +0000 (18:48 +0100)]
patch 9.1.1959: Wrong wrapping of long output using :echowindow
Problem: Outputting long strings using :echowindow wraps one character
per line and display in reverse order (Hirohito Higashi)
Solution: Use full width for :echowindow, reset msg_col after wrapping,
and increment lnum correctly when creating new lines (glepnir)
fixes: #18750
closes: #18874
Signed-off-by: glepnir <glephunter@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
zeertzjq [Sun, 7 Dec 2025 17:45:19 +0000 (18:45 +0100)]
patch 9.1.1958: Wrong display with sign_unplace() and setline() in CursorMoved
Problem: Wrong display when scrolling with 'scrolloff' and calling
sign_unplace() and setline() in CursorMoved (after 8.2.3204).
Solution: Still scroll for changed lines below the top area when the top
is scrolled down (zeertzjq)
closes: #18878
Signed-off-by: zeertzjq <zeertzjq@outlook.com> Signed-off-by: Christian Brabandt <cb@256bit.org>