Doug Kearns [Fri, 21 Nov 2025 18:16:15 +0000 (18:16 +0000)]
CI: Fix triage labelling of maintainer runtime files
A directory name alone does not generate matches for its contents.
closes: #18785
Signed-off-by: Doug Kearns <dougkearns@gmail.com> Signed-off-by: Philip H. <47042125+pheiduck@users.noreply.github.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
Problem: 'commentstring' requires the +folding feature but is used in
contexts other than folding.
Solution: Remove the +folding feature guards from 'commentstring' and
make it available in all builds (Doug Kearns).
closes: #18731
Signed-off-by: Doug Kearns <dougkearns@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
Doug Kearns [Thu, 20 Nov 2025 20:59:10 +0000 (20:59 +0000)]
patch 9.1.1923: wrong error when assigning to read-only register
Problem: When assigning to @. in a :let command an incorrect "E15"
error is emitted.
Solution: Emit the correct "E354" error. (Doug Kearns).
An incorrect "E488" error was also emitted in Vim9 script assignments.
It appears that the code deleted in this commit was added to work around
a limitation in the returned value from find_name_end() that no longer
exists.
Konfekt [Thu, 20 Nov 2025 20:54:31 +0000 (20:54 +0000)]
runtime(compiler): set errorformat where missing
As a matter of caution it sets it to the default gcc errorformat:
```
errorformat=%*[^"]"%f"%*\D%l: %m,"%f"%*\D%l: %m,%-Gg%\?make[%*\d]: *** [%f:%l:%m,%-Gg%\?make: *** [%f:%l:%m,%-G%f:%l: (Each undeclared identifier is reported only once,%-G%f:%l: for each function it appears in.),%-GIn file included from %f:%l:%c:,%-GIn file included from %f:%l:%c\,,%-GIn file included from %f:%l:%c,%-GIn file included from %f:%l,%-G%*[ ]from %f:%l:%c,%-G%*[ ]from %f:%l:,%-G%*[ ]from %f:%l\,,%-G%*[ ]from %f:%l,%f:%l:%c:%m,%f(%l):%m,%f:%l:%m,"%f"\, line %l%*\D%c%*[^ ] %m,%D%*\a[%*\d]: Entering directory %*[`']%f',%X%*\a[%*\d]: Leaving directory %*[`']%f',%D%*\a: Entering directory %*[`']%f',%X%*\a: Leaving directory %*[`']%f',%DMaking %*\a in %f,%f|%l| %m
```
so that the compiler keeps working after switching to others.
While likely only a subset is needed; such a subset has been proposed in
a commented errorformat;
checked to work for yamllint but ran out of steam for other compilers;
closes: #18754
Signed-off-by: Konfekt <Konfekt@users.noreply.github.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
Mirek Kratochvil [Thu, 20 Nov 2025 20:47:01 +0000 (20:47 +0000)]
runtime(haskell): allow spaces in backticked operators in syntax script
This formatting (although rare) is actually accepted by GHC, but vim
does not highlight it. This patch adds the simplest possible regex to
support the behavior.
Inconveniently, this might trigger weird formatting on lines that
contain errors, e.g. if the first backtick is removed from:
a `b` c `d` e
then `c` is going to be marked as an operator, which seems weird but is
valid.
closes: #18776
Signed-off-by: Mirek Kratochvil <exa.exa@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
patch 9.1.1921: xdiff: included xdiff code is outdated
Problem: xdiff: included xdiff code is outdated because it is based on
git 2.40.0
Solution: Sync with xdiff from git 2.52 (Yee Cheng Chin).
Git [v2.52](https://github.com/git/git/releases/tag/v2.52.0) has just been
released. Merge from upstream to get the latest version of xdiff. Vim's xdiff
was last updated in #12181 (Patch v9.0.1418) from Git v2.33 to v2.40.
I have refined the strategy for merging from upstream a bit compared to last
time. I use the following commands to create an orphaned branch that extracts
the before/after xdiff source code from the Git codebase, and then perform a
subtree merge. The commits in the orphaned branch are reproducible
deterministically so a reviewer can reproduce the steps and it should result in
identical commit hashes (63264f229d and d741f0e230). The commands are as
follows (you could run in a separate Vim repo to keep things clean):
For reviewing I recommend using the following commands which simplifies the diff to only what we care about:
- `git show --remerge-diff d353c6f2c8`: This shows how my merge actually
resolved the merge conflicts.
- `vimdiff <(git diff-tree -U0 63264f229d master:src/xdiff/) \
<(git diff-tree -U0 d741f0e230 xdiff-upstream-v2.52.0:src/xdiff) \
-c "silent windo %s/^index.*/index/" \
-c "silent windo %s/^@@ [-+, 0-9]* @@/@@/"`:
This shows how the patch (downstream changes done in Vim on top of Git) has
changed. Note that some local changes for fixing compiler warnings are now gone
because they are fixed upstream.
- https://github.com/git/git/commit/d39e28e68c2b1bba25c5b1213fded95e525db15e
added a dependency (`signed_add_overflows`) to Git code base. I replaced it
with a custom one since it's not hard to implement.
- Upstream had fixed a lot of compiler warnings with signed/unsigned integers,
so the compiler warning fixes that were done in Vim downstream were removed.
- Replace new `BUG()` calls with `xdl_bug()` where we use Vim's assertion
mechanisms instead.
- Performance improvement due to optimizations in the line hashing function
(https://github.com/git/git/commit/41d97837ab1e5a35fdcfd7f6af9b5d56af62e92a and
https://github.com/git/git/commit/a4bbe8af0b48f9c80ccc2c4619309c4a81c1460a).
- From personal unscientific testing (Apple M1 Max, macOS 15), when using the
new xdiff, for simple/normal diff's this could result in **11%/29%** overall
diff speed improvement. For larger more pathologically complicated diff this
results in a more modest **4%/7%** improvement.
- The two improvement numbers above are for compiling Vim with `-O3 -flto` vs
`-O2`. The more optimized version of Vim results in lower performance
improvement as it was already doing inlining via link-time-optimization
before.
- Just for reference, the command I used to test this was the following (use
either test case and comment out the other one):
```bash
# Simple/normal diff test case
(COMMIT=0d9160e11ce; git show ${COMMIT}:src/diff.c > test1.txt; git show ${COMMIT}~:src/diff.c > test2.txt)
# Larger diff test case
(COMMIT=9670f61d468; git show ${COMMIT}:src/auto/configure > test1.txt; git show ${COMMIT}~:src/auto/configure > test2.txt)
# Build Vim with old/new xdiff, then copy ./src/vim to ./src/vim_orig / ./src/vim_new respectively.
hyperfine --warmup 4 --runs 20 -L vimcmd vim_orig,vim_new \
"./src/{vimcmd} -u NONE -U NONE -es -V1 -c \"let g:f1=readfile('test1.txt')\" -c \"let g:f2=readfile('test2.txt')\" -c \"for i in range(1,200) | call diff(g:f1, g:f2) | endfor\" -c 'q'"
```
closes: #18765
Signed-off-by: Yee Cheng Chin <ychin.git@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
Harry [Tue, 18 Nov 2025 20:50:39 +0000 (20:50 +0000)]
runtime(c): Update signal constants in syntax script
closes: #18763
Co-authored-by: zeertzjq <zeertzjq@outlook.com> Signed-off-by: Harry <166658338+harrystevens4@users.noreply.github.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
Hirohito Higashi [Tue, 18 Nov 2025 20:10:14 +0000 (20:10 +0000)]
patch 9.1.1919: tabpanel: cannot handle mouse clicks in command line
Problem: tabpanel: cannot handle mouse clicks in command line
(char101, after v9.1.1898)
Solution: Update the condition that checks if the mouse pointer is on
the command line (Hirohito Higashi)
closes: #18771
Co-authored-by: Charles <char101@ui.ac.id> Signed-off-by: Hirohito Higashi <h.east.727@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
Girish Palya [Sun, 16 Nov 2025 18:30:42 +0000 (18:30 +0000)]
patch 9.1.1918: completion: crash with fuzzy completion
Problem: completion: crash with fuzzy completion
(Christian Brabandt)
Solution: When completion candidates are gathered from a different
window, and when completing `<c-p>`, linked list should be
sorted only after all items are collected (Girish Palya).
fixes: #18752
closes: #18756
Signed-off-by: Girish Palya <girishji@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
patch 9.1.1917: Vim9: incorrect type inference with mkdir()
Problem: Vim9: incorrect type inference with mkdir()
(dezza)
Solution: Before compiling a RHS expression in an assignment, save the
new local variable contents (Yegappan Lakshmanan)
fixes: #18751
closes: #18751
Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
If Vim is installed into the Windows "Program Files" directory the tutor
path name contains spaces and must therefore be quoted before passing to
:drop.
closes: #18742
Signed-off-by: Andrey Starodubtsev <andrey.starodubtsev@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
Problem: runtime(netrw): LocalBrowseCheck() wipes unnamed buffers when
g:netrw_fastbrowse=0 (Carlos Falgueras GarcÃa)
Solution: Check that bufname() is not empty
Problem: tests: test_plugin_comment fails, because it depends on nroff
filetype for .mom file (after v9.1.1909)
Solution: Explicitly set filetype to nroff
Vadim Yanitskiy [Wed, 12 Nov 2025 19:36:46 +0000 (19:36 +0000)]
runtime(erlang): recognize -if/-elif as erlangPreCondit in syntax script
The -if(Condition)/-elif(Condition) are compiler macros that evaluate
the following lines only if Condition evaluates to true. This patch
enables syntax highlighting for these macros.
Neil Lambert [Tue, 11 Nov 2025 18:01:31 +0000 (18:01 +0000)]
runtime(css): improve cssBoxProp matches
closes: #18717
Signed-off-by: Neil Lambert <nlambert@pm.me> Signed-off-by: Jay Sitter <jsit@users.noreply.github.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
Problem: tabpanel: truncates terminal output
(hokorobi)
Solution: Use topframe->fr_width, not Columns (which includes the
tabpanel width) (Hirohito Higashi)
related: #18678
closes: #18707
Signed-off-by: Hirohito Higashi <h.east.727@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
patch 9.1.1901: tests: test_vim9_generics fails without job feature
Problem: tests: test_vim9_generics fails when built without the job or
channel feature (lazypingu)
Solution: Skip test if job/channel feature is not available
Doug Kearns [Sun, 9 Nov 2025 19:23:50 +0000 (19:23 +0000)]
runtime(doc): Clean up file header whitespace
- :retab! line 1 and line 4 (main page heading).
- Use four columns whitespace before "by [Author]" in the user manual
heading to match the reference manual formatting.
- double space headings.
closes: #18648
Signed-off-by: Doug Kearns <dougkearns@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
Jesse Portnoy [Sun, 9 Nov 2025 18:57:34 +0000 (18:57 +0000)]
runtime(spec): Add support for more tags and distributions
- specMacroIdentifier: support macros starting with '?'; the most common
example is `%{?dist}`
- specPreAmble: added some missing tags from:
https://rpm.org/docs/4.19.x/manual/spec.html
- Added support for: `fedora`, `rhel`, `rocky`, `rhl`, `centos`, `el\d`
and `fc\d`, see https://docs.fedoraproject.org/en-US/packaging-guidelines/DistTag
closes: #18703
Signed-off-by: Jesse Portnoy <jesse.portnoy@perforce.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
patch 9.1.1898: tabpanel: inconsistent use of cmdline with tabpanel
Problem: tabpanel: inconsistent use of cmdline and message area with
tabpanel
Solution: Reduce the cmdline and message area by the horizontal size of
the tabpanel (Hirohito Higashi)
closes: #18678
Signed-off-by: Hirohito Higashi <h.east.727@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
Luke Lollard [Thu, 6 Nov 2025 20:04:38 +0000 (20:04 +0000)]
patch 9.1.1897: Mac: Build failure on Mac OS X 10.6
Problem: Mac: Build failure on Mac OS X 10.6 due to the use of generics
for the sound feature.
Solution: Use the simple, non-generic Objective-C version.
(Luke Lollard)
fixes: #17678
closes: #18681
Co-authored-by: Yee Cheng Chin <ychin.git@gmail.com> Signed-off-by: Luke Lollard <haihige@protonmail.ch> Signed-off-by: Christian Brabandt <cb@256bit.org>
patch 9.1.1894: global_runtime_dir appends /after directory when using XDG
Problem: global_runtime_dir appends /after directory when using XDG
configuration directory (Marius Gedminas).
Solution: Do not append /after to RUNTIME_GLOBAL_AFTER.
Problem: ICCF charity will dissolve
Solution: Update references to Kuwasha
Since the ICCF[1] will be dissolved and handing over to the Kuwasha charity
to continue supporting the Kibaale Children Center in Uganda, update the
uganda.txt help file.
patch 9.1.1892: Not possible to know once Vim is done with sourcing vimrc
Problem: A plugin does not know when startup scripts were already
triggered. This is useful to determine if a function is
called inside vimrc or after (like when sourcing 'plugin/'
files).
Solution: Add the v:vim_did_init variable (Evgeni Chasnovski)
closes: #18668
Signed-off-by: Evgeni Chasnovski <evgeni.chasnovski@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
Problem: Changing permissions fail when using `gp` if the file under
the cursor is not in the current working directory.
Solution: Use the already available `a:curdir` argument and prepend it
to the `<cfile>`, so that the path of the file is correct.
varsidry [Fri, 31 Oct 2025 16:16:11 +0000 (16:16 +0000)]
patch 9.1.1891: g<End> does not move to last non-blank in visual mode
Problem: In visual mode, g<End> does not move to the last non-blank
character when the end of a line is on the same line as the
cursor (after v9.0.1753)
Solution: Move the cursor back by one position if it lands after the
line (varsidry)
fixes: #18657
closes: #18658
Signed-off-by: varsidry <240319857+varsidry@users.noreply.github.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
zeertzjq [Wed, 29 Oct 2025 20:15:01 +0000 (20:15 +0000)]
patch 9.1.1888: Wrong display with cpo+=$, matchparen and wrapped line
Problem: Wrong display with cpo+=$, matchparen and wrapped line.
Solution: Use old cursor line height when scrolling with cpo+=$. Also
fix wrong redraw in non-current window. (zeertzjq)
fixes: #18647
closes: #18662
Signed-off-by: zeertzjq <zeertzjq@outlook.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
John Marriott [Tue, 28 Oct 2025 20:56:47 +0000 (20:56 +0000)]
patch 9.1.1887: string handling in strings.c can be improved
Problem: string handling in strings.c can be improved
Solution: Refactor strings.c and remove calls to STRLEN()
(John Marriott)
This change does:
- In vim_strsave_shellescape() a small cosmetic change.
- In string_count() move the call to STRLEN() outside the while loop.
- In blob_from_string() refactor to remove call to STRLEN().
- In string_from_blob() call vim_strnsave() instead of vim_strsave().
- In vim_snprintf_safelen() call vim_vsnprintf_typval() directly instead
of vim_vsnprintf() which then calls vim_vsnprintf_typval().
- In copy_first_char_to_tv() change to return -1 on failure or the length
of resulting v_string. Change string_filter_map() and string_reduce() to
use the return value of copy_first_char_to_tv().
closes: #18617
Signed-off-by: John Marriott <basilisk@internode.on.net> Signed-off-by: Christian Brabandt <cb@256bit.org>
zeertzjq [Tue, 28 Oct 2025 20:27:19 +0000 (20:27 +0000)]
patch 9.1.1885: Wrong restored cursor pos when re-entering buffer after changes
Problem: Wrong restored cursor position when re-entering a buffer
previously viewed in a window after making changes to the same
buffer in another window.
Solution: Adjust per-window "last cursor" positions on buffer changes.
(zeertzjq)
closes: #18655
Signed-off-by: zeertzjq <zeertzjq@outlook.com> Signed-off-by: Christian Brabandt <cb@256bit.org>