Compare commits

...

396 Commits

Author SHA1 Message Date
dependabot[bot] fd4d87d70e CI: Bump actions/checkout in the github-actions group across 1 directory
Bumps the github-actions group with 1 update in the / directory: [actions/checkout](https://github.com/actions/checkout).


Updates `actions/checkout` from 6 to 6.0.2
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v6...v6.0.2)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: 6.0.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-05 03:16:56 +00:00
Yee Cheng Chin a3db3e70fc Merge remote-tracking branch 'vim/master' 2026-06-04 19:39:30 -07:00
Yasuhiro Matsumoto f1ed84158a patch 9.2.0588: GTK4: drawing area loses focus after closing a menubar popover
Problem:  After a menubar popover (e.g. File, Edit) was opened and then
          dismissed without selecting an item, keyboard focus remained
          outside the drawing area, leaving the cursor stuck in the
          unfocused (outline) shape until the pointer was moved over the
          drawarea (Foxe Chen)
Solution: Install an emission hook on GtkPopover::closed and, when a
          popover that descends from gui.menubar closes, queue an idle
          callback that grabs focus back to the drawing area. The grab
          must be deferred because GTK is still completing the close
          transition when the signal fires (Yasuhiro Matsumoto).

fixes:  #20274
closes: #20291

Co-Authored-by: Claude <noreply@anthropic.com>
Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-06-02 18:36:26 +00:00
Foxe Chen 3dc1ece6af patch 9.2.0587: GTK4: left scrollbar overlaps drawarea
Problem:  GTK4: the drawarea is wrapped in a GtkOverlay with the
          scrollbar form layered on top, so the left scrollbar
          appears over the drawarea instead of beside it.
Solution: Place the drawarea and the scrollbars as siblings inside
          the form widget, removing the GtkOverlay.  Add
          gui_mch_update_scrollbar_size() to query the actual
          scrollbar dimensions and call it from gui_set_shellsize(),
          rename GtkForm to VimForm so the GTK namespace is not used
          (Foxe Chen).

closes: #20375

Signed-off-by: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-06-02 17:44:42 +00:00
nyngwang 18c6b91ca9 runtime(doc): fix a typo in :write-plugin
closes: #20410

Signed-off-by: nyngwang <nyngwang@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-06-02 17:35:54 +00:00
Hirohito Higashi de18ef6284 runtime(doc): Tweak documentation style
closes: #20412

Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-06-01 21:25:04 +00:00
Yasuhiro Matsumoto fd30a736cc runtime(cpp): recognize C++23 stdfloat types
Add float16_t, float32_t, float64_t, float128_t and bfloat16_t from
<stdfloat> as cppType under a new cpp_no_cpp23 guard.

fixes:  #16498
closes: #20367

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-06-01 21:15:41 +00:00
Foxe Chen 2e7833bde9 patch 9.2.0586: Crash with TextPut autocmd when pasting in terminal buffer
Problem:  Crash with TextPut autocmd when pasting in normal mode in a
          terminal buffer.
Solution: Skip the TextPut autocmds when reg and insert are both NULL
          and regname is not '.' (Foxe Chen).

closes: #20407

Signed-off-by: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-06-01 21:08:20 +00:00
Yasuhiro Matsumoto 77b2376769 runtime(c): classify type qualifiers, function specifiers and C23 attributes
Move const, volatile, restrict and _Atomic to a new cTypeQualifier group
and inline and _Noreturn to cFunctionSpec. Add the C23 standard attributes
deprecated, fallthrough, maybe_unused, nodiscard, unsequenced and
reproducible as cStandardAttribute, and reclassify the existing noreturn
into the same group.

The new groups link to cStorageClass, so the default highlighting and any
existing cStorageClass override are unchanged, while allowing finer-grained
customization.

fixes:  #19574
closes: #20368

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-06-01 21:04:08 +00:00
glepnir 64982d6010 patch 9.2.0585: line number wrong after undoing a deletion in quickfix buffer
Problem:  Deleting a quickfix line and undoing it leaves the entry
          pointing one line below where it should.
Solution: Don't shift already cleared entries in qf_mark_adjust.

closes: #20379

Signed-off-by: glepnir <glephunter@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-06-01 20:43:56 +00:00
Borys Lykah bcb8dacb6d runtime(sgf): Include sgf syntax script
closes: #20380

Signed-off-by: Borys Lykah <lykahb@fastmail.com>
Signed-off-by: Doug Kearns <dougkearns@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-06-01 20:36:45 +00:00
Foxe Chen 8f508cdcfb patch 9.2.0584: GTK4: missing UI features
Problem:  GTK4: :popup, menu item show/hide and menu bar state
          updates are not implemented.
Solution: Implement gui_make_popup(), gui_mch_menu_hidden() and
          gui_mch_draw_menubar() (Foxe Chen).

closes: #20393

Signed-off-by: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-06-01 20:26:18 +00:00
glepnir 9fa5f64135 patch 9.2.0583: completion: indent not ignored for fuzzy line completion
Problem:  Indent is not stripped in whole-line completion (CTRL-X
          CTRL-L).
Solution: Skip the matched line's indent for whole-line matches in
          search_for_fuzzy_match (glepnir).

closes: #20405

Signed-off-by: glepnir <glephunter@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-06-01 20:15:35 +00:00
Foxe Chen e2d1c334ee patch 9.2.0582: GTK4: compile error when XFONTSET is defined
Problem:  GTK4: compile error when XFONTSET is defined
          (simozz)
Solution: Undefine FEAT_XFONTSET when GTK4 UI is defined
          (Foxe Chen)

fixes:  #20404
closes: #20406

Signed-off-by: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-06-01 19:46:46 +00:00
Doug Kearns 7895c9e6b8 runtime(vim): Update ftplugin, add heredocs to b:match_words
This depends on chrisbra/matchit#61 for full support of non-alphnum
heredoc markers.

closes: #20399

Signed-off-by: Doug Kearns <dougkearns@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-06-01 19:43:01 +00:00
Yegappan Lakshmanan 07f055f579 patch 9.2.0581: After maximizing and deleting the quickfix buffer, window height is wrong
Problem:  After maximizing and deleting the quickfix buffer, window
          height is wrong (tertium)
Solution: Reset the winfixheight option when a quickfix buffer is
          deleted from a window (Yegappan Lakshmanan)

fixes:  #3378
closes: #20403

Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-31 21:38:30 +00:00
Christian Brabandt e9f8e0fcbe runtime(matchit): Update matchit plugin
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-31 21:34:51 +00:00
Antonio Giovanni Colombo b7d07d3e80 translation(it): Update Italian xxd man page
Signed-off-by: Antonio Giovanni Colombo <azc100@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-31 21:24:16 +00:00
Hirohito Higashi f0cae9d5ab patch 9.2.0580: xxd: binary output is not colored with -R
Problem:  With xxd the -R option colors the hex output but leaves the
          binary output produced by -b uncolored (Boris Verkhovskiy)
Solution: Color the binary (bits) output per byte with the same colors as
          the hex output, update the documentation and add a test
          (Hirohito Higashi).

fixes:  #20385
closes: #20401

Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-31 21:11:55 +00:00
Miguel Barro d69cf0dbcf patch 9.2.0579: :mksession, :mkview and :mkvimrc emit legacy Vim script
Problem:  :mksession, :mkview and :mkvimrc emit legacy Vim script
Solution: Generate vim9 script for those commands (Miguel Barro).

fixes:  #16549
fixes:  #16688
fixes:  #19005
closes: #20152

Co-authored-by: Christian Brabandt <cb@256bit.org>
Signed-off-by: Miguel Barro <miguel.barro@live.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-31 21:03:12 +00:00
Yasuhiro Matsumoto 63a9471e22 patch 9.2.0578: GTK4: :unmenu does not remove entries from the menubar
Problem:  GTK4: gui_mch_destroy_menu() never removed the entry from its
          parent GMenu, so :unmenu was effectively a no-op against the
          visible menubar model.  After "Refresh menu" the Buffers menu
          items doubled because runtime/menu.vim BMShow() re-appended
          Refresh / Delete / Alternate / Next / Previous / -SEP- into a
          still-populated GMenu.  The GAction registered for the item
          and the reference on its submenu GMenu were also leaked.
Solution: Compute the entry's position in the parent GMenu by walking
          the vimmenu_T sibling list, call g_menu_remove(), remove the
          GAction we registered, and release our reference on the
          submenu GMenu (Yasuhiro Matsumoto)

fixes:  #20262
closes: #20314

Co-Authored-by: Claude <noreply@anthropic.com>
Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-31 20:32:40 +00:00
Foxe Chen 568daf65b8 patch 9.2.0577: GTK4: window resizing issues
Problem:  GTK4: window size does not account for client-side decorations
Solution: Compute the client side decoration height from
          gui_resize_shell() (Foxe Chen)

fixes:  #20365
closes: #20388

Signed-off-by: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-31 20:14:59 +00:00
Christian Brabandt 4f1cd5f78a patch 9.2.0576: popup_create() not blocked in secure/sandbox
Problem:  popup_create() is not gated by check_secure(), unlike the
          similar deferred-callback registrars timer_start() and
          feedkeys().  A popup created with a 'time' and 'callback' (or with
          close/filter callbacks) registers code that runs after the secure/sandbox
          context has been left, which is inconsistent with how
          timer_start() and feedkeys() handle the same situation.
Solution: Call check_secure() at the top of popup_create(), matching the
          timer_start()/feedkeys() pattern.

closes: #20400

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-31 20:00:14 +00:00
Patrick Meiser-Knosowski 0878792046 patch 9.2.0575: tests: filetype test for v9.2.0557 can be improved
Problem:  tests: filetype test for v9.2.0557 can be improved
Solution: Use a correct Kawasaki robot AS test file
          (Patrick Meiser-Knosowski)

related: #20370
closes:  #20387

Signed-off-by: Patrick Meiser-Knosowski <knosowski@graeffrobotics.de>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-31 19:52:46 +00:00
thinca b16a9ddc28 patch 9.2.0574: tests: missing test for v9.2.0572
Problem:  tests: missing test for v9.2.0572 (the patch accidentally
          included some additional unwanted changes from #20372)
          (thinca)
Solution: Add additional test for delfunc
          (thinca)

Patch 9.2.0572 fixed ":call d.key()" and ":delfunction d.key" failing
with E1017 in Vim9 script, but only the :call form was covered by a
regression test.  Add Test_delfunction_dict_funcref to exercise both
"delfunction d.key" and "delfunction d['k2']".

closes: #20372

Signed-off-by: thinca <thinca@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-31 19:47:46 +00:00
Peter Kenny 38d9a16eba patch 9.2.0573: Vim9: missing EX_WHOLE on some block keywords
Problem:  Several Vim9 keywords lack EX_WHOLE and can be shortened in
          Vim9 script, inconsistent with endif/enddef/endfor/endwhile/
          endtry which already have it.  The error from :endd in a
          nested function also hardcodes "enddef" instead of reporting
          what the user typed.  fullcommand("ho") returns "horizontal"
          even though :ho is below the documented 3-char minimum.
Solution: Add EX_WHOLE to :class, :def, :endclass, :endinterface,
          :endenum, :public and :static.  In get_function_body() pass
          the user-typed command to the error message.  Force :ho to
          CMD_SIZE in find_ex_command() so fullcommand() reflects the
          modifier minimum.  Extend tests and documentation accordingly
          (Peter Kenny).

fixes:  #20032
closes: #20191

Signed-off-by: Peter Kenny <github.com@k1w1.cyou>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-31 19:16:57 +00:00
K.Takata 905312e0e6 NSIS: Fix 32-bit context menu
The 32-bit context menu was not translated after 8ae45e4202.
NSIS requires a space after a `!`.

closes: #20396

Signed-off-by: K.Takata <kentkt@csc.jp>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-31 18:46:40 +00:00
Hirohito Higashi 09f7fc60d3 patch 9.2.0572: lines disappear with wrapping virtual text after a double-width char
Problem:  With 'nowrap', when a line ends with a double-width character
          exactly at the window width and has wrapping "after" virtual
          text, the lines below disappear and "@@@" is shown.
Solution: Detect that the last character fills the rightmost column using
          its displayed width (win_chartabsize(), so a <Tab> or double-width
          character is handled like a single-width one), and also when it
          overflows the last column.  Also clarify in the help that "wrap"
          only takes effect with the 'wrap' option set.

fixes:   #20384
related: #12213
closes:  #20395

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-31 18:43:42 +00:00
thinca 37089793b8 patch 9.2.0571: Vim9: memory leak in compile_nested_function() on failure
Problem:  compile_nested_function() calls define_function(), which registers
          the new ufunc in func_hashtab with uf_refcount == 1.  For a local
          nested function the caller then reserves a local lvalue and
          generates a FUNCREF instruction; if either step fails, the code
          jumps to the theend label and leaves the ufunc behind with
          refcount 1 and no external reference, leaking it.  This mirrors
          patch 8.2.3951, which fixed the same leak for the "text after
          :enddef" branch a few lines above.
Solution: Call func_ptr_unref() on the ufunc before "goto theend" on both
          failure paths in the local-variable branch (thinca).

closes: #20394

Co-Authored-by: Claude <noreply@anthropic.com>
Signed-off-by: thinca <thinca@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-31 18:28:34 +00:00
Foxe Chen d0fffdab16 patch 9.2.0570: GTK4: mouse wheel scrolling does not work correctly
Problem:  GTK4: mouse wheel scrolling does not work correctly
Solution: Use gui_mch_getmouse() to obtain the pointer position, and
          add GTK_EVENT_CONTROLLER_SCROLL_DISCRETE to the scroll
          controller flags (Foxe Chen).

closes: #20389

Signed-off-by: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-31 18:24:21 +00:00
Christian Brabandt 54ffef7eb8 patch 9.2.0569: out-of-bounds access in libvterm CSI 8 t resize
Problem:  In the bundled libvterm the CSI 8 ; rows ; cols t sequence reaches
          on_resize() without validating its arguments.  Missing, zero or
          negative dimensions cause a negative-size memmove() in
          resize_buffer() and out-of-bounds accesses in set_lineinfo() and
          DECALN, all reachable from output rendered in a terminal window
          (Yukihiro Nakamura).
Solution: Reject missing, zero or negative dimensions before calling
          on_resize().  Also clamp a negative cell width in on_text() as
          hardening for the bundled libvterm.

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-31 14:27:16 +00:00
thinca 868ad62cb8 patch 9.2.0568: pythoncomplete: g:pythoncomplete_allow_import had no effect
Problem:  The security patch 9.2.0561 added a vim.eval() call inside
          Completer.evalsource() to honor g:pythoncomplete_allow_import.
          But the 'vim' module is only imported inside the outer
          vimcomplete() / vimpy3complete() function, not at the script's
          top level, so referring to it from a Completer method raises
          NameError.  The surrounding bare 'except' silently swallows
          the error and leaves allow_imports at 0, meaning the opt-in
          never takes effect -- 'import os' (and any other
          buffer-level import) is always skipped, no candidates are
          produced for 'os.<...>' and
          Test_popup_and_preview_autocommand() fails on the Windows
          CI matrix (Linux skips the test because Python 2 is absent).
Solution: Re-import 'vim' at the top of evalsource() in both
          pythoncomplete.vim and python3complete.vim so the eval reads
          the global, and set g:pythoncomplete_allow_import = 1 in the
          test (it is the opt-in intended for callers that trust the
          buffer contents) (thinca).

closes: #20386

Signed-off-by: thinca <thinca@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-31 12:33:07 +00:00
thinca 2b2dfc4f5a patch 9.2.0567: dict function name allocation failure not handled
Problem:  When defining a dictionary function, the function name string
          is allocated with vim_strnsave() but the result is not
          checked. On allocation failure the dict entry is left with
          type VAR_FUNC and a NULL name, and in the overwrite case the
          previous entry has already been freed before the NULL is
          stored.
Solution: Allocate the name before modifying the dict entry and bail out
          on failure, freeing it on all error paths (thinca)

closes: #20376

Co-Authored-by: Claude <noreply@anthropic.com>
Signed-off-by: thinca <thinca@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-30 18:40:55 +00:00
Mao-Yining 22a78b5de7 runtime(vim9): remove unnecessary temp variable
closes: #20374

Signed-off-by: Mao-Yining <mao.yining@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-30 18:32:28 +00:00
dependabot[bot] 0e8cf80ca1 CI: Bump github/codeql-action
Bumps the github-actions group with 1 update in the / directory: [github/codeql-action](https://github.com/github/codeql-action).

Updates `github/codeql-action` from 4.35.5 to 4.36.0
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/v4.35.5...v4.36.0)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-version: 4.36.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
...

closes: #20377

Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-30 18:24:24 +00:00
zeertzjq 6de842c273 runtime(autoload): consistently align with TABs in README.txt
closes: #20378

Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-30 18:20:47 +00:00
Shuo Wang 3b0a32d7d8 runtime(pilrc): fix typo country names in pilrcCountry syntax list
Corrected "Indian" to "India" for accurate naming.

closes: #20369

Signed-off-by: wangshuo <wangshuo@kylinos.cn>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-30 18:18:41 +00:00
Yohei Kojima 113e507cdd patch 9.2.0566: <C-w>f duplicates window if do_ecmd() is aborted
Problem:  If got_int is true when win_close() is called, it unexpectedly
          fails in the branch that detects failure in apply_autocmds().
          This causes wingotofile in do_window() to duplicate current
          window when do_ecmd() is aborted with got_int.
Solution: Fix do_window() to save the got_int value before trying to
          close the split window (Yohei Kojima).

Steps to reproduce:
 1. run `touch a && touch .a.swp && echo a > b && vim b`
 2. Type `<C-w>f`
 3. In the warning dialogue, type `a` to abort
 4. Current window is duplicated

closes: #20382

Signed-off-by: Yohei Kojima <yk@y-koj.net>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-30 18:07:21 +00:00
Christian Brabandt 63680c6d3d patch 9.2.0565: [security]: out-of-bounds read in update_snapshot()
Problem:  Out-of-bounds read in update_snapshot() when a terminal cell
          fills all VTERM_MAX_CHARS_PER_CELL slots (a base character
          plus five combining marks): the loop over cell.chars[] has no
          upper bound and libvterm leaves the array unterminated when full, so
          it reads past the array and appends out-of-bounds values to a
          buffer sized for only VTERM_MAX_CHARS_PER_CELL characters.
Solution: Bound the loop with i < VTERM_MAX_CHARS_PER_CELL, mirroring
          the loop in handle_pushline() (Christian Brabandt).

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-30 16:34:40 +00:00
Foxe Chen 2c5b383807 patch 9.2.0564: GTK4: tabline does not respond to mouse clicks
Problem:  GTK4: tabline does not respond to mouse clicks
Solution: Connect on_select_tab() to "switch-page" to fire the tabline
          event, and on_tab_reordered() to "page-reordered" to call
          tabpage_move() with the new index (Foxe Chen).

closes: #20362

Signed-off-by: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-29 19:47:24 +00:00
Christoffer Aasted 92510c09ed patch 9.2.0563: GTK3/Wayland: crash with right mouse-button in tabline
Problem:  GTK3/Wayland: crash with right mouse-button in tabline
Solution: Use gui.mainwin and get coordinates (Christoffer Aasted).

GtkNotebook (tabline) is a windowless container widget causing a
nullptr deref inside `gdk_window_get_effective_parent()` as Wayland
lacks a surface to anchor to.

fixes:  #18864
closes: #20348

Signed-off-by: Christoffer Aasted <dezzadk@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-29 19:39:04 +00:00
Borys Lykah dda45ba88f patch 9.2.0562: filetype: SGF files are not recognized
Problem:  filetype: SGF files are not recognized
Solution: Detect *.sgf as sgf filetype
          (Borys Lykah)

Reference:
https://www.red-bean.com/sgf/index.html

closes: #20349

Signed-off-by: Borys Lykah <lykahb@fastmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-29 19:23:27 +00:00
Maxim Kim 61ad44f4af runtime(odin): remove const and opaque keywords
They don't exist in odin lang.

closes: #20364

Signed-off-by: Maxim Kim <habamax@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-29 19:19:38 +00:00
Christian Brabandt 4b850457e1 patch 9.2.0561: [security]: possible code execution with python3complete
Problem:  [security]: possible code execution with python3complete
Solution: Disable execution of import/from statements

Github Security Advisory:
https://github.com/vim/vim/security/advisories/GHSA-52mc-rq6p-rc7c

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-29 19:08:20 +00:00
Christoffer Aasted 69f402e97f patch 9.2.0560: filetype: busybox shebang lines are not recognized
Problem:  filetype: busybox shebang lines are not recognized
Solution: Add filetype detection pattern for #!busybox sh, detect
          ash as shell in the shebang lines (Christoffer Aasted).

closes: #20358

Signed-off-by: Christoffer Aasted <dezzadk@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-29 18:31:35 +00:00
Wu, Zhenyu 73e619d699 patch 9.2.0559: filetype: Kaitai struct files are not recogonized
Problem:  filetype: Kaitai struct files are not recogonized
Solution: Detect *.ksy files as yaml filetype (Wu, Zhenyu)

Reference:
https://doc.kaitai.io/

closes: #20353

Signed-off-by: Wu, Zhenyu <wuzhenyu@ustc.edu>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-29 18:25:25 +00:00
Maxim Kim 339b523657 runtime(colors): update colorschemes
closes: #20363

Signed-off-by: Maxim Kim <habamax@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-29 18:22:32 +00:00
Patrick Meiser-Knosowski f31407f9fa runtime(karel): Add indent plugin for Karel
closes: #20357

Signed-off-by: Patrick Meiser-Knosowski <knosowski@graeffrobotics.de>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-29 18:19:39 +00:00
Wu, Zhenyu c83d2f888e patch 9.2.0558: filetype: Popcap Reanimation files are not recognized
Problem:  filetype: Popcap Reanimation files are not recognized
Solution: Recognize *.reanim files as xml filetype (Wu, Zhenyu).

Reference:
https://github.com/wszqkzqk/PvZ-Portable

closes: #20354

Signed-off-by: Wu, Zhenyu <wuzhenyu@ustc.edu>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-29 18:10:39 +00:00
Mao-Yining bc2141d27d runtime(2html): Convert to Vim9 script
closes: #19915

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: fritzophrenic <fritzophrenic@gmail.com>
Co-authored-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Mao-Yining <mao.yining@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-29 18:02:01 +00:00
KnoP-01 dec3d6c7da patch 9.2.0557: filetype: Kawasaki Robots files are not recognized
Problem:  filetype: Kawasaki Robots files are not recognized
Solution: Detect *.pg as kawasaki_as filetype, add filetype detection
          for *.as as atlas or kawasaki_as filetype (KnoP-01).

In Kawasaki robots (https://kawasakirobotics.com/products-robots/)
AS language

*.pg is the extention for a program file and
*.as is for a complete backup.

closes: #20370

Signed-off-by: KnoP-01 <knosowski@graeffrobotics.de>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-29 17:54:57 +00:00
Yasuhiro Matsumoto 23b4b55364 patch 9.2.0556: GTK4: scrollbars not shown and do not respond to clicks
Problem:  GTK4: scrollbars not shown and do not respond to clicks
          (Steven A. Falco)
Solution: Use GTK_IS_SCROLLBAR and gtk_scrollbar_get_adjustment()
          instead of the GtkRange equivalents, override GtkForm's
          contains() to return FALSE (Yasuhiro Matsumoto).

fixes:  #20307
closes: #20326

Co-Authored-by: Claude <noreply@anthropic.com>
Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-28 21:45:05 +00:00
KnoP-01 1e45fb1a7e runtime(karel): Add missing syntax items
Adds
- 'OF' for the SELECT instruction
- 'TO' and 'DOWNTO' for the FOR instruction

closes: #20356

Signed-off-by: KnoP-01 <knosowski@graeffrobotics.de>
Signed-off-by: Kirill Morozov <kirill@robotix.pro>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-28 21:32:25 +00:00
John Marriott 8e7e5d5488 patch 9.2.0555: too many strlen() in ex_substitute()
Problem:  too many strlen() in ex_substitute()
Solution: Use string_T type instead of recomputing the length
          (John Marriott).

closes: #20336

Signed-off-by: John Marriott <basilisk@internode.on.net>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-28 21:26:19 +00:00
Foxe Chen 81d42cf1aa patch 9.2.0554: GTK4: memory leak in free_menu()
Problem:  GTK4: memory leak in free_menu()
Solution: Free the label (Foxe Chen)

closes: #20343

Signed-off-by: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-28 21:17:23 +00:00
Christian Brabandt 93d177cd2b patch 9.2.0553: runtime(netrw): netrw rejects hostnames containing _
Problem:  runtime(netrw): netrw rejects hostnames containing _
          (lilydjwg)
Solution: Relax the restriction and allow the underscore

fixes: #20344

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-28 20:56:48 +00:00
Yasuhiro Matsumoto 99b51cf121 patch 9.2.0552: GTK4: F10 does nothing when the menubar is hidden
Problem:  GTK4: F10 does nothing when the menubar is hidden
          (lilydjwg)
Solution: Handle F10 explicitly (Yasuhiro Matsumoto).

In GTK3 (and on Windows) pressing F10 brings up the menu even when
the menubar is hidden via 'go-=m'.  The GTK4 path passed F10 straight
through to Vim, so users who hide the menubar lost a way to reach it
via the keyboard.

If F10 is not currently mapped, pop up the full menubar GMenu model
as a transient GtkPopoverMenu at the top of the drawing area.  A
user mapping still wins, so this only adds behaviour when F10 would
otherwise be inert.

fixes:  #20259
closes: #20355

Co-Authored-by: Claude <noreply@anthropic.com>
Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-28 20:41:14 +00:00
redavy b9bba99712 patch 9.2.0551: filetype: Tolk files are not recognized
Problem:  filetype: Tolk files are not recognized
Solution: Detect *.tolk files as tolk filetype, include a syntax and
          filetype plugin (redavy)

Tolk is a new-generation language for writing smart contracts on TON
blockchain, which is #1 in speed among other chains.

Reference:
https://docs.ton.org/blockchain-basics/tolk/overview

closes: #20320

Signed-off-by: redavy <hello.redavy@proton.me>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-28 20:36:04 +00:00
Foxe Chen 880e06136b patch 9.2.0550: GTK4: 'mousehide' unhides cursor when switching tabs
Problem:  GTK4: 'mousehide' unhides cursor when switching tabs
Solution: Only unide if the mouse actually moved (Foxe Chen).

fixes:  #20346
closes: #20347

Signed-off-by: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-28 20:20:31 +00:00
glepnir 179f9efc7e patch 9.2.0549: Cursor wrong after autoindent strip is skipped
Problem:  cursor lands on the wrong line when a <Cmd> mapping or autocmd
          modifies lines during insert and the strip is skipped
          (after v9.2.0510)
Solution: Restore cursor to tpos when skipwhite skips the strip, instead
          of leaving it at end_insert_pos (glepnir).

related: #20290
closes:  #20332

Signed-off-by: glepnir <glephunter@gmail.com>
Signed-off-by: Kristijan Husak <husakkristijan@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-28 20:13:48 +00:00
Foxe Chen af8845e3af patch 9.2.0548: GTK4: terminal and pty job output is not processed
Problem:  GTK4: terminal and pty job output is not processed
Solution: When there is at least one channel with the keep_open flag,
          arm a 20ms timer that calls channel_handle_events() and
          parse_queued_messages(), matching the behaviour of the GTK2/3
          backend (Foxe Chen).

fixes:  #20345
closes: #20350

Signed-off-by: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-28 19:29:55 +00:00
Hirohito Higashi 44dcad20f2 patch 9.2.0547: "%v" in 'errorformat' is affected by 'tabstop'
Problem:  The "%v" item in 'errorformat' interprets the reported
          screen column using the buffer's 'tabstop', so the cursor
          jumps to the wrong column when 'tabstop' is not 8
          (vimpostor).
Solution: When resolving a "%v" column, always count a <tab> as 8
          screen columns, independent of 'tabstop', matching the
          column numbers reported by compilers; keep the multi-byte
          handling.  Also use "%v" in the gcc compiler file and
          update the documentation (Hirohito Higashi).

fixes:  #20321
closes: #20359

Co-Authored-By: vimpostor <21310755+vimpostor@users.noreply.github.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-28 19:18:38 +00:00
Yasuhiro Matsumoto 627e4355ac patch 9.2.0546: configure: GTK4 build requires GTK >= 4.10
Problem:  configure: GTK4 build requires GTK >= 4.10
Solution: Update configure script and require at least GTK 4.10 version
          (Yasuhiro Matsumoto).

The GTK4 GUI uses GtkFontDialog, GtkFileDialog and GtkAlertDialog,
all introduced in GTK 4.10. Without this bump, configure passes on
systems with older GTK4 (e.g. Debian Bookworm ships 4.8) and the
build fails later in gui_gtk4.c with unknown type / implicit
function declaration errors.

fixes:  #20340
closes: #20360

Co-Authored-by: Claude <noreply@anthropic.com>
Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-28 18:57:20 +00:00
Enrico Maria De Angelis 9d5a20e440 runtime(doc): Clarify the use of <Plug> mappings
related: #6705
closes:  #20351

Signed-off-by: Enrico Maria De Angelis <enricomaria.dean6elis@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-28 18:31:33 +00:00
Shad 7a027846bf patch 9.2.0545: popup: blending uses hardcoded fallback colors
Problem:  Popup with opacity fades to black regardless of the colorscheme
          or 'background' option.  With a light colorscheme (or the
          default with background=light), lower opacity values darken the
          popup and it no longer matches the Normal background.
Solution: Compute fallback foreground and background colors from
	  guifg/guibg, ctermfg/ctermbg, or deduce from the 'background' option,
	  and use them in the popup blending paths instead of hardcoded
          white/black (Shad).

closes: #20285

Signed-off-by: Shad <shadow.walker@free.fr>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-27 20:37:25 +00:00
Yasuhiro Matsumoto f85892e39e patch 9.2.0544: GTK4: window blank after a resize or drag
Problem:  GTK4: window blank after a resize or drag
          (Steven A. Falco)
Solution: In drawarea_resize_cb() keep the backing surface in sync with
          the drawing area, preserving the old contents. Stop touching
          the surface in gui_mch_set_text_area_pos().
          Debounce gui_resize_shell() so it runs once the drag stream
          settles and update_screen() can paint (Yasuhiro Matsumoto).

related: #20307
closes:  #20327

Co-Authored-by: Claude <noreply@anthropic.com>
Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-27 20:12:19 +00:00
Hirohito Higashi caba9110aa patch 9.2.0543: Vim9: wrong error when redeclaring a typed variable
Problem:  In a :def function, redeclaring an existing variable with a
          type annotation (e.g. "var x: number = 1" used twice) reports
          "E488: Trailing characters" instead of the expected
          "E1017: Variable already declared".
Solution: Report E1017 when the redeclaration uses a "var", "final" or
          "const" command; keep E488 only for a type specified in an
          assignment that has no declaration keyword (Hirohito Higashi).

fixes:  #20337
closes: #20341

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-27 19:29:16 +00:00
Doug Kearns 5333d9b670 runtime(algol68): Update syntax, always highlight prelude symbolic operators
- Remove `g:algol68_symbolic_operators` config variable, these operators
  are now always highlighted along with bold word operators
- Remove GSL `/-` operator, this was a typo in the implementation and
  now fixed in the latest Genie release as `/=`

closes: #20195

Signed-off-by: Doug Kearns <dougkearns@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-27 19:19:12 +00:00
Antonio Giovanni Colombo 915e68e210 translation(it): Update Italian manpage
Signed-off-by: Antonio Giovanni Colombo <azc100@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-26 21:16:30 +00:00
Christian Brabandt 84e6175b55 patch 9.2.0542: tests: test_codestyle fails
Problem:  tests: test_codestyle fails
          (after v9.2.0541)
Solution: Replace tabs by spaces

related: #20253

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-26 21:12:11 +00:00
Peter Kenny 207039097a patch 9.2.0541: Vim9: endclass/endenum/endinterface can give errors
Problem:  Vim9: ":endclass", ":endenum" and ":endinterface" can give a
          "command cannot be shortened" error, because the full-name
          check compares against the line start instead of the command
          word.
Solution: Skip a leading colon and white space before checking the end
          command name, update tests (Peter Kenny).

related: #20032
related: #20191
closes:  #20253

Signed-off-by: Peter Kenny <github.com@k1w1.cyou>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-26 19:13:27 +00:00
K.Takata c3e975df47 patch 9.2.0540: tests: Test_mswin_event_mouse is flaky
Problem:  tests: Test_mswin_event_mouse is flaky
Solution: Mark as flaky (Ken Takata)

Test_mswin_event_mouse is flaky in console:
https://github.com/vim/vim-win32-installer/issues/446#issuecomment-4538212367

closes: #20331

Signed-off-by: K.Takata <kentkt@csc.jp>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-26 18:46:35 +00:00
Martin Schwan 2df68c8e4b patch 9.2.0539: filetype: too many Bitbake include files are recognized
Problem:  filetype: too many Bitbake include files are recognized
          (Brahmajit Das, after v9.1.1732)
Solution: Tighten the pattern to detect BitBake include files, update
          tests (Martin Schwan).

Be more strict when detecting BitBake inc files. In particular, only
match include keywords and variable assignments at the beginning of a
line (excluding whitespace).

Use non-capturing groups to slightly improve performance.

Use regex or-operators to exactly match BitBake assignment operators.
The previous expression would falsely match

    FOO .=. "bar"

, which is not valid BitBake syntax. The new capturing group is more
specific and matches only valid assignments.

fixes:  #20288
closes: #20335

Signed-off-by: Martin Schwan <m.schwan@phytec.de>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-26 18:41:11 +00:00
Christian Brabandt e99b4d0214 runtime(doc): Document ft_recommended_style
related: #20036

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-26 18:34:06 +00:00
glepnir e8d7a40b98 patch 9.2.0538: Cannot keep leading whitespace in %{} statusline expr
Problem:  A leading space in the result of a %{} item is sometimes
          stripped, and an all-digit result is converted to a number.
Solution: Add %0{} atom which inserts the expression result verbatim
          (glepnir)

fixes:  #3898
closes: #20315

Signed-off-by: glepnir <glephunter@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-25 17:41:13 +00:00
Christian Brabandt c175ce86fa runtime(spec): Drop obsolete s:GetRelVer() function
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-25 17:21:43 +00:00
Yasuhiro Matsumoto b748f4b2f0 patch 9.2.0537: GTK4: mouse popup menu does not show up at mouse pointer
Problem:  GTK4: mouse popup menu does not show up at mouse pointer,
          Drawing area blanks while popover is open
          (lilydjwg, after v9.2.0501)
Solution: Query the pointer position, make the popover parented to the
          surrounding GtkOverlay  and build it from buttons instead of a
          GMenu model(Yasuhiro Matsumoto)

fixes:  #20255
closes: #20260

Co-Authored-by: Claude <noreply@anthropic.com>
Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-25 17:08:59 +00:00
Christian Brabandt 7e55dae2fe patch 9.2.0536: tests: Test_invalid_args() fails on GTK4 without xterm_clipboard
Problem:  tests: Test_invalid_args() fails on GTK4 builds when
          xterm_clipboard is not enabled
Solution: Add has('xterm_clipboard') check to the test, while at it,
          also document the --display argument.

closes: #20318

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-25 16:59:58 +00:00
Doug Kearns dfdeba16d7 runtime(vim): Update base syntax, fix mismtatched :def return type
Anchor the return type separator ':' with a lookbehind as the relevant
nextgroup options use skipwhite.

closes: #20319

Signed-off-by: Doug Kearns <dougkearns@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-25 16:33:27 +00:00
Andrey Starodubtsev 3a90b2ba8e patch 9.2.0535: tests: matchit plugin is not tested
Problem:  tests: matchit plugin is not tested
Solution: Add test_plugin_matchit, improve b:match_words for the html
          filetype plugin (Andrey Starodubtsev)

`b:match_words` which contains patterns used by `matchit` plugin to find
tag's counterpath, is fixed so that matching happens using the whole
tag, not just its first letter.

Also, it allows to find matching tag in case if there are spaces or
attributes after tag name.

fixes:  chrisbra/matchit#51
closes: #20313

Signed-off-by: Andrey Starodubtsev <andrey.starodubtsev@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-25 16:29:23 +00:00
Muraoka Taro 14c6730a39 patch 9.2.0534: GTK UI does not support fullscreen mode
Problem:  GTK UI does not support fullscreen mode
Solution: Add support for fullscreen (guioptions+=s) mode
          (Muraoka Taro).

closes: #20303

Co-authored-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Muraoka Taro <koron.kaoriya@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-25 15:54:20 +00:00
Hirohito Higashi bc7805323f patch 9.2.0533: '[ mark moved to end of inserted text after CTRL-R CTRL-P paste
Problem:  After CTRL-R CTRL-P (or CTRL-R CTRL-O) pastes a register
          into Insert mode, a follow-up edit such as backspace makes
          stop_arrow() rewrite Insstart with the post-paste cursor
          position.  As a result the '[ mark points at the end of the
          inserted text instead of its start  (agguser, after 9.2.0384)
Solution: In stop_arrow(), only pull Insstart back when the cursor
          moved above the previous Insstart, so a line-start backspace
          can still save the joined range (#20031) without disturbing
          the start position for inserts that advance the cursor
          (Hirohito Higashi).

related: #20031
fixes:   #20130
closes:  #20322

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-25 15:36:30 +00:00
Muraoka Taro e323740b56 patch 9.2.0532: GTK: preedit font size is wrong for fractional point sizes
Problem:  GTK: preedit font size is wrong for fractional point sizes
Solution: Compute the font size as a double and round to the nearest
          integer (Muraoka Taro).

closes: #20316

Co-authored-by: Christian Brabandt <cb@256bit.org>
Signed-off-by: Muraoka Taro <koron.kaoriya@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-25 15:26:08 +00:00
Muraoka Taro 3b8ac8f8a4 CI: Split platform specific CI configurations into separated files
- ci-linux.yml for Linux
- ci-linux_asan.yml for Linux ASan
- ci-macos.yml for macOS
- ci-windows.yml for Windows

closes: #20325

Signed-off-by: Muraoka Taro <koron.kaoriya@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-25 15:23:47 +00:00
K.Takata 98401467a9 patch 9.2.0531: tests: Test_cd_completion() fails on MS-Windows with E344
Problem:  tests: Test_cd_completion() fails on MS-Windows with E344
Solution: Catch E344 in addition to E472 (Ken Takata)

Sometimes, Test_cd_completion fails with E344:
https://github.com/vim/vim-win32-installer/issues/446#issuecomment-4526975345

closes: #20328

Signed-off-by: K.Takata <kentkt@csc.jp>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-25 15:16:56 +00:00
Christian Brabandt 010a71bb60 runtime(zig): Update upstream repo
related: #20312

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-25 15:15:09 +00:00
Hirohito Higashi 24678d31c8 patch 9.2.0530: WinBar row vertical separator not refreshed on window change
Problem:  After the current window changes, the vertical separator cell
          on the WinBar row keeps its previous VertSplit / VertSplitNC
          highlight.  Content rows and status line rows of the same
          window are refreshed correctly; only the WinBar row is left
          behind, so the WinBar's separator no longer matches the
          surrounding cells (Mao-Yining)
Solution: Include the WinBar row in draw_vsep_win() when redrawing
          from the top of the window.  When called with row == 0 the
          loop now starts at wp->w_winrow (the WinBar row when present)
          instead of W_WINROW(wp) (the content start), so the separator
          highlight on the WinBar row is updated together with the rest
          of the window (Hirohito Higashi).

fixes:  #20304
closes: #20310

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-24 17:43:32 +00:00
bennyyip 53d97c93b7 runtime(compiler): Remove wrong escape in zig compiler files
closes: #20312

Signed-off-by: bennyyip <yebenmy@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-24 17:41:58 +00:00
Yasuhiro Matsumoto 06ef3a54bf patch 9.2.0529: GTK4: clipboard returns empty after a foreign app takes the selection
Problem:  GTK4: clipboard read returns empty after a foreign app takes
          the selection (lilydjwg, after v9.2.0501)
Solution: Skip the set_content call unless gdk_clipboard_is_local()
          still says we own the clipboard (Yasuhiro Matsumoto).

clipboard_changed_cb calls clip_lose_selection() which cascades into
clip_mch_lose_selection(), and that unconditionally called
gdk_clipboard_set_content(clipboard, NULL).  When the signal fires
because *another* app took the selection, this re-claims ownership
with NULL content, so the next gdk_clipboard_read_text_async() returns
empty and the user sees "Nothing in register *".

fixes:  #20256
closes: #20261

Co-Authored-by: Claude <noreply@anthropic.com>
Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-24 17:29:04 +00:00
Christian Brabandt 31c739458a patch 9.2.0528: possible overflow in XIM resource handling
Problem:  possible overflow in XIM resource handling
          (Venukamatchi)
Solution: use vim_strncpy() with the buffer size

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-24 16:52:53 +00:00
Christian Brabandt 07c8b4712f patch 9.2.0527: Possible double free in fill_partial_and_closure()
Problem:  Possible double free in fill_partial_and_closure()
          (xuqing yang)
Solution: Let the caller handle the free()

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-24 15:25:03 +00:00
John Marriott 2c23dde0b0 patch 9.2.0526: missing out-of-memory check in ex_substitute()
Problem:  missing out-of-memory check in ex_substitute()
Solution: Bail out in case of out-of-memory (John Marriott)

closes: #20308

Signed-off-by: John Marriott <basilisk@internode.on.net>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-24 09:08:59 +00:00
zeertzjq 6c8e125395 patch 9.2.0525: spell: memory leak in spell_read_dic()
Problem:  spell: memory leak in spell_read_dic() (after 9.2.0524).
Solution: Free "pc" before breaking out of the loop (zeertzjq).

closes: #20309

Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-24 09:03:59 +00:00
Christian Brabandt e60d4b4ff3 runtime(doc): update netrws "mt" command description
fixes: #20302

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-24 08:57:49 +00:00
Yasuhiro Matsumoto 9a920e8254 patch 9.2.0524: spell: buffer overflow with many affix or compound flags
Problem:  spell: a word in a .dic file with many postponed prefix or
          compound flags overflows the fixed-size store_afflist[MAXWLEN]
          buffer in get_pfxlist() and get_compflags().
Solution: Add bounds checks (Yasuhiro Matsumoto).

closes: #20286

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-23 19:56:10 +00:00
Antonio Giovanni Colombo 5e3056ee83 translation(it): Update Italian manpage
Signed-off-by: Antonio Giovanni Colombo <azc100@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-23 19:21:42 +00:00
Christian Brabandt fccc2adc98 patch 9.2.0523: tests: no test for using shellescape() in combination with :!
Problem:  tests: no test for using shellescape() in combination with :!
Solution: Add a test that checks runtime files for using wrong
          combination of shellescape() with ! ex command

This has lead to a few security relevant issues, so add a test that
checks all runtime files for any ! followed by a shellescape() that does
not use the {special} arg.

related: Commit: 3fb5e58fbc (patch 9.2.0479:
         [security]: runtime(tar): command injection in tar plugin)

closes: #20286

Supported by AI

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-23 19:05:28 +00:00
John Marriott da1f41d5d3 patch 9.2.0522: event_nr2name() in autocmd.c can be improved
Problem:  event_nr2name() in autocmd.c can be improved
Solution: Refactor it so that event_nr2name() returns a string_T type
          (John Marriott).

Additionally:
- change the define to an enum.
- in function auto_next_pat(), move some variables closer to where they
  are used; rename s to fmt along the way.

closes: #20272

Signed-off-by: John Marriott <basilisk@internode.on.net>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-23 19:00:12 +00:00
Yasuhiro Matsumoto b34fa59abb patch 9.2.0521: GTK4: cannot resize shell after the window is shown
Problem:  GTK4: cannot resize shell after the window is shown
          (Maxim Kim, after v9.2.0501)
Solution: Always apply the requested size with
          gtk_window_set_default_size(), regardless of realized state
          (Yasuhiro Matsumoto).

fixes:  #20264
closes: #20269

Co-Authored-by: Claude <noreply@anthropic.com>
Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-23 18:49:43 +00:00
Shad d7e6ce7a76 patch 9.2.0520: Reversed text opacity in popup when termguicolor is set
Problem:  When termguicolor is set, popup opacity seems reversed
          for the underlying text: when opacity go from 1 to 99,
          the greater opacity is, the more underlying text is readable.
Solution: Invert popup_color and base_fg when calling blend_colors
          (Shad).

fixes:  #20283
closes: #20284

Signed-off-by: Shad <shadow.walker@free.fr>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-23 18:43:09 +00:00
Foxe Chen 3a54de8f44 patch 9.2.0519: GTK4: GUI tabline is not displayed correctly
Problem:  GTK4: GUI tabline is not displayed correctly, and double
          increments the index in the for() loop
Solution: Drop the additional increment (Foxe Chen)

closes: #20299

Co-Authored-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-23 18:35:07 +00:00
Yasuhiro Matsumoto f42ce78f77 patch 9.2.0518: GTK4: input method cannot compose text
Problem:  GTK4: input method cannot compose text
          (lilydjwg, after v9.2.0501)
Solution: Render the over-the-spot preedit with a GtkPopover instead of
          a separate toplevel, so the compositor keeps
          keyboard focus on the drawing area and does not disable
          text-input-v3; attach the key controller to gui.drawarea and
          filter key events manually with gtk_im_context_filter_keypress()
          (Yasuhiro Matsumoto)

fixes:  #20257
closes: #20266

Co-Authored-by: lilydjwg <lilydjwg@gmail.com>
Co-authored-by: Claude <noreply@anthropic.com>
Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-23 18:25:16 +00:00
Yegappan Lakshmanan cb8510d470 patch 9.2.0517: quickfix: can set quickfixtextfunc in restricted/sandbox mode
Problem:  quickfix: can set quickfixtextfunc in restricted/sandbox mode
          (tacdm)
Solution: Disallow setting the quickfixtextfunc option from a sandbox
          and restricted mode (Yegappan Lakshmanan).

closes: #20305

Co-Authored-by: tacdm
Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-23 18:21:22 +00:00
zeertzjq ecba601e3f runtime(doc): fix a few small problems
closes: #20287

Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-23 16:07:16 +00:00
Foxe Chen e3cb9655d7 patch 9.2.0516: socketserver: spurious error when servername is taken
Problem:  socketserver: when searching for a free socket path,
          socketserver_get_path() emits an error for each name that is
          already in use (after v9.2.0512).
Solution: Add an "ignore" argument to socketserver_get_path() to
          suppress the error (Foxe Chen).

Signed-off-by: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>

Signed-off-by: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-23 15:55:28 +00:00
Hirohito Higashi 6574102fb4 runtime(doc): Tweak documentation style
closes: #20296

Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-23 15:47:32 +00:00
dependabot[bot] 37223f47b1 CI: Bump github/codeql-action
Bumps the github-actions group with 1 update in the / directory: [github/codeql-action](https://github.com/github/codeql-action).

Updates `github/codeql-action` from 4.35.4 to 4.35.5
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/v4.35.4...v4.35.5)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-version: 4.35.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
...

closes: #20297

Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-22 23:12:27 +00:00
zeertzjq 3d0a6073e5 patch 9.2.0515: virtualedit=insert doesn't work during change operation
Problem:  virtualedit=insert doesn't work during change operation
          (after 6.1.014).
Solution: Make virtual_op only affect virtualedit=block (zeertzjq).

related: neovim/neovim#35391
closes:  #20298

Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-22 23:08:29 +00:00
Foxe Chen ea71d5bb01 patch 9.2.0514: GTK4: build errors when socketserver is enabled
Problem:  GTK4: build errors when socketserver is enabled
          (after v9.2.0512)
Solution: Drop unused functions (Foxe Chen)

closes: #20293

Signed-off-by: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-22 22:18:03 +00:00
Christian Brabandt 25e4e46c58 patch 9.2.0513: [security]: memory safety issues in spellfile.c
Problem:  [security]: memory safety issues in spellfile.c
          (tacdm)
Solution: Add recursion limit to read_tree_node(), add length limit
          check in tree_count_words(), use alloc_clear() in
          spell_read_tree().

Github Security Advisory:
https://github.com/vim/vim/security/advisories/GHSA-3h95-3962-mmvf

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-22 22:10:57 +00:00
Foxe Chen e9c793bebc patch 9.2.0512: clientserver uses binary protocol
Problem:  clientserver feature uses binary protocol and is hard
          to understand
Solution: Rewrite the code based on channels and JSON messages
          (Foxe Chen).

closes: #19782

Signed-off-by: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-22 20:12:01 +00:00
Yasuhiro Matsumoto 1d727b6f74 patch 9.2.0511: configure: when GTK4 is used also links in X11 libs
Problem:  configure: when GTK4 is used also links in X11 libs
          (Reilly Brogan)
Solution: Disable linking against X11 libraries when GTK4 GUI is to be
          used (Yasuhiro Matsumoto)

GTK4 does not use any X11 APIs directly; the X11 backend is loaded by
GTK4 at runtime. Force with_x=no when --enable-gui=gtk4 so configure
does not probe for libICE/libSM/libX11/libXt/libXdmcp/libXpm, and so
packagers do not pull those into build dependencies. Also skip the
XSMP X11/SM/SMlib.h header check when X11 is disabled, since USE_XSMP
itself requires HAVE_X11.

fixes:  #20268
closes: #20289

Co-authored-by: Claude <noreply@anthropic.com>
Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-22 18:09:33 +00:00
glepnir e3dedac77b patch 9.2.0510: setline() mapping may trigger autoindent
Problem:  setline() insert mode mapping may trigger autoindent,
          corrupting the newly inserted line content (Evgeni Chasnovski)
Solution: Only strip autoindent whitespace when the rest of the line is
          all whitespace (glepnir).

fixes:  #19363
closes: #20290

Signed-off-by: glepnir <glephunter@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-22 17:59:23 +00:00
Christian Brabandt c7645fcda5 runtime(doc): add a few references to mouse behaviour
fixes: #20281

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-22 17:44:50 +00:00
Christian Brabandt 44a1a6a331 runtime(doc): Update wrong shellescape() example
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-21 20:15:59 +00:00
Antonio Giovanni Colombo 0b14d6de60 translation(it): Update Italian translation
Signed-off-by: Antonio Giovanni Colombo <azc100@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-21 20:13:42 +00:00
Muraoka Taro daad5ea905 patch 9.2.0509: term.c: compile error when LOG_TRN is enabled
Problem:  compile error when LOG_TRN is enabled
Solution: Use valid arguments (Muraoka Taro)

closes: #20278

Signed-off-by: Muraoka Taro <koron.kaoriya@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-21 20:05:14 +00:00
Yasuhiro Matsumoto b54e57ee54 patch 9.2.0508: completion: cannot complete user cmd :K with 'ignorecase'
Problem:  completion: cannot complete user cmd :K with 'ignorecase'
          (rendcrx)
Solution: Skip the short-circuit when 'ignorecase' is set
          (Yasuhiro Matsumoto)

The set_cmd_index() short-circuit for the :k command treats ":k<X>" as
":k {X}" (mark argument), which makes ":kz<Tab>" never reach the
command-name expansion path. With 'ignorecase' the same prefix on other
letters (":gz<Tab>") completes a user command like :Gz, so the result is
inconsistent. Skip the short-circuit when 'ignorecase' is set; default
behaviour is preserved so the existing :k tests still pass.

fixes:  #20241
closes: #20275

Co-authored-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-21 19:57:06 +00:00
nyngwang 6845c7a63d runtime(doc): fix a typo in :map-local
closes: #20276

Signed-off-by: nyngwang <nyngwang@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-21 19:54:22 +00:00
Christian Brabandt 1dfaeb4fa3 runtime(doc): re-generate vim.man
related: #20186

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-21 19:52:00 +00:00
Hirohito Higashi 06a2c7105c patch 9.2.0507: Vim9 class: public/protected member name clash uses same error
Problem:  When a public member and a protected member in a Vim9
          class have the same name (differing only in the leading '_'),
          Vim reports E1369 "Duplicate variable", which is also used for
          plain duplicate definitions.  Users cannot tell from the
          message whether the conflict is the public/protected naming
          rule or a real duplicate.
Solution: Add a dedicated error E1406 "Public and protected member
          have the same name" and emit it only when the name clash is
          between a public and a protected member.  Keep E1369 for
          genuine duplicate variable definitions (Hirohito Higashi).

fixes:  #20240
closes: #20277

Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-21 19:45:59 +00:00
Guilherme Puida Moreira ff9fd819ae runtime(debversions): Add stonking (26.10) as Ubuntu release name
closes: #20282

Signed-off-by: Guilherme Puida Moreira <guilherme@puida.xyz>
Signed-off-by: James McCoy <jamessan@jamessan.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-21 19:34:20 +00:00
Hirohito Higashi d0af3bcee1 runtime(doc): fix help tags for removed/reused error codes
Problem:  Several error codes (E614, E1319, E1321, E1323, E1400, E1401,
          E1402, E1406) were removed from errors.h in v9.1.0600 but
          their *Ennn* tags remained in the help files, so :help Ennn
          jumps to obsolete locations.  E1395 was later reused with a
          new meaning ("Using a null class") in v9.1.1119, but its tag
          is still placed in the type-alias section.
Solution: Remove the stale *Ennn* tags from the help files.  Move
          *E1395* to the vim9.txt null-values section to match its
          current meaning.  Also fix the indentation of *E1411*.
          Regenerate runtime/doc/tags.

closes: #20279

Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-21 19:08:10 +00:00
Cyril Roelandt 85eb099bf2 runtime(mbsync): Properly handle values for the "Sync" keyword
This has been manually tested with my personal mbsync configuration and
with the following test file:

    $ cat test.mbsyncrc
    Channel Foo
    # None may not be combined with other operations
    Sync None
    Sync None New
    # First form
    Sync Pull
    Sync Push
    Sync New
    Sync Old
    Sync Upgrade
    Sync ReNew
    Sync Gone
    Sync Delete
    Sync Flags
    Sync Invalid
    # Second form
    Sync PullNew
    Sync PullOld
    Sync PullUpgrade
    Sync PullReNew
    Sync PullGone
    Sync PullDelete
    Sync PullFlags
    Sync PullFull
    Sync PullAll
    Sync PullInvalid
    Sync PushNew
    Sync PushOld
    Sync PushUpgrade
    Sync PushReNew
    Sync PushGone
    Sync PushDelete
    Sync PushFlags
    Sync PushFull
    Sync PushAll
    Sync PushInvalid
    Sync NewInvalid
    # Multiple operations
    Sync New Upgrade Gone Flags
    # Mix of the two styles (an example from the mbsync manpage)
    Sync PullNew PullGone Push
    # Syntaxically correct, though they will raise a warning in mbsync:
    Sync PullNew Pull
    Sync PullNew Gone Push

closes: #20243

Signed-off-by: Pierrick Guillaume <pguillaume@fymyte.com>
Signed-off-by: Cyril Roelandt <tipecaml@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-20 21:15:33 +00:00
John Marriott a0931a90ee patch 9.2.0506: home_replace() function can be improved
Problem:  home_replace() function can be improved
Solution: Refactor home_replace() to return the length of the string
          (John Marriott).

In addition:
- in function set_b0_fname() move ulen into the block where it is used.
- In function findswapname() rework logic around displaying "swap file
  already exists" dialogue so that literal message text is set once.

closes: #20249

Signed-off-by: John Marriott <basilisk@internode.on.net>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-20 18:42:53 +00:00
Yasuhiro Matsumoto aee12156ee runtime(doc): fix GTK4 package name in src/INSTALL
The GTK4 section in src/INSTALL pointed at libgtk-3-dev. Use
libgtk-4-dev and note that GTK4 is not the default and requires
--enable-gui=gtk4.

closes: #20254

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-20 18:36:11 +00:00
Yasuhiro Matsumoto aed758986d patch 9.2.0505: GTK4: text looks blurry on HiDPI displays
Problem:  GTK4: text looks blurry on HiDPI displays
          (Foxe Chen, after v9.2.0501)
Solution: Allocate the cairo surface at physical resolution and set the
          device scale, recreate it on scale-factor changes
          (Yasuhiro Matsumoto).

The backing cairo image surface was created at logical pixel size, so
GTK4 upscaled it when blitting to the physical framebuffer. Allocate
the surface at width*scale x height*scale and apply
cairo_surface_set_device_scale() so drawing code keeps using logical
coordinates while the surface itself has full physical resolution.
Also recreate the surface on notify::scale-factor when the window
moves between monitors with different scales.

fixes:  #20252
closes: #20258

Co-authored-by: Claude <noreply@anthropic.com>
Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-20 18:26:14 +00:00
Lifepillar 146f46e264 runtime(context,typeset): Correct whitespace error in Log()'s 'edit' command
Also drop Last Change headers as this commit comes from the plugin's
maintainer.

related: #20242
related: #20244
closes:  #20263

Signed-off-by: Lifepillar <lifepillar@lifepillar.me>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-20 18:20:04 +00:00
Yasuhiro Matsumoto f7a58aee36 patch 9.2.0504: configure: requires X11 libraries for GTK4 build
Problem:  configure: requires X11 libraries for GTK4 build
          (after v9.2.0501)
Solution: Allow to build GTK4 even when no X11 libraries are present
          (Yasuhiro Matsumoto)

GTK4 does not use X11 APIs directly; the X11 backend is loaded by
GTK4 at runtime. Skip the X11 dependency enforcement when the user
explicitly passes --enable-gui=gtk4 so the build can succeed on
systems without X11 development headers.

closes: #20265

Co-authored-by: Claude <noreply@anthropic.com>
Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-20 18:01:52 +00:00
Christian Brabandt 129486193c runtime(getscript,vimball,rust): Use correct shellescape() form for ! ex cmd
Problem:  shellescape() called without {special} flag for :! ex command
Solution: Pass 1 as second argument to shellescape() in :! contexts

related: Commit: 3fb5e58fbc (patch 9.2.0479:
         [security]: runtime(tar): command injection in tar plugin)

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-20 17:59:16 +00:00
Christian Brabandt 71bcc867c9 patch 9.2.0503: Makefile: Missing dependencies for new GTK4 source files
Problem:  Makefile: Missing dependencies for new GTK4 source files
          (Reilly Brogan, after v9.2.0501)
Solution: Re-run make depend, clean the result up and include the
          missing dependencies for the GTK4 source files

fixes: #20267

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-20 17:34:53 +00:00
Christian Brabandt 0fa3603d6d runtime(doc): update cmdline-history (after v9.1.0895)
Reported-by: Hernán Ibarra Mejia <hernan@ibarramejia.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-20 09:13:52 +02:00
J. Paulo Seibt 35b767a090 patch 9.2.0502: runtime(netrw): bookmark handling can be improved
Problem:  To goto or delete a bookmark, one needs to prefix a count
          for the bookmark number (e.g., "2gb" to open bookmark#2).
          As the bookmark list gets or deletes entries, the numbers
          keep changing, requiring listing the bookmarks with qb to
          discover the desired bookmark number. Typing gb or mB
          without a count targets g:netrw_bookmarklist[-1].
Solution: If no count is given to gb or mB, list all bookmarks and
          prompt for a number using inputlist(), similar to tag jump
          with g].

closes: #20211

Signed-off-by: J. Paulo Seibt <jpseibt@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-19 18:51:14 +00:00
Christian Brabandt 07dc94023c runtime(doc): document new GTK4 GUI in version9.txt
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-19 18:46:59 +00:00
Aliaksei Budavei 7a57f59756 runtime(syntax-tests): Always delete our copy of "src/testdir/vimcmd"
Also prune this file whenever:
- tests cannot be run on this OS;
- tests fail and no QuitPre event is supported for ":cquit".

related: #19127
closes:  #20247

Signed-off-by: Aliaksei Budavei <0x000c70@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-19 18:30:50 +00:00
Yasuhiro Matsumoto da5ebe71cb patch 9.2.0501: GTK4: there is no GTK4 UI available
Problem:  GTK4: there is no GTK4 UI available
Solution: Implement GTK4 UI (Yasuhiro Matsumoto).

To enable, use the --enable-gui=gtk4 configure switch. Configure
currently favors GTK3 over GTK4 if no explicit --enable-gui switch has
been given and both libraries are present

closes: #19815

Co-authored-by: Claude <noreply@anthropic.com>
Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-19 18:20:19 +00:00
tecis d004cc4f89 runtime(htmldjango): Remove unnecessary code.
I submitted the PR #20232 to resolve an undesired behavior in with the
highlighter inheriting from "django.vim" and "html.vim". After
further testing I noticed the re-declaration of `djangoOperators` in
"htmldjango" is not necessary, and my conclusions where a mistake from a
not-clean test environment.

This PR reverses the effect of the commit #f03155a.

related: #20232
closes:  #20248

Signed-off-by: tecis <67809811+tecis@users.noreply.github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-19 17:09:11 +00:00
K.Takata 9b1d657bca CI: Stop using AppVeyor
We started the Windows CI with AppVeyor (v7.4.872), but nowadays, GitHub Actions
supports Windows, and the performance is better than AppVeyor.
Especially, AppVeyor doesn't allow running multiple jobs in parallel.

Before 9.0.0529, we used VC 2010 on AppVeyor to ensure that C99 syntax
was not used.
Now we use some C99 syntax. Also, MSVC's C99 support level remains
almost the same since VS 2015. So, using VS 2015 isn't very useful.

closes: #20251

Signed-off-by: K.Takata <kentkt@csc.jp>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-18 21:19:27 +00:00
truffle 354ab1a69e patch 9.2.0500: filetype: some html files wrongly recognized as htmlangular
Problem:  filetype: some html files are wrongly recognized as htmlangular
Solution: Use the \< atom to anchor ng-template and ng-content to start
          of word (truffle)

Prevent false-positive htmlangular detection on words containing
'ng-template' or 'ng-content' as a substring (e.g. 'song-template',
'sing-content'). Anchor both branches with \< to require a word start,
matching the \<DTD\s\+XHTML\s idiom used five lines below.

related: neovim/neovim#39778.
closes:  #20246

Signed-off-by: truffle <truffleagent@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-18 20:46:24 +00:00
tecis 6daa721dc0 runtime(doc): INSTALL: "libwayland-dev" is required on Ubuntu for Wayland clipboard support
In GNU/Linux distros without X11 and only depending on the Wayland
Composer as a display server I could not find official documentation on
how to compile VIM with clipbloard support.

> This will become more relevant as common distros ship with Wayland
only environments. (sources & articles bellow)

Sources.

- [Gnome Blog: X11 Session Removal FAQ.](https://blogs.gnome.org/alatiera/2025/06/23/x11-session-removal-faq/)
- [KDE Blog: Going all-in on a Wayland future 2025-11-26.](https://blogs.kde.org/2025/11/26/going-all-in-on-a-wayland-future/)
- [Gnome Blog: An update on the X11 GNOME Session Removal 2025-06-08.](https://blogs.gnome.org/alatiera/2025/06/08/the-x11-session-removal/)

Articles.

- [It’s Foss: No More Xorg! Fedora 43 Will Be Wayland-only 2025-05-21](https://itsfoss.com/news/fedora-43-wayland-only/)
- [Desde Linux: The depreciation of X11 in Fedora continues and in Fedora 41 the Gnome session in X11 will disappear.](https://blog.desdelinux.net/en/The-depreciation-of-x11-in-fedora-continues-and-in-fedora-41-the-gnome-session-in-x11-will-disappear/)
- [How-To-Geek: The writing is on the wall for X11 on Linux, here's what is replacing it 2025-12-29.](https://www.howtogeek.com/x11-is-going-away-on-linux-heres-how-to-prepare/).
- [Dev.To: GNOME 50 Removes X11: What It Means for Linux Users 2026-03-16.](https://dev.to/the_nazar/gnome-50-removes-x11-what-it-means-for-linux-users-1ike)
- [LinuxSecurity.com: GNOME 50: Wayland-Only Brings Enhanced Security and Isolation](https://linuxsecurity.com/news/desktop-security/gnome-50-wayland-linux-security)
- [XDA Developers: KDE is finally killing X11, and I'm not as sad as I thought I'd be 2026-05-14](https://www.xda-developers.com/kde-dropping-x11-support/).

closes: #20245

Signed-off-by: tecis <67809811+tecis@users.noreply.github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-18 20:42:01 +00:00
nagbu 5c496beb18 runtime(typeset): Correct whitespace error in :lcd command
closes: #20242
closes: #20244

Signed-off-by: nagbu <me@nagbu.net>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-18 20:36:07 +00:00
Aliaksei Budavei e543abbf8e tests(commondumps): Use character counts when marking columns
Continue using "strwidth" when calculating the position of
a column of interest, and start using "setcharpos" when
marking a line of interest so that paired-up marks remain
aligned columnwise across all three parts generated by
"term_dumpdiff", especially when multibyte characters are
written in the line before the marked column.

closes: #20237

Signed-off-by: Aliaksei Budavei <0x000c70@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-18 19:07:08 +00:00
Christian Brabandt 4397227119 patch 9.2.0499: modeline: allow to disable modelines with modelinestrict
Problem:  Cannot disable modeline processing when loading a file
          (Mao-Yining, after v9.2.0350)
Solution: Allow to disable modeline processing even when
          'modelienstrict' is in effect.

fixes:  #20103
closes: #20229

Signed-off-by: Christian Brabandt <cb@256bit.org>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-18 18:59:03 +00:00
Foxe Chen c920d93443 patch 9.2.0498: potential heap buffer overflow in if_xcmdsrv.c
Problem:  potential heap buffer overflow in if_xcmdsrv.c
          server_parse_message() (Michael Bommarito)
Solution: Add strlen() call (Foxe Chen)

fixes:  #20235
closes: #20236

Signed-off-by: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-17 20:42:20 +00:00
Miguel Barro 4a99175e39 patch 9.2.0497: Cannot jump to remote tags
Problem:  Cannot jump to remote tags
          (after v9.2.0405)
Solution: Add the 'tagsecure' option (Miguel Barro)

closes: #20162

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Signed-off-by: Miguel Barro <miguel.barro@live.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-17 20:11:52 +00:00
Christian Brabandt a65a52d684 patch 9.2.0496: [security]: Code Injection in cucumber filetype plugin
Problem:  [security]: Code Injection in cucumber filetype plugin
          (Christopher Lusk)
Solution: Use rubys Regexp.new() with the untrusted pattern

Github Security Advisory:
https://github.com/vim/vim/security/advisories/GHSA-4473-94jm-w5x9

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-17 19:39:24 +00:00
Christian Brabandt f08ab2f4d7 patch 9.2.0495: [security]: runtime(netrw): code injection via NetrwBookHistSave()
Problem:  [security]: runtime(netrw): code injection via
          NetrwBookHistSave()
Solution: Properly quote the directory name using string() function
          (Srinivas Piskala Ganesh Babu)

Github Security Advisory:
https://github.com/vim/vim/security/advisories/GHSA-crm5-rh6j-2c7c

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-17 18:53:48 +00:00
mathmil 2a01e59671 runtime(just): add 'suffixesadd' to ftplugin
closes: #20197

Signed-off-by: mathmil <82173590+mathmil@users.noreply.github.com>
Signed-off-by: Peter Benjamin <petermbenjamin@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-17 18:08:46 +00:00
Aliaksei Budavei 23c77d8ec8 runtime(sh): Do not conflate empty array and function declarations in Bash
Although the "=" character is permitted in function names,
a construct that parses as a variable assignment is
preferred to it parsing as a function declaration.  See the
updated test file "sh_functions_bash.sh" for details.

fixes:  #20183
closes: #20205

Co-authored-by: Doug Kearns <dougkearns@gmail.com>
Signed-off-by: Aliaksei Budavei <0x000c70@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-17 18:06:22 +00:00
Maxim Kim f0e874a129 patch 9.2.0494: User commands cannot handle single args with spaces
Problem:  User commands cannot handle single args with spaces
Solution: Add the -nargs=_ attribute (Maxim Kim)

-nargs=_ allow user commands to have a single argument with spaces.

For example given the following Test command and TestComplete function:

```
vim9script
def TestComplete(A: string, _: string, _: number): list<string>
    var all = ["qqqq", "aaaa", "qq aa"]
    return all->matchfuzzy(A)
enddef
command! -nargs=_ -complete=customlist,TestComplete Test echo <q-args>
```

`:Test q a<tab>` should successfully complete `qq aa`

fixes:  #20102
closes: #20189

Signed-off-by: Maxim Kim <habamax@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-17 17:58:15 +00:00
Yasuhiro Matsumoto abecad5af0 patch 9.2.0493: popup: missing Popup, PopupBorder and PopupTitle hi groups
Problem:  popup: missing Popup, PopupBorder and PopupTitle highlight groups
Solution: add Popup, PopupBorder and PopupTitle highlight groups and
          fall back to Pmenu related highlighting groups (Yasuhiro Matsumoto).

fixes:  #20110
closes: #20208

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-17 17:49:42 +00:00
Yasuhiro Matsumoto 3db4c3a20b patch 9.2.0492: popup: decoration wrongly drawn with clipping on border
Problem:  popup: clipwindow popups with border and padding could still
          spill into the surrounding chrome of the host window
Solution: Consume the border first, then the padding, per edge; spill
          any leftover clip into the opposite edge's decoration; derive
          the bottom padding row from total_height; skip the scrollbar
          branch for clipwindow popups (Yasuhiro Matsumoto).

closes: #20227

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-17 09:27:04 +00:00
Philip H. ab24858cf5 CI: Update clang to v22
closes: #20228

Signed-off-by: Philip H. <47042125+pheiduck@users.noreply.github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-17 08:48:14 +00:00
tecis f03155aa2a runtime(htmldjango): Add syntax highlighting of comparison operators
The presence `djangoOperators` in the file `syntax/django.vim` and
having the highlight function with a `match` statement leads to a
highlight spill-over with other elements defined in `syntax/html.vim`.
To avoid the highlight spill-over declare a region called
`djangoTagBlockNaive` to limit `djangoOperator` to only be matched
within.

related: #20225
closes:  #20232

Signed-off-by: tecis <67809811+tecis@users.noreply.github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-17 08:44:39 +00:00
tecis 8b25d90b08 runtime(django): Resolve FIXME of comparrison operators + localization tags
Summary: Add highlight of comparison operators resolving FIXME left by maintainer.

How it works: By creating a the variable ‘djangoOperator’ with the regex
and defining to only highlight when enclosed within ‘djangoTag’ and
‘djangoVarBlock’ the highlight works as expected.

Note: Note even though the maintainer had left the note “FIXME ==, !=,
      <, >, <=, and >= should be djangoStatements” the results do work
as I think he intended even though the variable ‘djangoOperator’ had to
be created to achieve the result. By doing it this way the highlight
process does not get confused depending on the spacing of the comparison
operator. Example: {{ x>=10 }} and {{ x >= 10 }} work as expected.

Add tags related to localization.

Documentation source:

- https://docs.djangoproject.com/en/5.2/topics/i18n/formatting/#controlling-localization-in-templates

closes: #20225

Signed-off-by: tecis <67809811+tecis@users.noreply.github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-17 08:32:15 +00:00
orbisai0security 403ba303b9 ccfilter: uses unbounded strcat()/strcpy()
Problem:  ccfilter.c copies compiler output into fixed-size buffers
          with strcat() and strcpy(), so very long diagnostics can
          overflow.
Solution: replace with snprintf() bounded by LINELENGTH.

Automated security fix generated by Orbis Security AI

closes: #20233

Signed-off-by: orbisai0security <mediratta01.pally@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-17 08:22:08 +00:00
K.Takata 8ae45e4202 NSIS: Don't install 32-bit dll on ARM64
closes: #20234

Signed-off-by: K.Takata <kentkt@csc.jp>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-16 15:51:03 +00:00
Zoltan Arpadffy d8c4774273 patch 9.2.0491: VMS: various build issues
Problem:  VMS: various build issues
Solution: Fix issues for VMS (Zoltan Arpadffy)

closes: #20131

Signed-off-by: Zoltan Arpadffy <zoltan.arpadffy@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-16 08:42:47 +00:00
glepnir 88b00d1c57 patch 9.2.0490: matchfuzzy() can crash on long multi-word patterns
Problem:  matchfuzzy() can crash on long multi-word patterns.
Solution: Clamp pat_chars to maxMatches and stop before calling
          match_positions() when the buffer is full (glepnir).

closes: #20209

Signed-off-by: glepnir <glephunter@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-16 08:36:39 +00:00
Phạm Bình An 591db923ba runtime(zip,tar): Add support for compressed .cbz and .cbt files
*.cbz and *.cbt files are just zip and tar files for comic books.
https://en.wikipedia.org/wiki/Comic_book_archive

closes: #20206

Signed-off-by: Phạm Bình An <phambinhanctb2004@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-16 08:02:13 +00:00
Doug Kearns f7e239bd0e runtime(sh): Update syntax, don't include parens in function name highlighting
Parentheses are not part of the function name so highlight them
differently.

closes: #20219

Signed-off-by: Doug Kearns <dougkearns@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-16 07:57:10 +00:00
Keith Smiley bc7f736a39 patch 9.2.0489: filetype: some Objective-C files are not recognized
Problem:  filetype: some Objective-C files are not recognized
Solution: Add g:filetype_mm override variable, improve the objective c
          pattern detection (Keith Smiley).

closes: #20221

Signed-off-by: Keith Smiley <keithbsmiley@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-16 07:46:25 +00:00
dependabot[bot] 7cb86f46cb CI: Bump the github-actions group across 1 directory with 2 updates
Bumps the github-actions group with 2 updates in the / directory: [github/codeql-action](https://github.com/github/codeql-action) and [actions/labeler](https://github.com/actions/labeler).

Updates `github/codeql-action` from 4.35.3 to 4.35.4
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/v4.35.3...v4.35.4)

Updates `actions/labeler` from 6.0.1 to 6.1.0
- [Release notes](https://github.com/actions/labeler/releases)
- [Commits](https://github.com/actions/labeler/compare/v6.0.1...v6.1.0)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-version: 4.35.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
- dependency-name: actions/labeler
  dependency-version: 6.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
...

closes: #20226

Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-16 07:40:21 +00:00
Hirohito Higashi b467b56ef0 patch 9.2.0488: statusline: status line highlight blends into adjacent vsep cells
Problem:  When two windows are placed side by side with vsplit and
          their status lines are connected (the cell between them
          is drawn with the 'stl' / 'stlnc' fillchar, not the
          'vert' character), that connecting cell still uses the
          VertSplit highlight.  The status line bar therefore
          looks broken at the separator column, and any custom
          edge highlight set in 'statusline' (%#XX# / %N*) is cut
          off there.
Solution: Make that connecting cell take the highlight from the
          neighbouring status line edge instead of VertSplit:
            - Next to the current window, use the current
              window's edge highlight, so the StatusLine bar (and
              any %#... at the edge) extends into the column
              without a seam.
            - Between two non-current windows whose status
              fillchar is a space, use the left window's
              right-edge highlight, so the StatusLineNC bar is
              continuous across the column too.
          Cells drawn with the 'vert' character (the two windows
          do not share a status line) keep the VertSplit
          highlight as before.

          Add Test_statusline_vsep_borrow_hl with two layouts
          (NC | cur | NC | NC and NC | NC | cur | NC) so all
          three cases above are covered.

closes: #20182

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-15 16:52:29 +00:00
Yasuhiro Matsumoto ee49669e8f patch 9.2.0487: viminfo: possible signed int overflow in register array
Problem:  viminfo: possible signed int overflow in register array growth
Solution: Cast to size_t (Yasuhiro Matsumoto)

The expression `limit * 2 * sizeof(string_T)` in read_viminfo_register()
multiplies in int and overflows once limit exceeds INT_MAX/2. Cast to
size_t first so the size computation stays unsigned. Defensive only;
reaching this path requires registers consuming many gigabytes.

closes: #20207

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-15 16:44:46 +00:00
Christian Brabandt de7a5b5425 patch 9.2.0486: out-of-bound read when recovering swap files
Problem:  out-of-bound read when recovering corrupted swap files
          (Rahul Hoysala)
Solution: Validate the db_txt_start field when recovering a swap
          file.

Supported by AI

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-15 16:34:53 +00:00
Foxe Chen e85e3e5d85 patch 9.2.0485: clipboard provider callback can be called recursively
Problem:  clipboard provider callback can be called recursively, leading
          to E132: Function call depth is higher than 'maxfuncdepth'
Solution: Prevent recursive calls of
          clip_provider_copy()/clip_provider_paste() (Foxe Chen).

closes: #20213

Signed-off-by: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-15 16:00:04 +00:00
Foxe Chen bec23ef65c patch 9.2.0484: TextPutPre triggers clipboard provider callback twice
Problem:  TextPutPre triggers clipboard provider callback twice
          when do_put() runs autocommands that themselves request
          the clipboard.
Solution: Guard do_put() and put_do_autocmd() with
          inc_clip_provider()/dec_clip_provider() so the provider
          is queried at most once per put operation (Foxe Chen).

closes: #20215

Signed-off-by: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-15 15:45:11 +00:00
Jonathan Demme 77b8a12f82 runtime(doc): Update 'softtabstop' documentation
closes: #20218

Signed-off-by: Jonathan Demme <j.b.demme@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-15 15:37:31 +00:00
Hirohito Higashi f281493c49 patch 9.2.0483: popup: terminal embedded in an opacity popup freezes Vim on input
Problem:  When a terminal buffer is shown inside a popup with 'opacity'
          set to a value other than 100, typing into it freezes Vim.
          Only the first keystroke is drawn; afterwards no input is
          processed and the screen stops updating.
Solution: When marking background lines for redraw to keep opacity
          blend cells fresh, do not raise must_redraw.  This marking
          happens from inside update_screen() (via
          may_update_popup_mask()), so raising must_redraw makes
          terminal_loop()'s "while (must_redraw != 0) update_screen()"
          loop never terminate.  Add redraw_win_range_now() that
          updates only the per-window state and use it from
          redraw_win_under_opacity_popup() (Hirohito Higashi)

fixes:  #20214
closes: #20220

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-15 15:02:48 +00:00
Foxe Chen 37d61dae72 runtime(doc): update doc for clipboard provider
closes: #20217

Signed-off-by: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-15 09:46:47 +00:00
Foxe Chen 29fa934344 patch 9.2.0482: runtime(osc52): triggered twice with TextPutPoste autocmd
Problem:  runtime(osc52): triggered twice with TextPutPoste autocmd
Solution: Detect recursive trigger and return null (Foxe Chen)

closes: #20216

Signed-off-by: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-15 02:09:24 +00:00
Christian Brabandt 8e41c34aba patch 9.2.0481: runtime(netrw): command injection possible via maps
Problem:  runtime(netrw): command injection possible via crafted
          directory names in NetrwMaps() (Christopher Lusk)
Solution: Temporarily remove B flag in NetrwMaps() to prevent command
          injection

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-14 18:52:08 +00:00
Christian Brabandt 8af0f098c3 patch 9.2.0480: [security]: runtime(netrw): code injection via mf command
Problem:  [security]: runtime(netrw): code injection via mf command
          (Christopher Lusk, Zdenek Dohnal)
Solution: Do not use string concatenation inside the filter() commands
          (Zdenek Dohnal)

Github Security Advisory:
https://github.com/vim/vim/security/advisories/GHSA-66hr-7p6x-x5j3

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-14 16:43:15 +00:00
Christian Brabandt 3fb5e58fbc patch 9.2.0479: [security]: runtime(tar): command injection in tar plugin
Problem:  [security]: runtime(tar): command injection in tar plugin
          (Christopher Lusk)
Solution: Use the correct shellescape(args, 1) form for a :! command

Github Advisory:
https://github.com/vim/vim/security/advisories/GHSA-2fpv-9ff7-xg5w

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-14 15:43:44 +00:00
K.Takata 950f501a18 runtime(doc): Fix file mode for the Italian manpage
closes: #20210

Signed-off-by: K.Takata <kentkt@csc.jp>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-14 08:39:03 +00:00
yilisharcs 702d32e161 runtime(compiler): set zig errorformat
includes a new zig_cc file to catch warnings

closes: #20198

Signed-off-by: yilisharcs <yilisharcs@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-12 18:11:55 +00:00
John Marriott 8aecd377f0 patch 9.2.0478: channel: redundant str/length assignments in channel_part_info()
Problem:  channel: redundant str/length assignments in channel_part_info
Solution: Use the STR_LITERAL_SET() macro (John Marriott)

closes: #20199

Signed-off-by: John Marriott <basilisk@internode.on.net>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-12 17:58:21 +00:00
Yasuhiro Matsumoto 3a9e1bb7e2 patch 9.2.0477: popup: leftover content after popup_free under layout change
Problem:  popup_mask still marks the freed popup's cells as covered
          until may_update_popup_mask() runs inside the next
          update_screen.  Any screen_fill / screen_puts called in
          between (for example msg_clr_eos triggered by a status message
          from :copen) hits skip_for_popup() and silently drops writes
          to those cells, so the popup's chars survive on screen until
          those cells happen to be redrawn for another reason.
Solution: Add popup_clear_mask_for() and call it from popup_hide() and
          popup_free() when the popup was visible, so the upcoming
          writes take effect immediately (Yasuhiro Matsumoto)

Note: The test is limited to MS-Windows because the original report
      (#20178) was reproduced there and the redraw timing required to
      surface the bug differs on other platforms.

fixes:  #20178
closes: #20188

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-12 17:47:41 +00:00
glepnir 38237411e4 patch 9.2.0476: pattern completion leaks memory on alloc failures
Problem:  copy_substring_from_pos() leaked on ga_grow() failures,
          expand_pattern_in_buf() leaked "match" on ga_grow() failure,
          fuzzy_match_str_with_pos() ignored ga_grow() failures
Solution: Route failures through cleanup paths, check ga_grow before
          writing to ga_data (glepnir)

closes: #20203

Signed-off-by: glepnir <glephunter@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-12 17:40:19 +00:00
Antonio Giovanni Colombo 78302b7b4a translation(it): Update Italian manpage
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-12 17:30:26 +00:00
Foxe Chen f45ed6465d runtime(hlyamk): Allow to highlight put regions using TextPutPost
closes: #20196

Signed-off-by: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-11 17:23:01 +00:00
J. Paulo Seibt 74019bea8c patch 9.2.0475: runtime(netrw): bookmark paths not normalized
Problem:  the bookmarks list can have duplicate entries, more often
          in win32 (due to mixed slashes and capitalization) and when
          g:netrw_keepdir=0 (which could introduce relative paths).
          Duplicate entries could be: C:\foo\BAR\baz.file
                                     c:\foo\bar\baz.file
                                     c:/foo\BAR/baz.file
                                     BAR/baz.file
Solution: Normalize the paths and make sure they are always absolute
          (J. Paulo Seibt).

closes: #20194

Signed-off-by: J. Paulo Seibt <jpseibt@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-11 17:10:55 +00:00
K.Takata 7784fac15f patch 9.2.0474: MS-Windows: hard to tell which Visual Studio version was selected with MSVC
Problem:  When running msvc*.bat there is no indication of which
          Visual Studio version and target architecture got
          selected.
Solution: After vcvarsall.bat returns, echo the VS version, VC
          tools version and target architecture, and set the
          Command Prompt title accordingly (Ken Takata).

closes: #20193

Signed-off-by: K.Takata <kentkt@csc.jp>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-11 16:58:24 +00:00
zeertzjq a70b7a85af patch 9.2.0473: Pasting ". register without autocommands breaks TextPut*
Problem:  Pasting ". register without TextPut* autocommands breaks
          subsequent TextPut* autocommands (after 9.2.0470).
Solution: Only decrement add_last_insert if it has been incremented
          (zeertzjq).

closes: #20192

Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-11 16:49:19 +00:00
Yasuhiro Matsumoto 51f1447d2a patch 9.2.0472: popup: column jitters when scrolled outside viewport
Problem:  popup: column jitters horizontally when textprop is scrolled
          above the host window's top (after v9.2.0469)
Solution: Compute the virtual column from the prop's actual line via
          getvcol() and translate it through prop_win's win_col_off /
          leftcol / wincol (Yasuhiro Matsumoto).

popup_screenpos_above_top() probed textpos2screenpos() at
prop_win->w_topline using the prop's own tp_col, so the returned
screen_scol picked up topline's tab stops and multi-byte widths instead
of the prop line's own.  Once the textprop scrolled above the host's
top, the popup's wincol jittered left/right every time a wider or
narrower line rotated into the topmost slot.

Compute the virtual column from the prop's actual line via getvcol()
and translate it through prop_win's win_col_off / leftcol / wincol.
Row extrapolation from topline is unchanged.

closes: #20187

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-11 16:29:27 +00:00
John Marriott 1b65cfbac5 patch 9.2.0471: vimvars di_key initialized at runtime
Problem:  evalvars_init() copies each vimvar's name into di_key at
          startup and runtime-checks that the name fits in
          DICTITEM16_KEY_LEN, even though all names are known at
          compile time.
Solution: Embed the name in di_key via the VV_NAME macro so the
          initialization happens at compile time.  Drop the
          runtime length check and the STRCPY loop (John Marriott).

closes: #20185

Signed-off-by: John Marriott <basilisk@internode.on.net>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-11 16:22:05 +00:00
Matthew Fernandez 852f4f43ca runtime(doc): Fix manpage typo in description of '--ttyfail'
This seems to have been accidentally introduced in
ce6fe84db2.

closes: #20186

Signed-off-by: Matthew Fernandez <matthew.fernandez@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-11 16:19:16 +00:00
Christian Brabandt bfebd1209b runtime(javacc): Check for existence of javaFuncDef syn group before clearing it
fixes: #20190

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-11 10:15:02 +02:00
Foxe Chen e0781bd5bf patch 9.2.0470: No way to hook into put commands
Problem:  No way to hook into put commands
          (yochem)
Solution: Introduce TextPutPre and TextPutPost autocommands
          (Foxe Chen).

fixes:  #18701
closes: #20144

Signed-off-by: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-10 19:17:19 +00:00
Yasuhiro Matsumoto e3d9929109 patch 9.2.0469: popup: textprop-anchored popups bleed past host window edges
Problem:  A popup anchored to a text property in a split window is
          positioned relative to the screen and may extend into
          adjacent splits or off-screen regions.  There is no way to
          confine the popup to the window that contains the textprop.
Solution: Add the "clipwindow" popup option to allow clipping the text
          property popup to the host window (Yasuhiro Matsumoto).

Adds a "clipwindow" boolean option to popup_create()/popup_setoptions().
When set on a textprop-anchored popup, the popup's drawn extent is
confined to its host (textprop) window's content rectangle so the popup
no longer bleeds across a horizontal split's statusline (top/bottom) or
a vsplit's separator (right) into another window.

The popup keeps its full logical size and position; only the rows or
columns that fall outside the host window's content area are skipped
during drawing, so a popup that scrolls toward the host's edge looks
visually "cut off" without its borders being relocated.  popup_getoptions
and popup_getpos continue to report the unclipped geometry.

Implementation:

  - w_popup_topoff / w_popup_bottomoff record how many rows of the
    popup fall outside the host on each side.  popup_adjust_position()
    computes them from the host rectangle after the logical layout is
    finalised, and update_popups() and the popup-mask builder subtract
    them when emitting cells/borders/scrollbar and when marking
    popup-owned cells.  win_update() is bracketed by transient
    w_height/w_topline/w_winrow adjustments so the buffer's drawn
    content matches the visible row range.

  - w_popup_rightclip is the horizontal counterpart for the host's
    right edge: the right border, padding and content columns past
    the host are not drawn.  win_update() is bracketed by a transient
    w_width reduction so the buffer text is not written past the
    host's right edge either.

  - When the textprop scrolls just above the host window's top, the
    popup is kept visible by extending the prop search above topline
    (new helper find_prop_in_lines) and synthesising a negative
    screen_row so the top-clip path can roll the popup off the top.
    When the textprop has scrolled far enough that even the bottom
    border would overlap the host edge -- or when the popup would
    overflow the host's left edge at all -- the popup is hidden, and
    unhidden again once it comes back within range.

  - The "reduce-height" / "clamp winrow to 0" fallbacks in
    popup_adjust_position are bypassed for host-clipped popups so the
    popup keeps its natural anchored position instead of being
    snapped to the screen edge.

    Left-edge partial clipping is intentionally not supported: it
    would require shrinking the buffer width during win_update, which
    reflows wrapped lines and corrupts the displayed content; the
    popup is hidden instead.

closes: #20166

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-10 19:02:38 +00:00
Yasuhiro Matsumoto ef1ecc3b61 patch 9.2.0468: popups: not correctly updated from a CmdlineChanged autocommand
Problem:  popup_show() from a CmdlineChanged autocommand doesn't update
          the screen (Mao-Yining)
Solution: Refresh the screen when popups need redraw
          (Yasuhiro Matsumoto).

popup_settext()/popup_show() called from a CmdlineChanged autocommand
did not refresh the screen because cmdline mode normally skips
update_screen(), so async info-popup updates only became visible after
a manual :redraw.  Refresh the screen when popups need redrawing right
after the autocommand.

fixes:  #20175
closes: #20179

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-10 18:20:01 +00:00
Hirohito Higashi 5ef1eec5c5 patch 9.2.0467: multi-line statusline loses highlighting attributes
Problem:  In a multi-line statusline (and 'tabpanel'), %#XX# / %N*
          set on one row do not persist on subsequent rows.
          build_stl_str_hl_local() rebuilds stl_items[] from scratch
          on every line break ("%@" or "\n"), so the highlight is
          reset at each row boundary even though within a row it
          stays until %* (or another %# / %*).
Solution: Carry the last Highlight item's stl_minwid across line
          breaks via a new in/out int* parameter "carry_hl".  At the
          start of each row, pre-insert a Highlight item from the
          carried value so the row begins under the same highlight;
          before returning, update the carried value with the row's
          final Highlight item.  Apply the same carry to the
          tabpanel rendering loop (Hirohito Higashi).

related: #19123
closes:  #20180

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-10 18:14:01 +00:00
Yasuhiro Matsumoto 3a8b9e09b2 patch 9.2.0466: popup: redraw can use stale blended cells
Problem:  popup: redraw can use stale blended cells
Solution: Save the old popup area and redraw the newly exposed region so
          opacity popups don't show stale blended cells when another
          popup moves or closes. Consolidate redraw helpers so the
          saved-area and exposed-area logic is shared across
          move/hide/close/settext/setoptions. Refactor popup redrawing
          code, add a regressions tests (Yasuhiro Matsumoto).

closes: #20172

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-10 17:23:12 +00:00
Christian Brabandt 2020e0bade patch 9.2.0465: modeline: foldmarker cannot be set with modelinestrict
Problem:  modeline: foldmarker cannot be set with modelinestrict
          (Lyderic Landry, after v9.2.0350)
Solution: Add foldmarker option to the whitelist

fixes:  #20028
closes: #20174

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-10 17:00:59 +00:00
J. Paulo Seibt ec76ac620b patch 9.2.0464: runtime(netrw): bookmarking directory uses current dir
Problem:  runtime(netrw): bookmarking directory uses current dir
Solution: Correctly handle netrw actual directory (J. Paulo Seibt)

fixes:  #10481
closes: #20169

Signed-off-by: J. Paulo Seibt <jpseibt@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-10 16:55:18 +00:00
Yegappan Lakshmanan 6b8d2262d3 patch 9.2.0463: Not able to use legacy expression evaluation in a vim9script maps
Problem:  Not able to use legacy expression evaluation in a vim9script
          maps
Solution: Explicitly set script version to 1 when the :legacy modifier has been
          used (Yegappan Lakshmanan).

fixe:   #20176
closes: #20177

Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-10 16:41:35 +00:00
K.Takata 3a1ac7ced2 patch 9.2.0462: MS-Windows: workaround for assert error on GUI
Problem:  When Vim is built with debug mode, gvim causes an assertion
          error and stops working when running on Visual Studio
          Debugger.
Solution: Stop calling _set_fmode() if not needed (Ken Takata).

closes: #20181

Signed-off-by: K.Takata <kentkt@csc.jp>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-10 16:34:01 +00:00
Christian Brabandt 4f610f07b7 patch 9.2.0461: Corrupted undofile causes use-after-free
Problem:  The four pointer-resolution loops in u_read_undo() lack
          an i != j guard, so a header whose uh_next.seq equals
          its own uh_seq resolves uh_next.ptr to itself.  On
          buffer close, u_freeheader() sees uhp->uh_next.ptr !=
          NULL and skips updating b_u_oldhead, so u_blockfree()
          dereferences the freed header on the next iteration.
          The same pattern applies to uh_prev, uh_alt_next and
          uh_alt_prev.  A crafted .un~ file in the same directory
          as a text file can trigger the use-after-free and
          subsequent double-free when the buffer is closed.
          (Daniel Cervera)
Solution: Add an i != j guard to each of the four resolution
          loops, matching the guard already present in the
          duplicate-detection loop above.

closes: #20168

Supported by AI

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-09 14:41:37 +00:00
zeertzjq abd74fa122 patch 9.2.0460: did_set_shellpipe_redir() in wrong file
Problem:  did_set_shellpipe_redir() is a callback for a string option,
          but is not in optionstr.c (after 9.2.0458).
Solution: Move it to optionstr.c. Also add missing change from patch
          9.2.0455 (zeertzjq).

related: #20159
related: #20164
closes:  #20170

Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-09 14:22:47 +00:00
Christian Brabandt 124f8becec patch 9.2.0459: tests: test_termcodes fails (after v9.2.0456)
Problem:  tests: test_termcodes fails, because it disabled DECRQM, but
          did not adjust the expected values in the test (after v9.2.0456)
Solution: Update the test

related: #20161
closes:  #20173

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-09 14:13:52 +00:00
dependabot[bot] fbec828c7e CI: Bump the github-actions group across 1 directory with 2 updates
Bumps the github-actions group with 2 updates in the / directory: [github/codeql-action](https://github.com/github/codeql-action) and [actions/labeler](https://github.com/actions/labeler).

Updates `github/codeql-action` from 4.35.2 to 4.35.3
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/v4.35.2...v4.35.3)

Updates `actions/labeler` from 6 to 6.0.1
- [Release notes](https://github.com/actions/labeler/releases)
- [Commits](https://github.com/actions/labeler/compare/v6...v6.0.1)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-version: 4.35.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
- dependency-name: actions/labeler
  dependency-version: 6.0.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
...

closes: #20171

Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-09 13:49:57 +00:00
Christian Brabandt 84ae09dd79 patch 9.2.0458: Crash with invalid shellredir/shellpipe value
Problem:  Crash with invalid shellredir/shellpipe value
          (bfredl)
Solution: Validate the option and allow only a single "%s".

fixes:  #20157
closes: #20159

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-08 21:32:21 +00:00
Christian Brabandt 2f00656b34 patch 9.2.0457: Compile warning about unused variable
Problem:  Compile warning about unused variable
          (Tony Mechelynck, after v9.2.0452)
Solution: Initialize the variable

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-08 21:22:28 +00:00
Foxe Chen 7644d9d611 patch 9.2.0456: stray p character displayed on some terms
Problem:  stray p character displayed on some terms
Solution: Make sending DECRQM more strict and disable it for a few more
          terminals (Foxe Chen)

fixes:  #20156
fixes:  #20140
closes: #20161

Signed-off-by: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-08 21:14:52 +00:00
zeertzjq 9694ff58fe patch 9.2.0455: 'findfunc' only allows extra info for cmdline completion
Problem:  'findfunc' only allows extra info for cmdline completion, not
          for actually finding files (Maxim Kim, after 9.2.0451).
Solution: Handle returning a list of dicts when actually finding files.
          Also fix crash on NULL string (zeertzjq).

fixes:  #20163
closes: #20164

Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-08 21:09:48 +00:00
zeertzjq b207b5a2a3 patch 9.2.0454: tests: no test that "abbr" in customlist completion is shown
Problem:  No test that "abbr" in customlist completion is shown in pum.
Solution: Add some "abbr" fields to the existing test (zeertzjq).

closes: #20165

Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-08 21:06:08 +00:00
Hirohito Higashi c895390e58 patch 9.2.0453: vertical separator of statusline blend into active statusline
Problem:  Since v9.2.0349, the vertical separator cell at status line
	  rows is drawn as a space with StatusLine highlight, hiding the
	  user's 'fillchars' "vert" or "stl"/"stlnc" character at that
	  cell (after v9.2.0349)
Solution: Drop the status line blend.  At status line rows the separator
	  cell goes back to using the status fillchar when adjacent
	  status lines are connected, or the vsep character otherwise.
	  (Same as before v9.2.0348)

Keep the VertSplitNC highlight group introduced in v9.2.0349.  The
highlight (VertSplit vs VertSplitNC) is selected based on whether the
current window is adjacent to the separator at the row.

Vertical separators are redrawn on current-window changes and on
:redrawstatus[!] so the VertSplit/VertSplitNC highlight is updated
immediately.

fixes:   #20089
related: #19951
closes:  #20167

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-08 21:03:12 +00:00
Yasuhiro Matsumoto b9871cef10 patch 9.2.0452: screen.c popup opacity blend logic is duplicated
Problem:  screen_line() has four near-identical blocks computing
          the popup_attr, the combined attr, the blend value and
          the underlying base attr in sequence when handling popups
          with opacity.  The duplication makes the function long
          and hard to follow, and changes have to be applied to all
          four sites.
Solution: Extract the shared computation into popup_blend_with_base()
          and popup_base_attr_or() helpers, and cache per-popup
          attrs once via popup_opacity_T.  No behavior change
          (Yasuhiro Matsumoto).

closes: #20154

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-07 19:40:16 +00:00
zeertzjq 58124789aa patch 9.2.0451: 'findfunc' can't return extra info for cmdline completion
Problem:  'findfunc' can't return extra info for cmdline completion
          (Maxim Kim).
Solution: Handle 'findfunc' return value in cmdline completion like that
          of "customlist" functions (zeertzjq).

fixes:  #20155
closes: #20158

Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-07 19:32:23 +00:00
Christian Brabandt 9299332917 patch 9.2.0450: [security]: heap buffer overflow in spellfile.c read_compound()
Problem:  read_compound() in spellfile.c computes the size of the regex
          pattern buffer using signed-int arithmetic on the attacker
          controlled SN_COMPOUND sectionlen.  With sectionlen=0x40000008
          and UTF-8 encoding active the multiplication wraps to 27 while
          the per-byte loop writes up to ~1B bytes, overflowing the heap.
          Reachable when loading a crafted .spl file (e.g. via 'set spell'
          after a modeline sets 'spelllang').  The cp/ap/crp allocations
          have the same int + 1 overflow class (Daniel Cervera)
Solution: Use type size_t as buffer size and reject values larger than
          COMPOUND_MAX_LEN (100000).  Apply the same size_t treatment to
          the cp/ap/crp allocations.

Github Advisory:
https://github.com/vim/vim/security/advisories/GHSA-q4jv-r9gj-6cwv

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-07 18:49:53 +00:00
Yasuhiro Matsumoto 4cbdef8e30 runtime(vim9): Check cmd.exe on WSL is executable
closes: #20150

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-06 18:24:51 +00:00
Christian Brabandt 0ab4316fce patch 9.2.0449: Make proto fails in non GTK builds
Problem:  Make proto fails when not building the GTK gui
Solution: Test for $GLIB_COMPILE_RESOURCES as done elsewhere

closes: #20145

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-06 18:17:00 +00:00
Yasuhiro Matsumoto 4bcc8ba93d patch 9.2.0448: Vim9: dangling cmdline pointer after skip_expr_cctx()
Problem:  Vim9: dangling cmdline pointer after skip_expr_cctx()
          (Foxe Chen)
Solution: Extract the cmdline restoration logic from compile_lambda into
          a helper restore_cmdline_arg() and call it from
          skip_expr_cctx() too, so a skipped lambda inside an "else"
          branch does not leave "*arg" pointing into freed evalarg
          memory (Yasuhiro Matsumoto).

fixes:  #20147
closes: #20148

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-06 18:02:09 +00:00
magnus-rattlehead c06002f3cb patch 9.2.0447: cindent does not ignore comments
Problem:  When find_start_brace() scans backwards for the enclosing
          block, '{' and '}' inside // and /* */ comments are counted,
          producing wrong indent for code following such comments
          (rendcrx).
Solution: Implement FM_SKIPCOMM in findmatchlimit() to track block-
          comment state and skip matches inside comments. Pass
          FM_SKIPCOMM from cindent's call sites
          (find_start_brace, find_match_char, cin_iswhileofdo,
          get_c_indent).

fixes:  #4
fixes:  #648
fixes:  #19578
closes: #19581
closes: #20111

Signed-off-by: magnus-rattlehead <guranjakustivi@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-05 21:14:33 +00:00
J. Paulo Seibt 7ccc273a4c patch 9.2.0446: runtime(netrw): off-by-one bug in s:NetrwUnMarkFile()
Problem:  off-by-one bug in s:NetrwUnMarkFile()
Solution: Correctly loop through all buffers to unlet all variables
          (J. Paulo Seibt)

When the function loops through buffers to clear s:netrwmarkfilelist_#
and s:netrwmarkfilemtch_#, it skips the last one at bufnr('$'), messing
up mark highlights and causing other functions that operate on those
arrays (like delete or rename) to target stale marked files.

The bufnr() help page says that bufnr("$") returns the highest buffer
number of existing buffers, so while ibuf < bufnr("$") does not clear
the last buffer-local arrays.

To reproduce:

Just opening a fresh Vim and running :Ex opens a netrw buffer at the
highest number. Then, typing mu after marking some files triggers the
mark highlight bug, and finally typing D would act like calling the
delete function against the previous marked files, as the buffer-local
arrays where not touched by s:NetrwUnMarkFile.

closes: #20129

Signed-off-by: J. Paulo Seibt <jpseibt@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-05 20:09:58 +00:00
Jesse Rosenstock 40fc78f0a1 patch 9.2.0445: win_fix_scroll() called before win_comp_pos() in command_height()
Problem:  win_fix_scroll(true) is called before win_comp_pos() in
          command_height().
Solution: Move win_fix_scroll(true) after win_comp_pos(), matching the
          ordering used in win_drag_status_line() (Jesse Rosenstock).

Patch 9.2.0413 added win_fix_scroll(true) to command_height() to handle
splitkeep when cmdheight changes, but placed the call before win_comp_pos().
win_fix_scroll() reads w_winrow to detect window movement
(https://github.com/vim/vim/blob/620557bd48865fa3d927901764d2747bf68597b5/src/window.c#L7266),
but w_winrow is not recomputed until win_comp_pos() runs
(https://github.com/vim/vim/blob/620557bd48865fa3d927901764d2747bf68597b5/src/window.c#L6516).
This causes incorrect scroll adjustments and was breaking
Test_smoothscroll_incsearch on macOS CI.

closes: #20138

Co-authored-by: Gemini
Signed-off-by: Jesse Rosenstock <jmr@google.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-05 19:50:46 +00:00
Christian Brabandt 88fb739918 patch 9.2.0444: Cannot set 'path' option via modeline
Problem:  Cannot set 'path' option via modeline (zeertzjq, after v9.2.0435)
Solution: Revert the part that disallows setting 'path' via modeline.

closes: #20137

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-05 19:47:19 +00:00
Hirohito Higashi cf947e7ef0 patch 9.2.0443: GUI: cancelling save dialog overwrites or discards unnamed buffer
Problem:  When closing gvim with an unsaved unnamed buffer, choosing
          "Yes" in the "Save changes?" dialog and then "Cancel" in the
          file selection dialog either silently writes the buffer to a
          file named "Untitled" (overwriting any existing file with
          that name) or discards the buffer altogether
          (vibs29, after v9.1.0265).
Solution: In dialog_changed(), if browse_save_fname() leaves the buffer
          without a file name, treat it as a cancel and return without
          saving.  Also stop clearing the modified flag in the restore
          path on write failure, so the unsaved changes are kept and
          the caller (e.g. gui_shell_closed()) can also cancel the
          close.  Pre-fill the file dialog with "Untitled" to match
          the preceding "Save changes to ..." prompt.  Add a test for
          the write-failure path (Hirohito Higashi).

fixes:  #20132
closes: #20143

Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-05 19:02:59 +00:00
zeertzjq 2bfddbea47 patch 9.2.0442: completion: i_CTRL-X_CTRL-V doesn't use dict from customlist
Problem:  Completion with i_CTRL-X_CTRL-V doesn't use dict from cmdline
          "customlist" completion.
Solution: Include abbr/kind/menu/info in the completion items
          (zeertzjq).

closes: #20139

Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-05 18:56:56 +00:00
Arnaud Rebillout 1903020b82 runtime(autopkgtest): update syntax script
Fix some typos, and move a deprecated keyword where it belongs

closes: #20141

Signed-off-by: Arnaud Rebillout <arnaudr@debian.org>
Signed-off-by: James McCoy <jamessan@jamessan.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-05 18:53:33 +00:00
mityu b10159bcc2 Fix wrong comment in getchar.c
The comment for `do_key_input_pre()` function says that it handles the
InsertCharPre autocommand, but what the function actually handles is the
KeyInputPre autocommand.

closes: #20142

Signed-off-by: mityu <mityu.mail@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-04 20:24:07 +00:00
Hirohito Higashi 8c7d824b73 patch 9.2.0441: statusline: click handler not called on multi-line statusline
Problem:  With a multi-line statusline clicking on a "%[FuncName]...%[]"
          or "%@FuncName@..." region defined on a row other than the
          last drawn row does not invoke the handler (Christian
          Robinson, after v9.2.0338)
Solution: In win_redr_custom() the click region table reflects only the
          last iteration of the per-row draw loop, so click regions are
          recorded only for the last row.  Move the click-region
          resolution inside the loop and append regions for each row
          using vim_realloc().  This also fixes a leak of
          clicktab[].funcname for non-last rows (Hirohito Higashi).

fixes:  #20116
closes: #20120

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-04 20:03:46 +00:00
Yasuhiro Matsumoto 0c998003bc patch 9.2.0440: MS-Windows: cursor flicker during update_screen()
Problem:  MS-Windows: cursor flicker during update_screen()
Solution: Hide the cursor during update_screen() to avoid Windows ConPTY
          flicker (Yasuhiro Matsumoto).

On terminals that do not honor synchronized output mode (e.g. Windows
ConPTY), update_screen() emits cell positioning and content as multiple
Win32 console writes through mch_write(), which the terminal renders as
separate frames.  This shows up as the cursor briefly jumping to column
1 of rows being redrawn, especially during async redraws around the
popup completion menu.

Disable the cursor with cursor_off() at the start of update_screen()
and restore it with cursor_on() at the end, but only when synchronized
output mode is not active.  When it is, the redraw is already atomic
from the terminal's view and hiding the cursor would only add visible
blink with no benefit.

closes: #20121

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-04 19:58:27 +00:00
zeertzjq 3bfffcc290 patch 9.2.0439: completion: info popup not removed in cmdline mode
Problem:  Info popup isn't removed when selecting an item that doesn't
          have "info" in cmdline completion, which is inconsistent with
          Insert mode behavior.
Solution: Set pum_call_update_screen in cmdline mode (zeertzjq).

closes: #20128

Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-04 19:53:10 +00:00
Jesse Rosenstock 20a124a6e0 patch 9.2.0438: tests: test_plugin_termdebug is flaky
Problem:  Test_termdebug_tbreak(), Test_termdebug_basic(), and
          Test_termdebug_toggle_break() use synchronous assert_equal()
          to check breakpoint signs immediately after sending commands
          to gdb.  On slow CI (ASAN, ARM64, macOS) gdb may not have
          processed the response yet, causing the sign to be missing.
Solution: Wrap the three assertions in WaitForAssert() to poll until
          the signs are placed, matching the pattern already used by
          the other assertions in the same tests (Jesse Rosenstock).

closes: #20133

Co-authored-by: Gemini
Signed-off-by: Jesse Rosenstock <jmr@google.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-04 19:22:25 +00:00
Hirohito Higashi bb807ebc8a runtime(doc): Tweak documentation style
closes: #20134

Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-04 19:17:52 +00:00
Felipe Matarazzo cb0b4cf45c Fix a few more typos
closes: #20135

Signed-off-by: Felipe Matarazzo <felipemps@protonmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-04 19:10:37 +00:00
Yasuhiro Matsumoto 9d3019104c patch 9.2.0437: MS-Windows: cursor flicker in vtp mode
Problem:  MS-Windows: cursor flicker in vtp mode
Solution: Skip mch_update_cursor() in cursor_visible() when vtp is
          active (Yasuhiro Matsumoto).

In vtp (ConPTY) mode the cursor visibility is controlled by DECTCEM
(\033[?25h / \033[?25l).  The follow-up call to mch_update_cursor() then
re-emits DECSCUSR (\033[0 q etc.) on every visibility toggle even though
the cursor shape did not change.  Some terminals briefly redisplay the
cursor when DECSCUSR arrives, so this can cause a visible flash at the
position the cursor will be moved to next (e.g. column 0 ahead of a line
redraw).

In non-vtp mode the call is still required because SetConsoleCursorInfo()
inside mch_set_cursor_shape() reads s_cursor_visible to apply the
visibility change, so keep that path unchanged.

closes: #20122

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-03 18:37:05 +00:00
Christian Brabandt 77677c33de patch 9.2.0436: Buffer overflow when parsing overlong errorformat lines
Problem:  When an error line in a file passed to :cfile / :cgetfile is
          longer than IOSIZE, qf_parse_file_pfx() copies the tail
          into the fixed-size IObuff with STRMOVE(), overflowing the heap buffer.
          The same code path can also loop indefinitely because
          qf_parse_file_pfx() always returns QF_MULTISCAN when a
          tail is present, and qf_init_ext() unconditionally goes
          to "restofline" without bounding the tail length (Nabih).
Solution: Remove the STRMOVE() into IObuff.  In the QF_MULTISCAN
          branch, alias linebuf into the tail directly and update
          linelen, requiring strict progress (new length less than
          the previous length) before retrying; otherwise ignore
          the line.

closes: #20126

Supported by AI

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-03 18:33:39 +00:00
Christian Brabandt 190cb3c2b9 patch 9.2.0435: [security]: backticks in 'path' may cause shell execution on completion
Problem:  [security]: Backticks enclosed shell commands in the 'path'
          option value are executed during completion (q1uf3ng).
Solution: Skip path entries containing backticks, add P_SECURE to 'path'
          option, so that it cannot be set from a modeline (for symmetry with
          the 'cdpath' option)

Github Advisory:
https://github.com/vim/vim/security/advisories/GHSA-hwg5-3cxw-wvvg

Supported by AI.

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-03 18:17:02 +00:00
Christian Brabandt fde5a56ecb patch 9.2.0434: cscope: filename interpreted by /bin/sh
Problem:  cs_create_connection() builds the cscope command by
          interpolating csinfo[i].fname (and ppath, flags) into a
          string and lets the shell parse it.  Shell metacharacters
          in a database filename are therefore evaluated by /bin/sh
          before cscope is exec'd, rather than being passed through as a
          literal path (q1uf3ng)
Solution: Build argv directly and execvp() the cscope binary
          without an intervening shell.

closes: #20119

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-03 17:47:50 +00:00
Yasuhiro Matsumoto 5c700152ae patch 9.2.0433: customlist completion cannot supply pum metadata
Problem:  customlist completion cannot supply pum metadata
Solution: Allow each item returned by a customlist function to be
          either a string or a Dict with keys "word", "abbr", "kind",
          "menu" and "info" (Yasuhiro Matsumoto).

closes: #20100

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-02 16:11:01 +00:00
Yasuhiro Matsumoto 3bd25c63b4 patch 9.2.0432: blob to string conversion can be improved
Problem:  blob to string conversion can be improved
Solution: Compute the output size up front and use a single alloc plus
          mch_memmove() (Yasuhiro Matsumoto).

Replace per-byte ga_append/snprintf loops with bulk allocation and
mch_memmove in three hot paths: blob2string() (used by string()),
string_from_blob(), and the UTF-16/UCS path of f_blob2str(). For a
16 MiB blob, string(blob) is ~28x faster and blob2str() is ~2x faster.

Benchmark (16 MiB blob, 5 iterations, total seconds):

| | Before | After | Speedup |
|---|---:|---:|---:|
| `string(blob)` | 6.422 | 0.225 | 28.5x |
| `blob2str(b)` | 0.504 | 0.265 | 1.90x |
| `blob2str(b, {encoding: 'utf-8'})` | 0.507 | 0.282 | 1.80x |
| `blob2str(b, {encoding: 'utf-16le'})` | 0.407 | 0.202 | 2.01x |

closes: #20112

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-02 15:49:17 +00:00
Yasuhiro Matsumoto e1e92fea92 patch 9.2.0431: blob encoding can be improved
Problem:  blob encoding can be improved
Solution: Speed up blob encoding by avoiding per-byte ga_append()
          (Yasuhiro Matsumoto)

Replace the per-byte ga_append loop in the VAR_BLOB branch of
json_encode_item() with a single ga_grow for the worst case
(2 + 4 * blen) and direct writes through a local pointer. Also
read blob bytes through a local char_u* instead of going through
blob_get() for each byte.

Benchmark (1 MiB blob, 5 iterations, total seconds, median of 3 runs):

| byte distribution | Before | After | Speedup |
|---|---:|---:|---:|
| 1-digit (0–9)     | 0.0254 | 0.0174 | 1.46x |
| 2-digit (10–99)   | 0.0344 | 0.0064 | 5.38x |
| 3-digit (100–255) | 0.0539 | 0.0102 | 5.28x |
| mixed (0–255)     | 0.0335 | 0.0093 | 3.60x |

closes: #20113

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-02 15:39:55 +00:00
Yasuhiro Matsumoto 2219c89013 patch 9.2.0430: tests: Test_shortmess_F3() is flaky on MS-Windows
Problem:  tests: Test_shortmess_F3() is flaky on MS-Windows
Solution: Increase the sleep to 3s (Yasuhiro Matsumoto)

On MS-Windows time_differs() treats mtime as unchanged unless st_mtime
differs by more than 1 second, so a 2-second sleep can fall short when
the two writes straddle a second boundary. Bump the non-nanotime sleep
to 3 seconds.

closes: #20117

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-02 15:20:18 +00:00
Yasuhiro Matsumoto e25933014c patch 9.2.0429: tests: flaky screendump Test_smoothscroll_incsearch()
Problem:  tests: flaky screendump Test_smoothscroll_incsearch()
Solution: Replace screendump test by WaitForAssert()
          (Yasuhiro Matsumoto)

VerifyScreenDump fails consistently on the macos-15-intel CI runner.
Replace the dump comparisons with assertions that verify the actual
invariant under test: that the visible buffer view stays unchanged
across the four incremental-search keystrokes (i.e. skipcol is not
reset). Drop the now-unused dump files.

closes: #20118

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-02 13:29:01 +00:00
Doug Kearns e4413c5df7 runtime(algol68): Update syntax file, match symbolic identity relators
closes: #20109

Signed-off-by: Doug Kearns <dougkearns@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-01 16:35:57 +00:00
Yasuhiro Matsumoto 59e59a62b4 patch 9.2.0428: popup: no opacity support for completepopup/previewpopup
Problem:  popup: no opacity support for completepopup/previewpopup
Solution: Add support opacity: suboption for the 'completeopt'.

Accepts opacity:0-100 with the same semantics as popup_create()'s
opacity option, allowing the info / preview popup to blend with
the background.

closes: #20099

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-01 16:32:44 +00:00
Yasuhiro Matsumoto 7b218ae98c patch 9.2.0427: popup: opacity blend may leaks white bg color
Problem:  popup: opacity blend may leaks white bg color
Solution: Add cterm color blending for 256 color terminals, use
          COLOR_INVALID() macro to check for invalid color
          (Yasuhiro Matsumoto)

When a textprop highlight only set gui=undercurl/guisp (no fg/bg), the
CTERMCOLOR sentinel was treated by hl_blend_attr() as a real near-white
color, leaking white bg onto textprop-covered cells under an opacity
popup or pum.  Add a cterm color blending path that approximates blends
in the xterm 256-color palette using the gui RGB when available, so
opacity now has a visible effect even without 'termguicolors' (in
256-color terminals).  Below 256 colors the blend is skipped.

Also document the requirement (GUI, 'termguicolors', or 256-color
terminal) and update existing pumopt/popupwin opacity screendumps to
reflect the new blended output.

closes: #20095

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-01 16:22:32 +00:00
Yasuhiro Matsumoto cf5d7102b9 patch 9.2.0426: tests: still some flaky screendump tests
Problem:  tests: still some flaky screendump tests
          (James McCoy)
Solution: Replace flaky VerifyScreenDump checks with assert_* assertions
          for Test_visual_block_scroll and Test_scrolloffpad_with_folds,
          and remove the now-unused dump files, mark those tests as
          flaky (which happened previously for screendump tests
          automatically) (Yasuhiro Matsumoto).

fixes:   #20096
related: #20095

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-01 16:20:43 +00:00
Shougo Matsushita d25f8d1b2c patch 9.2.0425: Cannot silence undo/redo messages
Problem:  Cannot silence undo/redo messages
Solution: Add "u" flag to 'shortmess' option
          (Shougo Matsushita).

fixes:  #20049
closes: #20107

Signed-off-by: Shougo Matsushita <Shougo.Matsu@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-01 14:54:56 +00:00
Yasuhiro Matsumoto ec8b8bd82a patch 9.2.0424: popup: flicker when wildtrigger() refreshes the popup menu
Problem:  popup: flicker when wildtrigger() refreshes the popup menu
Solution: Wrap the pum teardown and cmdline redraw in synchronized
          terminal output (Yasuhiro Matsumoto).

Reduces flicker when wildtrigger() refreshes the popup on every
keystroke and the cmdline is wrapped: the un-scroll inside
update_screen() and the re-scroll inside redrawcmd() are emitted as
one atomic terminal update.

closes: #20081

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-01 13:29:01 +00:00
Yasuhiro Matsumoto 587447ec64 patch 9.2.0423: popup: wrapped cmdline truncated with wildoptions=pum
Problem:  popup: wrapped cmdline truncated with wildoptions=pum
Solution: Call msg_starthere() in redrawcmd() to reset lines_left
          before each redraw (Yasuhiro Matsumoto).

redrawcmd() leaves lines_left at its previous value, which decrements
across successive redraws (e.g. when wildtrigger() refreshes the popup
on every keystroke) until 0, after which msg_no_more aborts drawing
the wrapped cmdline. Call msg_starthere() to reset it.

related: #20081

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-01 13:25:31 +00:00
Yasuhiro Matsumoto ba85f88fe9 patch 9.2.0422: popup: leave stray char when scrollbar changes
Problem:  popup: leave stray char when scrollbar changes
          (Maxim Kim, after v9.2.0112)
Solution: refresh popup mask when scrollbar visibility changes
          (Yasuhiro Matsumoto)

popup_adjust_position() set popup_mask_refresh only on geometry
changes, missing the case where w_has_scrollbar flips. After
popup_settext() shrinks the buffer enough that the scrollbar
disappears, the cell that held the old border / scrollbar was
never repainted, leaving stray characters.

fixes:  #20092
closes: #20098

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-01 13:12:11 +00:00
Ivan Pešić 7f3243e3a8 translation(sr): Update of Serbian translation
closes: #20105

Signed-off-by: Ivan Pešić <27575106+eevan78@users.noreply.github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-30 18:06:46 +00:00
Léana 江 7da90de1cb runtime(cabal): add missing haskell language editions
closes: #20097

Signed-off-by: Léana 江 <leana.jiang+git@icloud.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-30 18:01:17 +00:00
Hirohito Higashi f793e98068 runtime(doc): clarify separator cell on status line rows
- Expand hl-VertSplit / hl-VertSplitNC in syntax.txt to spell out which
  character (space vs 'fillchars' "vert") and which highlight group
  (StatusLine / StatusLineNC / VertSplit / VertSplitNC) are used at the
  separator cell on each kind of screen row.
- Add cross references from hl-StatusLine and hl-StatusLineNC to
  hl-VertSplit / hl-VertSplitNC.

The behavior itself is unchanged — see v9.2.0349 (c72196529) — but the
asymmetry reported in #20089 surprised users, so this aims to make the
spec discoverable from the highlight group docs.

closes: #20101

Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-29 21:44:12 +00:00
Christian Brabandt 620557bd48 runtime(doc): Update help tags file
forgotten from Commit e7e35b9e38

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-29 21:22:48 +00:00
Christian Brabandt e7e35b9e38 runtime(doc): clarify that viminfo file should be trusted
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-29 21:17:11 +00:00
Christian Brabandt 77499e009a patch 9.2.0421: vimball: can smuggle Vimscript into VimballRecord file
Problem:  vimball: can smuggle Vimscript into VimballRecord file
          (Mayank Jangid and Kushal Khemka)
Solution: Disallow strange file names

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-29 20:36:14 +00:00
Yasuhiro Matsumoto 3ac7b97439 patch 9.2.0420: channel: cannot handle binary data via channel callbacks
Problem:  channel: cannot handle binary data via channel callbacks
Solution: Add a blob channel mode that passes callback data as a Blob
          (Yasuhiro Matsumoto).

closes: #20084

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-29 19:49:45 +00:00
Yasuhiro Matsumoto bd8716178e patch 9.2.0419: popup: rendering issues
Problem:  popup: rendering issues
Solution: Fix popup bottom edge overflow, stabilize popup width across
          scrolling, fix popup right edge overflow
          (Yasuhiro Matsumoto)

closes: #20042

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-29 19:23:47 +00:00
glepnir 20e98ff1cc patch 9.2.0418: wildcards in expanded env vars reinterpreted by glob
Problem:  With $d='[dir]', `:e $d/file.txt` opens the wrong file,
          `:e $d/<Tab>` fails to complete, and `glob('$d/*')` returns
          nothing. Wildcard characters inside expanded environment
          variables get picked up by globbing again.
Solution: Turn the 4th parameter of expand_env_esc() from a bool into a
          string of characters to escape in each expanded value. Callers
          that pass the result to wildcard expansion should include
          PATH_ESC_WILDCARDS in addition to " \t" (glepnir).

closes: #20053

Signed-off-by: glepnir <glephunter@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-29 19:10:43 +00:00
glepnir af494af5ff patch 9.2.0417: completion: no support for "noinsert" with 'wildmode'
Problem:  completion: no support for "noinsert" with 'wildmode' and
          commandline completion
Solution: Add "noinsert" value to the 'wildmode' option, mirroring
          'completeopt' "noinsert" behaviour (glepnir).

fixes:  #16551
closes: #20080

Signed-off-by: glepnir <glephunter@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-29 18:35:55 +00:00
Maxim Kim c2bda0add9 patch 9.2.0416: Unix: filename completion splits at space for single-file Ex commands
Problem:  SPACE_IN_FILENAME is defined on most platforms but not on Unix.
	  As a result, set_context_for_wildcard_arg() on Unix always resets the
	  completion pattern at white space for Ex commands that take a
          single file argument.
Solution: Drop the SPACE_IN_FILENAME ifdef (Maxim Kim)

fixes:  #18411
closes: #20090

Signed-off-by: Maxim Kim <habamax@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-29 17:19:35 +00:00
zeertzjq 6453a7c440 patch 9.2.0415: Wrong behavior when executing register that ends in Insert mode
Problem:  Wrong behavior when executing register that ends in Insert
          mode from Ctrl-O (Emilien Breton)
Solution: Use :startinsert etc. to restore Insert mode after executing
          the register contents (zeertzjq).

fixes:  #20085
closes: #20091

Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-29 16:11:56 +00:00
Yasuhiro Matsumoto 458fed4f65 patch 9.2.0414: Flicker when drawing window separator and pum is shown
Problem:  In a vertical split where the pum overlaps the windows vsep column,
          background draws (vsep at cursor row, status line,
          redraw_vseps, idle ins_redraw) can write into cells that are
          covered by the pum, because skip_for_popup() only protects
          those cells while pum_will_redraw is set.
Solution: In skip_for_popup(), also skip cells under a visible pum when
          the current draw is not the pum itself (screen_zindex
          POPUPMENU_ZINDEX).  Exclude the wildmenu pum (MODE_CMDLINE):
          while the cmdline grows, pum_row is briefly stale and
          protecting those cells would blank a cell of the wrapped
          cmdline row (Yasuhiro Matsumoto).

closes: #20093

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-29 15:58:42 +00:00
ii14 c5de8231f4 runtime(qml): Add optional chaining to QML syntax
"obj?.prop" was wrongly parsed as ternary operator.

closes: #19988

Signed-off-by: ii14 <ii14@users.noreply.github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-28 21:20:41 +00:00
Luuk van Baal bd0f3e6da5 patch 9.2.0413: Scrolling wrong with 'splitkeep' when changing 'cmdheight'
Problem:  Cursor is not adjusted when 'cmdheight' is changed to cover
          the cursor with 'splitkeep' ~= "cursor".
Solution: Handle window resize for 'splitkeep' after changing 'cmdheight'.
          Ensure previous window height is set when changing 'splitkeep'
          (Luuk van Baal).

closes: #20043

Signed-off-by: Luuk van Baal <luukvbaal@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-28 21:14:50 +00:00
Hirohito Higashi 41c3379bdf patch 9.2.0412: channel: term_start() out_cb/err_cb no longer deliver raw chunks
Problem:  channel: term_start() out_cb/err_cb no longer deliver raw
          chunks (regression from patch 9.2.0224, breaks callers like
          vim-fugitive that parse multi-line output)
          (D. Ben Knoble, after v9.2.0224)
Solution: Remove the PTY-specific per-line splitting in
          may_invoke_callback() so RAW callbacks again receive the
          raw chunk as returned by read(), preserving embedded NL.
          If per-line handling is desired, the callback must split
          "msg" on NL and strip the trailing CR itself; document
          this behavior in term_start().  Replace
          Test_term_start_cb_per_line() with
          Test_term_start_cb_raw_chunk() to verify the raw-chunk
          contract.

fixes:  #20041
closes: #20045

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-28 21:06:45 +00:00
Yasuhiro Matsumoto e7745b7cbf patch 9.2.0411: tabpanel: no Vim script functions for the tabpanel
Problem:  tabpanel: no Vim script functions for the tabpanel
Solution: Add tabpanel_getinfo() and tabpanel_scroll()
          (Yasuhiro Matsumoto).

tabpanel_getinfo() returns a dict describing the tabpanel (align,
columns, scrollbar, offset, total, max_offset).

tabpanel_scroll(n) scrolls the tabpanel by n rows (positive for
down, negative for up). With {absolute: 1} the argument is used as
the new absolute offset instead of a delta. The offset is clamped to
the valid range; returns true when it actually changes.

closes: #20056

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-28 20:31:34 +00:00
Jesse Rosenstock 6146f3382f patch 9.2.0410: test suite races when run with parallel make
Problem:  Running "make test" with -jN causes spurious failures because
          the old-style tests share filenames (test.ok, test.out, X*,
          viminfo) in the working directory.
Solution: Add .NOTPARALLEL to the testdir Makefile to prevent parallel
          execution of tests (Jesse Rosenstock).

closes: #20082

Co-authored-by: Gemini
Signed-off-by: Jesse Rosenstock <jmr@google.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-28 19:23:41 +00:00
Hirohito Higashi 30b4240730 runtime(doc): Update docs related to tabpanel
closes: #20083

Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-28 19:19:53 +00:00
glepnir 6cb4173294 patch 9.2.0409: memory leaks in copy_substring_from_pos()
Problem:  Memory leak in error path of copy_substring_from_pos().
Solution: Free the garray on OOM in copy_substring_from_pos()
          (glepnir).

closes: #20086

Signed-off-by: glepnir <glephunter@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-28 19:14:22 +00:00
Jaehwang Jung e47daed442 patch 9.2.0408: Insert-mode <Cmd> edits can corrupt undo
Problem:  A <Cmd> command in Insert mode can edit the current buffer,
          e.g., with setline(). That edit appends to the current undo
          block, but Insert mode does not know that the cursor line may
          need to be saved again before the next typed edit. If the next
          typed edit is a <BS> at the start of a line, it can join away
          the line that was changed by the <Cmd> command before Insert
          mode saves that updated line. The newest undo entry can then
          still refer to the joined-away line, so undo sees a range past
          the end of the buffer and fails with E438.
Solution: If a <Cmd> command in Insert mode changes the buffer, set
          ins_need_undo so stop_arrow() refreshes Insstart. This lets
          the next edit properly decide whether a new undo entry is
          needed (Jaehwang Jung)

closes: #20087
AI-assisted: Codex

Signed-off-by: Jaehwang Jung <tomtomjhj@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-28 19:06:15 +00:00
Hirohito Higashi 2d43240659 patch 9.2.0407: tabpanel: A few issues with the tabpanel
Problem:  Several issues around the tabpanel scrollbar:
          1. :set tabpanelopt= completion did not offer "scroll" and
              "scrollbar".
          2. gt/gT and other tab switches did not update the scrollbar
              thumb; the current tab could move outside the visible
              panel range without the view following.
          3. When tpl_scroll_offset was at its maximum, the thumb's
              bottom did not reach the last screen row due to integer
              truncation in thumb_top (e.g. 31 tabs on 24 rows + :tablast
              left a one-row gap).
          4. For align:right the scrollbar was drawn on the panel's
              left edge (adjacent to the buffer area), which breaks the
              common convention that a vertical scrollbar sits on the
              right.
Solution: - Add "scroll" and "scrollbar" to the 'tabpanelopt' expansion
            list.  Cover the completion in test_options.vim and extend
            util/gen_opt_test.vim with the new valid/invalid values;
            drop the now-redundant acceptance test from
            test_tabpanel.vim.
          - In draw_tabpanel(), remember the last-drawn curtab and,
            when it changes, adjust tpl_scroll_offset so curtab_row
            falls inside [offset, offset + Rows).  Mouse wheel and
            drag leave curtab unchanged, so the user's chosen offset
            is preserved.
          - In draw_tabpanel_scrollbar(), compute thumb_top as
            (Rows - thumb_height) * tpl_scroll_offset
            / (tpl_total_rows - Rows), mirroring the mapping already
            used by tabpanel_drag_scrollbar().  This guarantees the
            thumb's bottom reaches the last row at the maximum offset.
          - In draw_tabpanel(), place the scrollbar at the tabpanel's
            right edge for both align:left and align:right (previously
            align:right put it on the panel's left edge next to the
            vertical separator).  For align:right this means the
            scrollbar now sits at the screen's right edge.
          - Update :h tabpanel-scroll to describe the new, align-
            independent placement.
          - Add Test_tabpanel_scrollbar_follows_curtab() and
            Test_tabpanel_scrollbar_reaches_bottom() to exercise the
            regressions fixed by items 2 and 3.

closes: #20052

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-27 21:16:56 +00:00
Shane Harper 7e76514896 patch 9.2.0406: VisualNOS not used when Wayland selection ownership lost
Problem:  VisualNOS not used when Wayland selection ownership lost
          (lilydjwg)
Solution: Don't require X_DISPLAY != NULL to use VisualNOS
          (Shane Harper).

fixes:   #19914
related: #19812
related: #19659
closes:  #20066

Signed-off-by: Shane Harper <shane@shaneharper.net>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-27 19:58:46 +00:00
Christian Brabandt ae196b2d58 patch 9.2.0405: when jumping to tags, will open URLs
Problem:  when jumping to tags, will open URLs
          (Srinivas Piskala Ganesh Babu)
Solution: Disallow trying to open remote files.

closes: #20068

Supported by AI

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-27 18:43:10 +00:00
Christian Brabandt 3958188f6a patch 9.2.0404: redraw_listener_add() does not check secure flag
Problem:  redraw_listener_add() does not check secure flag
Solution: Check for check_secure() in f_redraw_listener_add()

closes: #20070

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-27 18:34:01 +00:00
Christian Brabandt f1a9449206 patch 9.2.0403: Vim9: def function sandbox bypass
Problem:  Vim9: def function sandbox bypass
          (Srinivas Piskala Ganesh Babu)
Solution: Check for sandbox flag in call_user_func() and call_dfunc()
          when executing Vim9 script functions

closes: #20071

Supported by AI

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-27 18:14:49 +00:00
Yasuhiro Matsumoto 7070a85d94 patch 9.2.0402: pum: opacity not applied to wildmenu pum
Problem:  pum: opacity not applied to wildmenu pum
Solution: Call pum_call_update_screen() in cmdline_pum_display() when
          opacity is set, fix flicker by checking against expected row
          (Yasuhiro Matsumoto).

closes: #20072

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-27 18:05:12 +00:00
Christian Brabandt 0bc64b19a2 patch 9.2.0401: tests: still a few flaky tests
Problem:  tests: still a few flaky tests
Solution: Add WaitForAssert to test_messages.vim, use a smaller terminal
          window for test_tabpanel, add TermWait() in test_messages
          to handle DECQRM messages.

closes: #20074

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-27 18:00:14 +00:00
Barrett Ruth dd9b31fb62 patch 9.2.0400: sandbox callbacks selected through 'complete'
Problem:  Modeline-tainted 'complete' values can invoke completion
          callbacks outside the sandbox.
Solution: Enter the sandbox for both 'complete' callback phases and add
          a regression test (Barrett Ruth)

closes: #20078

Signed-off-by: Barrett Ruth <br.barrettruth@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-27 17:18:17 +00:00
Yasuhiro Matsumoto a622dda915 patch 9.2.0399: MS-Windows: compile warning in strptime.c
Problem:  MS-Windows: compile warning in strptime.c
          (John Marriott, after v9.2.0398)
Solution: Fix the compile warning (Yasuhiro Matsumoto).

Use _get_tzname() instead of the deprecated tzname[] global on UCRT and
MSVC builds; older MinGW (msvcrt.dll) keeps using tzname[] as a
fallback.

related: #20054
closes:  #20079

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-27 17:10:25 +00:00
Christian Brabandt 96be27309c runtime(doc): fix :z command description again
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-27 17:06:47 +00:00
Yasuhiro Matsumoto 036e40e6d8 patch 9.2.0398: MS-Windows: missing strptime() support
Problem:  MS-Windows: missing strptime() support
Solution: Port NetBSD's strptime fallback to Vim
          (Yasuhiro Matsumoto).

The MSVC and MinGW C runtimes do not provide strptime(), so the
strptime() builtin was unavailable on Windows.  Port NetBSD's
lib/libc/time/strptime.c (rev 1.67) and compile it into the Windows
builds.  The BSD 2-clause notice from the original is preserved in the
file.  Windows-specific adjustments: English-only locale tables, the
fromzone()/tzalloc() path is stubbed out (no IANA tzfile loader on
Windows), and tm_gmtoff / tm_zone stores are elided.

Also call tzset() before mktime() in f_strptime() so changes to \$TZ
are honored.

Skip the POSIX DST TZ assertion in Test_strptime() on MS-Windows since
the CRT tzset() does not parse POSIX TZ strings with DST rules.

closes: #20054

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-26 17:31:41 +00:00
Yasuhiro Matsumoto 22aedc4a90 patch 9.2.0397: tabpanel: double-click opens a new tab
Problem:  tabpanel: double-click opens a new tab page
Solution: Do not create a new tab page when using a double click
          (Yasuhiro Matsumoto).

The tabpanel click handler inherited the tabline behavior where a
double-click opens a new, empty tab page.  Unlike the tabline, the
tabpanel has no "empty area": every row maps to some tab, so this
fires on any double-click in the tabpanel and can generate stray
empty tabs.  The behavior is also not documented for the tabpanel.

Skip the new-tab branch when the click originated in the tabpanel
and fall through to the regular tab-switch path instead.  The
tabline behavior is unchanged.

closes: #20044

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-26 16:53:58 +00:00
Doug Kearns 076366bd4e runtime(javascript): Fix regex highlighting after (
- Fix regex highlighting after opening parens, javascriptParens was
  matching later.  Fixes issue #20069.
- Add missing regex flags.
- Mark the file as unmaintained.  Thanks Claudio for all your work.

closes: #20076

Signed-off-by: Doug Kearns <dougkearns@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-26 14:52:21 +00:00
zeertzjq c23bfd7922 runtime(help): fix wrong check for existing HelpComplete function
To check for an existing HelpComplete function, exists('*HelpComplete')
should be used, as exists('HelpComplete') still returns 0 after sourcing
the ftplugin.

closes: #20073

Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-26 14:36:23 +00:00
Doug Kearns 3cc7d50716 runtime(algol68): Add new syntax file, ftplugin and filetype detection
- Add a syntax file update to Neville Dempsey's long-serving version
- Add a new rudimentary ftplugin
- Add filetype detection

Changes to the syntax file include:
- improved prelude, number and symbol highlighting
- prelude highlighting tests
- updated boiler plate

Note that these runtime files currently target Algol 68 Genie employing
the default UPPER stropping regime.  Support for GNU Algol 68 should
also be usable with the UPPER stropping regime, although somewhat less
complete.  Full support for the SUPPER stropping regime in GNU Algol 68
is also planned.

closes: #19818

Co-authored-by: Doug Kearns <dougkearns@gmail.com>
Signed-off-by: Doug Kearns <dougkearns@gmail.com>
Signed-off-by: Janis Papanagnou <janis_papanagnou@hotmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-26 14:31:55 +00:00
Doug Kearns 1ce03d674a runtime(dockerfile): Update syntax, fix RUN command highlighting
Allow for docker comments to be interspersed in a multiline (continued)
RUN command argument.

fixes:  #8364
closes: #19829

Signed-off-by: Doug Kearns <dougkearns@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-26 14:26:19 +00:00
Yasuhiro Matsumoto 2baef82cd1 patch 9.2.0396: tests: Test_error_callback_terminal is flaky on macOS
Problem:  tests: Test_error_callback_terminal is flaky on macOS
Solution: Use WaitForAssert() to make it more reliable
          (Yasuhiro Matsumoto).

term_wait() only waits for terminal screen updates and does not
guarantee that the err_io 'pipe' callback has fired, so on macOS
the assert_match() against g:error frequently runs before sh has
written "sh: XXXX: not found", causing the test to flake.

Replace term_wait() + assert_match() with WaitForAssert() so each
assertion polls until the callback delivers the expected output.
Also defer sending "exit" until the stderr message has been seen,
to avoid losing the stderr write to the exit race.

closes: #20075

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-26 09:22:38 +00:00
Christian Brabandt bf6892aaab runtime(doc): Update documentation on :z
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-26 09:18:07 +00:00
Peter Cardenas 0ca1121d1f runtime(help): make help omnifunc global
closes: #20024

Signed-off-by: Peter Cardenas <16930781+PeterCardenas@users.noreply.github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-26 08:42:57 +00:00
D. Ben Knoble 8d9c383aaf patch 9.2.0395: tests: Test_backupskip() may read from $HOME
Problem:  tests: Test_backupskip() may read from $HOME
Solution: Set $HOME to an empty value, use --clean
          (D Ben Knoble)

Even though we unset HOME, we can see via scriptnames that user files
are still sourced! One of my installed plugins warns when not compiled
with +python3, so this test has a "press Enter" prompt.

Use `--clean` like most other GetVimProg()'s do to fix it. Some tests
use `system()` instead, but that turns this test into a failure rather
than passing; I'm not sure why other tests don't suffer from this.

To prove to ourselves, we can use code like this:

    diff --git i/src/testdir/test_options.vim w/src/testdir/test_options.vim
    index a408e20e1..044364a54 100644
    --- i/src/testdir/test_options.vim
    +++ w/src/testdir/test_options.vim
    @@ -1179,6 +1179,7 @@ func Test_backupskip()
       " P_NODUP).  Run this in a separate instance and write v:errors in a file,
       " so that we see what happens on startup.
       let after =<< trim [CODE]
    +      call writefile([execute('scriptnames')], 'foo')
           let bsklist = split(&backupskip, ',')
           call assert_equal(uniq(copy(bsklist)), bsklist)
           call writefile(['errors:'] + v:errors, 'Xtestout')
    @@ -1196,7 +1197,7 @@ func Test_backupskip()
       " unset $HOME, so that it won't try to read init files
       let saveenv['HOME'] = getenv("HOME")
       call setenv('HOME', v:null)
    -  exe 'silent !' . cmd
    +  exe 'silent !' . cmd .. ' --cmd "echo &rtp"'
       call assert_equal(['errors:'], readfile('Xtestout'))

       " restore environment variables

Here, that causes "foo" to include a bunch of files under ~/.vim. I'm
not sure why this happens, but lets paper over it for the test.

We can also tell that (orthogonal to --clean) setting HOME='' works too.
Let's do that in addition since unsetting HOME isn't quite enough.

closes: #20051

Signed-off-by: D. Ben Knoble <ben.knoble+github@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-26 08:33:59 +00:00
Yasuhiro Matsumoto 8f9cde4592 patch 9.2.0394: xxd: offsets greater than LONG_MAX print as negative
Problem:  xxd: offsets greater than LONG_MAX print as negative
Solution: Use "%lu" to print unsigned long value
          (Yasuhiro Matsumoto)

closes: #20055

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-26 08:22:23 +00:00
svardew 807f2cd789 CI: Fix syntax error in lychee URL checker
fixes: #20040

Signed-off-by: svardew <svardew@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-26 08:16:59 +00:00
Christian Brabandt 1de887681d No guidance for AI coding agents
Problem:  No guidance for AI coding agents working in the Vim
          repository.
Solution: Add AGENTS.md to the repository documenting build
          and test commands, repository layout, commit format,
          C and Vim9-script conventions, test conventions, help
          file style, and release policy, so that AI agents can
          produce patches that match project expectations.

closes: #20039

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-26 08:11:59 +00:00
dependabot[bot] e7eef554f3 CI: Bump the github-actions group across 1 directory with 3 updates
Bumps the github-actions group with 3 updates in the / directory: [msys2/setup-msys2](https://github.com/msys2/setup-msys2), [actions/cache](https://github.com/actions/cache) and [github/codeql-action](https://github.com/github/codeql-action).

Updates `msys2/setup-msys2` from 2.31.0 to 2.31.1
- [Release notes](https://github.com/msys2/setup-msys2/releases)
- [Changelog](https://github.com/msys2/setup-msys2/blob/main/CHANGELOG.md)
- [Commits](https://github.com/msys2/setup-msys2/compare/v2.31.0...v2.31.1)

Updates `actions/cache` from 5.0.4 to 5.0.5
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/v5.0.4...v5.0.5)

Updates `github/codeql-action` from 4.35.1 to 4.35.2
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/v4.35.1...v4.35.2)

---
updated-dependencies:
- dependency-name: msys2/setup-msys2
  dependency-version: 2.31.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
- dependency-name: actions/cache
  dependency-version: 5.0.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
- dependency-name: github/codeql-action
  dependency-version: 4.35.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
...

closes: #20063

Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-26 08:05:33 +00:00
Yasuhiro Matsumoto 0c2ac3480a patch 9.2.0393: MS-Windows: link error with XPM support on UCRT64
Problem:  MS-Windows: link error with XPM support on UCRT64
Solution: Make_cyg_ming.mak: allow XPM to point to system layout with
          X11/ headers (Yasuhiro Matsumoto)

When XPM is set to a system prefix such as /msys64/ucrt64 (where xpm.h
lives in include/X11/), the existing -I flags miss the header.  Add
-I $(XPM)/include/X11 so both the bundled layout (xpm/include/xpm.h)
and the system layout (include/X11/xpm.h) work.

closes: #20064

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-26 07:57:14 +00:00
Hirohito Higashi 32a30cb5a0 runtime(doc): Update docs about tabpanel
closes: #20067

Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-25 17:56:30 +00:00
Christian Brabandt 1940bcb243 patch 9.2.0392: tests: Some tests are flaky
Problem:  tests: Some tests are flaky and cause CI to fail
Solution: Add WaitForAsserts() calls to reduce flakiness

closes: #20050

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-25 17:50:47 +00:00
Christian Brabandt 5f7c52408f runtime(doc): Update the ga output to match the actual output
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-25 17:46:51 +00:00
Christian Brabandt 10b57290d3 patch 9.2.0391: tests: Comment in test_vim9_cmd breaks syntax highlighting
Problem:  tests: Comment in test_vim9_cmd breaks syntax highlighting
Solution: Move the comment into the function and use the # as comment
          marker instead

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-25 16:49:21 +00:00
Vitaliy Gromov 0f9218851d translation(ru): Fix typo in "може" to "можете" in lang/README.ru.txt
closes: #20047

Signed-off-by: Vitaliy Gromov <101171374+VitaliyGromov@users.noreply.github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-23 16:03:31 +00:00
Bruno Belanyi 521eac1877 patch 9.2.0390: filetype: some Beancount files are not recognized
Problem:  filetype: some Beancount files are not recognized
Solution: Detect *.bean files as beancount filetype
          (Bruno Belanyi)

closes: #20037

Signed-off-by: Bruno Belanyi <bruno@belanyi.fr>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-23 15:56:30 +00:00
Hirohito Higashi 44f707da6a patch 9.2.0389: DECRQM still leaves stray "pp" on Apple Terminal.app
Problem:  DECRQM was still sent to Apple Terminal.app before its DA2
          reply was processed, leaving a literal "pp" on screen.
          may_req_decrqm() was called from vim_main2()
          right after may_req_termresponse(), at which point
          term_props[TPR_DECRQM].tpr_status was still TPR_UNKNOWN, so
          the `!= TPR_NO` guard let the request through (after v9.2.0387)
Solution: Send DECRQM from handle_version_response() once
          term_props[TPR_DECRQM].tpr_status == TPR_YES, the same
          pattern already used for t_RS (TPR_CURSOR_STYLE) and t_RC
          (TPR_CURSOR_BLINK), which deliberately wait for the DA2
          reply to avoid the same echo-on-screen issue on Apple
          Terminal.app and Gnome terminal.  Drop the now-unused
          may_req_decrqm() helper and its call site in vim_main2()
          (Hirohito Higashi).

fixes:   #19852
related: #19938
closes:  #20038

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: John Marriott <basilisk@internode.on.net>
Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-22 20:29:08 +00:00
zeertzjq f194676c93 patch 9.2.0388: strange indent in update_topline()
Problem:  strange indent in update_topline()
Solution: Fix the indentation (zeertzjq)

closes: #20033

Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-22 16:09:06 +00:00
Hirohito Higashi cee8fd73eb patch 9.2.0387: DECRQM request may leave stray chars in terminal
Problem:  Sending DECRQM from handle_version_response() caused DECRPM
          responses to arrive during user input processing, leaving
          bytes in typebuf when clear_showcmd() ran.  This made
          visual-mode showcmd (e.g. "7" line count after V<C-D><C-D>)
          intermittently disappear, failing many screendump tests on CI.
Solution: Move DECRQM request out of handle_version_response() and send
          it at startup via may_req_decrqm(), following the existing
          may_req_termresponse() and may_req_bg_color() pattern.
          Add TPR_DECRQM property set per terminal from the DA2 reply,
          and route DECRQM sends through a may_req_decrqm() helper using
          the termrequest_T pattern, skipping terminals known to
          mishandle it (Foxe Chen, Hirohito Higashi).

fixes:  #19852
closes: #19938

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Hirohito Higashi <h.east.727@gmail.com>
Co-Authored-By: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-21 21:03:25 +00:00
Yasuhiro Matsumoto 2ea4a7c3b7 patch 9.2.0386: No scroll/scrollbar support in the tabpanel
Problem:  No scroll/scrollbar support in the tabpanel
Solution: Add support for it (Yasuhiro Matsumoto)

closes: #19979

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-21 20:39:22 +00:00
D. Ben Knoble 10040bc9cd runtime(sh): allow "#" in special derefs
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: #20016

Helped-by: Christian Brabandt <cb@256bit.org>
Signed-off-by: D. Ben Knoble <ben.knoble+github@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-21 19:59:07 +00:00
zeertzjq 33f3965087 patch 9.2.0385: Integer overflow with "ze" and large 'sidescrolloff'
Problem:  Integer overflow with "ze" and large 'sidescrolloff'.
Solution: Check for overflow to avoid negative w_leftcol (zeertzjq).

closes: #20026

Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-21 19:41:37 +00:00
zeertzjq 3918f3232f runtime(doc): fix incorrect description of 'scrolloffpad'
closes: #20029

Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-21 19:34:18 +00:00
Jon Parise 16d28548d2 runtime(graphql): Update syntax script to September 2025 spec
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: #20030

Signed-off-by: Jon Parise <jon@indelible.org>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-21 19:25:54 +00:00
Jaehwang Jung d4fb31762e 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: #20031

AI-assisted: Codex

Signed-off-by: Jaehwang Jung <tomtomjhj@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-21 19:24:14 +00:00
Christian Brabandt 405e2fb6d5 patch 9.2.0383: [security]: runtime(netrw): shell-injection via sftp: and file: URLs
Problem:  runtime(netrw): shell-injection via sftp: and file: URLs
          (Joshua Rogers)
Solution: Escape temporary file names, harden filename suffix regex,
          drop unused g:netrw_tmpfile_escape variable

Supported by AI

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-21 19:08:05 +00:00
Foxe Chen d0b6ee320b patch 9.2.0382: Wayland: focus-stealing is non-working
Problem:  Wayland: focus-stealing is non-working
Solution: Remove it, the feature could be re-implemented using
          clipboard-providers feature, see :h wayland-primary-selection
          (Foxe Chen).

closes: #19984

Signed-off-by: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-20 18:24:17 +00:00
Christian Brabandt ec3f79e037 patch 9.2.0381: Vim9: Missing check_secure() in exec_instructions()
Problem:  Vim9: Missing check_secure() when executing ISN_STOREENV
          instruction (Andrej Tomči)
Solution: Add check_secure(), add test.

closes: #19992

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-20 17:44:45 +00:00
glepnir b328686d6a patch 9.2.0380: completion: a few issues in completion code
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: #20000

Signed-off-by: glepnir <glephunter@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-20 17:36:56 +00:00
Hirohito Higashi fe3c27ce0b patch 9.2.0379: gui.color_approx is never used
Problem:  gui.color_approx in gui_T has not been assigned anywhere since
          patch 7.4.2094 ("The color allocation in X11 is overly
          complicated", 2016), which dropped the single "gui.color_approx = TRUE;"
          site.  Because the member is zero-initialized and never written, the
          check "if (gui.color_approx)" in gui_mch_init() is always false and the
          "E458: Cannot allocate colormap entry, ..." warning can never be
          emitted.
Solution: Remove the struct member and the unreachable branch.  The E458
          error definition is removed. Update the example error code
          "E458" in the ex_eval.c comment to "E457" accordingly.

closes: #20007

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-20 17:24:15 +00:00
Hirohito Higashi 146d5da0d1 patch 9.2.0378: Using int as bool type in win_T struct
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: #20005
closes:  #20008

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-20 17:12:29 +00:00
Hirohito Higashi 3c3050e648 patch 9.2.0377: Using int as bool type in gui_T struct
Problem:  Several gui_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 gui_T members to bool (stdbool.h) and
          update their assignments from TRUE/FALSE to true/false
          accordingly (Hirohito Higashi)

The following conversions have been done:
- int -> bool (11 members):
  in_focus, in_use, starting, dying, dofork, dospawn,
  pointer_hidden, force_redraw, directx_enabled, font_can_bold,
  which_scrollbars[3]
- char -> bool (2 members):
  cursor_is_valid, menu_is_active

No existing code compares these members against TRUE/FALSE explicitly
(e.g. "== TRUE"), so only plain assignments are affected.

gui_init() used counter-style "--gui.starting" / "++gui.starting" to
temporarily clear the flag across a call to gui_mch_enable_menu().
With gui.starting now bool this triggers -Werror=bool-operation, so
replace it with an explicit save/restore.

X11 Bool members (rsrc_rev_video, color_approx) are intentionally left
unchanged: rsrc_rev_video is registered as an X Toolkit resource with
XtRBool / sizeof(Bool) and must keep the int-sized X11 Bool type.

closes: #20005

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-20 16:33:57 +00:00
Furkan Sahin f74a41620b patch 9.2.0376: Vim9: elseif condition compiled in dead branch
Problem:  When an `if` condition is constant true, the `else` block is
          skipped during compilation. However, any `elseif` condition
          within that skipped block was still compiled. This caused
          errors when the condition referenced variables only declared
          in the skipped block or when it checked for missing features
          (like `has('clipboard')`) (Coacher)
Solution: In compile_elseif(), when scope->se_skip_save is
          already SKIP_YES, skip compiling the elseif condition
          expression using skip_expr_cctx() (Furkan Sahin)

fixes:  #19160
closes: #20021

Signed-off-by: Furkan Sahin <furkan-dev@proton.me>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-20 16:22:50 +00:00
Furkan Sahin c9d4c1dc43 patch 9.2.0375: prop_find() does not find a virt text in starting line
Problem:  prop_find() does not find a virt text in the starting line
          (@rickhowe, after v9.2.0320)
Solution: Do not skip virtual text properties with tp_col == MAXCOL on
          the starting line (Furkan Sahin)

The column matching logic incorrectly skipped virtual text properties
with tp_col == MAXCOL on the starting line.  Exclude such properties
from the column range check so they are always found.

fixes:  #20013
closes: #20019

Signed-off-by: Furkan Sahin <furkan-dev@proton.me>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-20 16:20:12 +00:00
Barrett Ruth c62342e5cf 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:  #19991
closes: #19998

Signed-off-by: Barrett Ruth <br.barrettruth@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-20 16:08:47 +00:00
zeertzjq 49e8630a28 patch 9.2.0373: Ctrl-R mapping not triggered during completion
Problem:  Ctrl-R mapping not triggered during completion.
Solution: Move Ctrl-R check out of vim_is_ctrl_x_key()
          (zeertzjq).

fixes:  #20004
closes: #20006

Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-20 15:46:08 +00:00
Yasuhiro Matsumoto 73ba353c9d patch 9.2.0372: pum: rendering issues with multibyte text and opacity
Problem:  pum: rendering issues with multibyte text and opacity
Solution: Fix trailing-cell handling near popup text boundary,
          use popup attrs on opaque popup text,
          preserve right border when bg wide char spills,
          blend popup text bg with underlying bg,
          fix wide background char corruption
          (Yasuhiro Matsumoto)

closes: #20017

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-20 15:35:39 +00:00
Eisuke Kawashima 1c88aee1fa runtime: Remove wrong syn oneline keyword from a few syntax files
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: #20018

Signed-off-by: Eisuke Kawashima <e-kwsm@users.noreply.github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-20 15:14:31 +00:00
Bez Hermoso b30803b231 patch 9.2.0371: filetype: ghostty config files are not recognized
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: #20002

Co-authored-by: Christian Brabandt <cb@256bit.org>
Signed-off-by: Bez Hermoso <me@bez.dev>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-20 14:50:37 +00:00
Hirohito Higashi 2c436be6f7 patch 9.2.0370: duplicate code with literal string_T assignment
Problem:  Duplicate code with literal string_T assignment
Solution: Add STR_LITERAL_SET() macro for string_T literal assignment
          (Hirohito Higashi).

Previously, assigning a string literal to a string_T variable required
two lines that repeated the literal:

    s.string = (char_u *)"open";
    s.length = STRLEN_LITERAL("open");

Writing the literal twice is error-prone -- a typo in one of them
leaves the pointer and the cached length out of sync.

Add a STR_LITERAL_SET() macro in macros.h so that the assignment can
be written in one statement with the literal appearing only once:

    STR_LITERAL_SET(s, "open");

Replace all occurrences of the two-line pattern across the codebase
with the new macro.

No functional change.

related: #19999
related: #20023
closes:  #20025

Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-20 14:43:52 +00:00
Hirohito Higashi 6ecff78129 patch 9.2.0369: multiple definitions of STRING_INIT macro
Problem:  multiple definitions of STRING_INIT macro
Solution: Refactor use of STRING_INIT and use a single
          STR_LITERAL_INIT() macro instead
          (Hirohito Higashi)

Consolidate the ad-hoc STRING_INIT() macros that were defined and used
locally in multiple source files. Define a single STR_LITERAL_INIT()
macro in macros.h and replace all previous STRING_INIT() usages with it.

No functional change.

related: #19999
closes:  #20023

Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-19 21:51:51 +00:00
John Marriott c13232699d patch 9.2.0368: too many strlen() calls when adding strings to dicts
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: #19999

Signed-off-by: John Marriott <basilisk@internode.on.net>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-19 21:10:43 +00:00
Yasuhiro Matsumoto 723c0acf25 patch 9.2.0367: runtime(netrw): ~ note expanded on MS Windows
Problem:  runtime(netrw): ~ note expanded on MS Windows
          (Tom Vamvanij)
Solution: Expand ~ on MS Windows (Yasuhiro Matsumoto)

On Windows, ":Explore ~" did nothing because the tilde expansion was
gated to Unix/Cygwin only.  Additionally, substitute() interprets
backslashes in the replacement string specially (e.g. \U as a case
modifier), which would corrupt $HOME values like C:\Users\name even
if the branch were taken.

Include has("win32") in the guard, anchor the pattern to the start of
the string, and escape backslashes, ampersands and tildes in $HOME
before substituting.

fixes:  #20003
closes: #20014

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-19 20:40:58 +00:00
Yasuhiro Matsumoto 237d77e07c patch 9.2.0366: pum: flicker when updating pum in place
Problem:  pum: flicker when updating pum in place
Solution: Skip update_screen() when the popup menu is redrawn
          at the same position (Yasuhiro Matsumoto).

closes: #20015

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-19 20:25:02 +00:00
Hirohito Higashi 1966a1c896 patch 9.2.0365: using int as bool
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: #20020

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-19 20:10:20 +00:00
Christian Brabandt 618a327ce6 patch 9.2.0364: tests: test_smoothscroll_textoff_showbreak() fails
Problem:  tests: test_smoothscroll_textoff_showbreak() fails
          (after v9.2.0363)
Solution: Add missing CheckRunVimInTerminal

related: #20011

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-19 20:01:11 +00:00
Furkan Sahin f2e920321c patch 9.2.0363: Vim9: variable shadowed by script-local function
Problem:  Vim9: variable shadowed by script-local function
          (Mao-Yining)
Solution: Set is_global flag to true in find_func() (Furkan Sahin)

fixes:  #20009
closes: #20011

Signed-off-by: Furkan Sahin <furkan-dev@proton.me>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-19 18:44:45 +00:00
Jaehwang Jung 0e31fb024c 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: #20012

AI-assisted: Codex

Signed-off-by: Jaehwang Jung <tomtomjhj@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-19 18:32:55 +00:00
dependabot[bot] 336533b355 CI: Bump the github-actions group across 2 directories with 4 updates
Bumps the github-actions group with 3 updates in the / directory: [msys2/setup-msys2](https://github.com/msys2/setup-msys2), [actions/cache](https://github.com/actions/cache) and [github/codeql-action](https://github.com/github/codeql-action).
Bumps the github-actions group with 1 update in the /.github/actions/test_artifacts directory: [actions/github-script](https://github.com/actions/github-script).

Updates `msys2/setup-msys2` from 2 to 2.31.0
- [Release notes](https://github.com/msys2/setup-msys2/releases)
- [Changelog](https://github.com/msys2/setup-msys2/blob/main/CHANGELOG.md)
- [Commits](https://github.com/msys2/setup-msys2/compare/v2...v2.31.0)

Updates `actions/cache` from 5 to 5.0.4
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/v5...v5.0.4)

Updates `github/codeql-action` from 4 to 4.35.1
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/v4...v4.35.1)

Updates `actions/github-script` from 8 to 9
- [Release notes](https://github.com/actions/github-script/releases)
- [Commits](https://github.com/actions/github-script/compare/v8...v9)

---
updated-dependencies:
- dependency-name: msys2/setup-msys2
  dependency-version: 2.31.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
- dependency-name: actions/cache
  dependency-version: 5.0.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
- dependency-name: github/codeql-action
  dependency-version: 4.35.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
- dependency-name: actions/github-script
  dependency-version: '9'
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
...

closes: #20001

Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-17 16:16:15 +00:00
Zdenek Dohnal 01d9a1951f patch 9.2.0361: tests: no tests for ch_listen() with IPs
Problem:  tests: no tests for ch_listen() with IPs
Solution: Add tests that this is disallowed
          (Zdenek Dohnal)

The functionality was removed, so the test is to make sure it fails
as expected.

closes: #19997

Signed-off-by: Zdenek Dohnal <zdohnal@redhat.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-17 15:55:53 +00:00
Keith Smiley 30d42855eb runtime(vim9): remove extra escaping in Open
Before 71fd19d7ac this function went
through a `:!` command on all platforms, so it needed special escaping for `#` and
others. After that commit it doesn't go through that path on unix
platforms. Then with 48581f2ba9 this
escaping was re-added on unix and it's needs since it goes through
`sh -c`, but it should not have the extra escaping specific to `:!`.

Specifically my original broken command is:

```
PATH=/usr/bin:/bin VIMRUNTIME=~/dev/vim/runtime ./src/vim -u NONE -c 'call dist#vim9#Open("https://github.com/keith/dotfiles/blob/7bce9f5c697df6a549cf97bf5606d8b639e5bf5a/vimrc#L19")'
```

Where the `#L19` ends up being opened as `%5C#L19`. But I verified this
case still works as well:

```
PATH=/usr/bin:/bin VIMRUNTIME=~/dev/vim/runtime ./src/vim -u NONE -c 'call dist#vim9#Open("foo bar.txt")'
```

Which is what would otherwise break if we weren't doing any shell
escaping on unix.

closes: #19996

Signed-off-by: Keith Smiley <keithbsmiley@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-17 15:02:39 +00:00
zeertzjq e666597622 runtime(doc): make window option description a bit less vague
Say explicitly that ":setlocal" sets the local value, while ":set" also
sets the global value.

related: #19993

Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-17 14:51:53 +00:00
tecis 68d3129a05 runtime(django): Removed unsupported template statements and filters by current LTS.
Removed djangoStatement:

- ifequal: Depricated version 4.0.
- endifequal: Depricated version 4.0.
- ifnotequal: Depricated version 4.0.
- endifnotequal: Depricated version 4.0.
- parsed
- trans: Renamed to `translate` in version 4.0.
- blocktrans: Renamed to `blocktranslate` in version 4.0.
- endblocktrans: Renamed to `endblocktranslate` in version 4.0.

Removed djangoFilter:

- fix_ampersands: Removed in version 1.8.
- length_is: Removed in version 5.1.

sources:

- Current LTS is version [5.2](https://www.djangoproject.com/download/#supported-versions).
- Documentation template builtins [5.2](https://docs.djangoproject.com/en/5.2/ref/templates/builtins/#truncatechars-html).
- Documentation template builtins [6](https://docs.djangoproject.com/en/6.0/ref/templates/builtins).
- [Django Deprecation Timeline](https://docs.djangoproject.com/en/6.0/internals/deprecation)

closes: #19994

Signed-off-by: tecis <67809811+tecis@users.noreply.github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-17 14:48:23 +00:00
tecis 8bcae3ca5d runtime(django): Add missing djangoStatement get_language_info.
Source: [get_language_info](https://docs.djangoproject.com/en/6.0/topics/i18n/translation/#get-language-info) .

related: #19994

Signed-off-by: tecis <67809811+tecis@users.noreply.github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-17 14:46:01 +00:00
tecis 6b26afea3b runtime(django): Add missing statements and filters.
Added the fallowing.

djangoStatement:

- querystring: Added in version Django 5.2.
- lorem: Added in version Django 1.8.
- verbatim: Added in version Django 1.10.

djangoFilter:

- force_escape: Added in version Django 1.8.
- iriencode: Added in version Django 1.8.
- json_script: Added in version 2.1.
- truncatechars_html: Added in version 1.7.

> According to current documentation the added keywords are supported [Django version 6](https://docs.djangoproject.com/en/6.0/ref/templates/builtins).

related: #19994

Signed-off-by: tecis <67809811+tecis@users.noreply.github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-17 14:44:51 +00:00
Christian Brabandt 450895d86b runtime(make): fix wrong highlighting with $ inside double quotes
fixes: #19986

Co-authored-by: Anton Khirnov <anton@khirnov.net>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-16 21:25:43 +00:00
Yasuhiro Matsumoto 1c299f2631 patch 9.2.0360: Cannot handle mouse-clicks in the tabpanel
Problem:  Cannot handle mouse-clicks in the tabpanel
Solution: Add support using the %[FuncName] atom for the tabpanel
          (Yasuhiro Matsumoto)

Extend the statusline/tabline click region mechanism to work with
'tabpanel'. The callback receives a dict with "area" set to "tabpanel"
and a "tabnr" key indicating which tab page label was clicked.

closes: #19960

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-16 20:33:00 +00:00
Hirohito Higashi 25e9fc44a8 patch 9.2.0359: wrong VertSplitNC highlighting on winbar
Problem:  wrong VertSplitNC highlighting on winbar
          (Maxim Kim, after v9.2.0349)
Solution: Use VertSplit instead of VertSplitNC for winbar rows
          (Hirohito Higashi).

vsep_row_is_curwin() and right_neighbor_at_row() used W_WINROW() which
excludes winbar rows from the window's range.  This caused the vertical
separator at winbar rows to use VertSplitNC even when curwin is adjacent.

Use w_winrow directly so winbar rows are included in the range check.

fixes:  #19985
closes: #19987

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-16 20:12:08 +00:00
Yasuhiro Matsumoto b076c49282 patch 9.2.0358: runtime(vimball): still path traversal attacks possible
Problem:  runtime(vimball): still path traversal attacks possible
Solution: block Windows driver letter paths (Yasuhiro Matsumoto)

The path traversal check in vimball#Vimball() did not reject file
names starting with a Windows drive letter (e.g. "C:/foo"). Backslashes
are normalized to forward slashes earlier, so UNC paths are caught by
the leading-slash check, but absolute drive-letter paths slipped
through and could write outside of g:vimball_home on Windows.

Add a "^\a:" check next to the existing "^/" check, and cover it with
a new test.

closes: #19989

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-16 20:03:39 +00:00
Yasuhiro Matsumoto ab02d65b1f runtime(gzip): Remove compatibility fall-backs, harden random filename generation
Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-16 19:21:56 +00:00
Yasuhiro Matsumoto 21c0cd29f8 runtime(netrw): add missing escape() calls
Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-15 20:47:29 +00:00
Christian Brabandt e6a84bb6b0 runtime(tar): missing g:tar_secure in tar#Extract()
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-16 14:42:47 +02:00
Christian Brabandt c78194e41d patch 9.2.0357: [security]: command injection via backticks in tag files
Problem:  [security]: command injection via backticks in tag files
          (Srinivas Piskala Ganesh Babu, Andy Ngo)
Solution: Disallow backticks before attempting to expand filenames.

Github Advisory:
https://github.com/vim/vim/security/advisories/GHSA-cwgx-gcj7-6qh8

Supported by AI

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-15 20:24:21 +00:00
McAuley Penney a414630393 patch 9.2.0356: Cannot apply 'scrolloff' context lines at end of file
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: #19040

Signed-off-by: McAuley Penney <jacobmpenney@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-15 19:17:13 +00:00
q1uf3ng 490b737f3e patch 9.2.0355: runtime(tar): missing path traversal checks in tar#Extract()
Problem:  runtime(tar): missing path traversal checks in tar#Extract()
Solution: Add check for leading slash, however gnu tar should already
          detect this (q1uf3ng)

tar#Extract() did not check for ../ sequences or absolute paths,
unlike zip#Extract() which was patched in recent commits. Add the
same checks: ../ (relative traversal), leading slash (Unix), drive
letter and UNC/leading slash (Windows).

closes: #19981

Signed-off-by: q1uf3ng <q1uf3ng@protone.me>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-15 18:36:20 +00:00
Martin Schwan 0e02be1919 patch 9.2.0354: filetype: not all Bitbake include files are recognized
Problem:  filetype: not all Bitbake include files are recognized
Solution: Enhance the file detection logic and consider varflags
          (Martin Schwan)

closes: #19983

Signed-off-by: Martin Schwan <m.schwan@phytec.de>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-15 18:11:07 +00:00
Martin Schwan 2041478e2a runtime(bitbake): support forward-slashes in bitbake varflags
Enable syntax highlighting for forward-slashes in Bitbake variables with
varflags. Bitbake allows for forward-slashes in both the variable name
and their potential varflags. E.g. the following should match:

    FOO_BAR[baz] = "foobar"
    FOO_BAR_foo/bar[baz] = "foobar"
    FOO_BAR_foo/bar[baz/bazzer] = "foobar"

Also allow plus-signs in variable names, to be in line with normal
variable names.

related: #19983

Signed-off-by: Martin Schwan <m.schwan@phytec.de>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-15 18:07:18 +00:00
John Marriott 7cc73a6c66 patch 9.2.0353: Missing out-of-memory check in register.c
Problem:  Missing out-of-memory check in register.c
Solution: Check for memory allocation failure and return NULL
          (John Marriott).

closes: #19949

Signed-off-by: John Marriott <basilisk@internode.on.net>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-15 17:54:22 +00:00
Hirohito Higashi 60e925ca0e runtime(doc): Tweak documentation style in channel.txt
closes: #19978

Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-15 17:00:19 +00:00
Foxe Chen 2252d2c1e5 patch 9.2.0352: 'winhighlight' of left window blends into right window
Problem: 'winhighlight' of left window blends into right window
Solution: Allow to push a NULL highlight override (Foxe Chen)

closes: #19980

Signed-off-by: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-15 16:52:09 +00:00
Yasuhiro Matsumoto bfa46a52f6 patch 9.2.0351: repeat_string() can be improved
Problem:  repeat_string() can be improved
Solution: Replace the for() loop by an exponential growing while loop
          (Yasuhiro Matsumoto)

closes: #19977

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-15 04:12:55 +00:00
q1uf3ng 351a16c88f runtime(zip): also block single leading slash and absolute paths in Extract
zip#Write(): the Windows path check did not match a single leading
slash (/path), which resolves to the current drive root on Windows.
Simplify the regex to match any leading slash or backslash.

zip#Extract(): add absolute path checks for both Unix and Windows,
matching the existing checks in zip#Write().

closes: #19976

Signed-off-by: q1uf3ng <glna9@protonmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-15 04:03:02 +00:00
Christian Brabandt 4c28794716 patch 9.2.0350: Enabling modelines poses a risk
Problem:  Enabling modelines poses a risk, cannot whitelist specific
          modelines
Solution: Include the 'modelinestrict' option, enabled by default, that
          allows only a few very specific modelines, all others will be
          ignored

When set (which it is by default), only the following settings will be
applied, all others will be ignored:

  'autoindent'
  'cindent'
  'commentstring'
  'expandtab'
  'filetype'
  'foldcolumn'
  'foldenable'
  'foldmethod'
  'modifiable'
  'readonly'
  'rightleft'
  'shiftwidth'
  'smartindent'
  'softtabstop'
  'spell'
  'spelllang'
  'tabstop'
  'textwidth'
  'varsofttabstop'
  'vartabstop'

Supported by AI

closes: #19875

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-14 18:57:41 +00:00
Hirohito Higashi c72196529b patch 9.2.0349: cannot style non-current window separator
Problem:  cannot style non-current window separator
Solution: Add the VertSplitNC highlighting group
          (Hirohito Higashi).

Add VertSplitNC highlight group for vertical separators of non-current
windows, similar to StatusLine/StatusLineNC distinction.  The separator
adjacent to the current window uses VertSplit, others use VertSplitNC.
Default: linked to VertSplit.

At the current window's status line rows, the separator cell is drawn as
a space with the StatusLine highlight so it blends into the status line
without a stray fillchar glyph.

Also:
- :redrawstatus[!] now also redraws vertical separators.
- statusline height changes trigger vsep redraw.

closes: #19951

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-14 18:42:38 +00:00
Christian Brabandt 91b402f575 patch 9.2.0348: potential buffer underrun when setting statusline like option
Problem:  potential buffer underrun when settings statusline like option
          (q1uf3ng)
Solution: Validate that p > out before accessing p[-1]

closes: #19961

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-14 18:18:36 +00:00
Ozaki Kiichi f9cb0d14dc CI: Separate out ASan tests
closes: #19962

Signed-off-by: Ozaki Kiichi <gclient.gaap@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-14 18:13:32 +00:00
Yegappan Lakshmanan 39875daec2 patch 9.2.0347: Vim9: script-local variable not found
Problem:  Vim9: script-local variable not found after function call
          (Mao-Yining)
Solution: Accept a script local variable in a function which overrides a
          previous block-scope variable (Yegappan Lakshmanan)

fixes:  #19959
closes: #19963

Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-14 17:02:21 +00:00
Hirohito Higashi c4fe1e958a patch 9.2.0346: Wrong cursor position when entering command line window
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: #19964

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-14 16:56:03 +00:00
zeertzjq efbd482116 patch 9.2.0345: Wrong autoformatting with 'autocomplete'
Problem:  Wrong autoformatting with 'autocomplete'.
Solution: Don't trigger autoformatting when ending autocompletion
          without selecting an item (zeertzjq).

fixes:  #19954
closes: #19970

Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-14 16:48:55 +00:00
Zdenek Dohnal 962a540d76 patch 9.2.0344: channel: ch_listen() can bind to network interface
Problem:  channel: ch_listen() can bind to network interface
Solution: Only allow to use Unix domain sockets or localhost interface
          (Zdenek Dohnal)

related: #19231
related: #19799
closes:  #19973

Signed-off-by: Zdenek Dohnal <zdohnal@redhat.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-14 16:37:25 +00:00
Hirohito Higashi 4b6f3f1d16 runtime(doc): Tweak documentation style in options.txt
closes: #19971

Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-14 16:31:10 +00:00
James McCoy 9d95410aa4 patch 9.2.0343: tests: test_clientserver may fail on slower systems
Problem:  tests: test_clientserver may fail on slower systems
Solution: Wait for argc() before checking argv() (James McCoy).

On slower systems, the argv() check may run before the server has
populated the arg list.

Add a wait for argc() to be 3 to be more tolerant of such systems

closes: #19974

Signed-off-by: James McCoy <jamessan@jamessan.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-14 16:25:50 +00:00
Christian Brabandt c922202ea2 patch 9.2.0342: tests: test_excmd.vim leaves swapfiles behind
Problem:  tests: test_excmd.vim leaves swapfiles behind
Solution: Close open buffer using :bw!

related: #19975

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-14 16:12:10 +00:00
q1uf3ng fcc4276db3 patch 9.2.0341: some functions can be run from the sandbox
Problem:  some functions can be run from the sandbox
Solution: Block them, so they are not accessible from a modeline
          (q1uf3ng)

closes: #19975

Co-authored-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: q1uf3ng <q1uf3ng@protone.me>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-14 15:58:40 +00:00
Christian Brabandt 6836599733 runtime(zip): Detect path traversal issues on Windows
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-14 14:42:48 +02:00
Christian Brabandt 86dcb1878c Revert "runtime(jjdescription): allow to configure summary width"
This reverts commit 86ae6858ab.

related: #19905

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-13 15:50:07 +02:00
Yasuhiro Matsumoto efedcd1e6f patch 9.2.0340: pum_redraw() may cause flicker
Problem:  pum_redraw() may cause flicker
Solution: Wrap pum_redraw() in synchronized output to avoid flicker
          (Yasuhiro Matsumoto)

closes: #19955

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-12 16:24:09 +00:00
Yasuhiro Matsumoto dc4734448b Fix a few typos
closes: #19953

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-12 16:19:36 +00:00
Yasuhiro Matsumoto 105d65e29b patch 9.2.0339: regexp: nfa_regmatch() allocates and frees too often
Problem:  nfa_regmatch() allocates and frees two list buffers on every
          call, causing unnecessary memory allocation overhead for
          frequently used patterns.
Solution: Cache the list buffers in the regprog struct and reuse them
          on subsequent top-level calls. Recursive calls still allocate
          their own buffers. Free cached buffers in nfa_regfree()
          (Yasuhiro Matsumoto).

Benchmark: 10K lines, `:%s` x50 iterations

| Pattern | Before | After | Improvement |
|---|---|---|---|
| `\<\(\w\+\%(ing\|tion\|ed\|ly\)\|\w\{3,}\)\>` (many matches) | 4.384s | 4.299s | -2% |
| `\(foo\|bar\|baz\)\{3,}\(qux\|quux\|corge\)\{2,}...` (no match, high nstate) | 16.927s | 3.015s | -82% |

closes: #19956

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-12 16:12:22 +00:00
Emilia 86ae6858ab runtime(jjdescription): allow to configure summary width
Allow to configure max length for the summary line and fall back to gits
setting.

closes: #19905

Signed-off-by: Emilia <emilia@bewitching.dev>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-11 15:37:40 +00:00
Yasuhiro Matsumoto 0802e00f2a patch 9.2.0338: Cannot handle mouseclicks in the tabline
Problem:  Cannot handle mouseclicks in the tabline
Solution: Support %[FuncName] click regions in 'tabline', add "area" key
          to the click info dict (Yasuhiro Matsumoto).

The previous implementation resolved and stored click regions only for
per-window statuslines; the tabline path in win_redr_custom() (wp==NULL)
parsed %[FuncName] but discarded the regions, and tabline clicks were
dispatched via TabPageIdxs[] which didn't know about them.

Add a global tabline_stl_click array populated from the tabline path,
refactor stl_click_handler() to take the regions directly, and dispatch
matching clicks from do_mouse() before falling through to tab selection.
The winid entry in the callback dict is 0 for tabline clicks.

related: #19841
closes:  #19950

Supported by AI.

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-11 15:26:14 +00:00
James McCoy 8fd37e42a6 patch 9.2.0337: list indexing broken on big-endian 32-bit platforms
Problem:  check_range_index_one() expects a long * but n1 is a
          varnumber_T. Casting varnumber_T * to long * is undefined
          behaviour and reads the wrong bytes on big-endian platforms
          (John Paul Adrian Glaubitz)
Solution: Use a local long variable and pass that pointer to
          check_range_index_one() (James McCoy)

fixes:  #19798
closes: #19952

Signed-off-by: James McCoy <jamessan@jamessan.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-11 15:04:00 +00:00
Christian Brabandt 01be43047f runtime(hlyank): verify winid in lambda before matchdelete()
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-11 14:53:48 +00:00
Cimbali e29f33ef51 patch 9.2.0336: libvterm: no terminal reflow support
Problem:  libvterm: no terminal reflow support
Solution: Support for reflowing, sync libvterm to revision 843
          (Cimbali)

fixes:  #2865
closes: #8365
closes: #19863

Co-authored-by: Paul "LeoNerd" Evans <leonerd@leonerd.org.uk>
Signed-off-by: Cimbali <me@cimba.li>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-10 22:15:36 +00:00
Yasuhiro Matsumoto 71c10dcd58 patch 9.2.0335: json_encode() uses recursive algorithm
Problem:  json_encode() uses recursive algorithm
Solution: Convert from recursive to iterative algorithm to prevent
          stack overflow on deep recursive levels
          (Yasuhiro Matsumoto).

closes: #19839

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-10 21:37:44 +00:00
Gary Johnson dd40b1af5b patch 9.2.0334: GTK: window geometry shrinks with with client-side decorations
Problem:  On GTK3 with client-side decorations the window opens with
          wrong &columns/&lines, and each :tabnew/:tabclose cycle
          shrinks the size further.
Solution: Measure and compensate for the CSD frame offset, discard
          spurious configure events from tabline show/hide
          (Gary Johnson).

closes: #19853

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Signed-off-by: Gary Johnson <garyjohn@spocom.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-10 21:23:38 +00:00
Nihaal Sangha 871e6c6cf9 patch 9.2.0333: filetype: PklProject files are not recognized
Problem:  filetype: PklProject files are not recognized
Solution: Detect PklProject files as pkl filetype
          (Nihaal Sangha).

Reference:
https://pkl-lang.org/
https://github.com/apple/pkl
https://github.com/apple/pkl-pantry

closes: #19948

Signed-off-by: Nihaal Sangha <nihaal.git@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-10 18:40:37 +00:00
Christian Brabandt 01e9670212 runtime(doc): Update documentation on statusline click handler
related: #19841

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-10 18:37:25 +00:00
Yasuhiro Matsumoto 7e0eb5271e patch 9.2.0332: popup: still opacity rendering issues
Problem:  popup: still opacity rendering issues
Solution: Fix remaining issues, see below
          (Yasuhiro Matsumoto).

This PR fixes the following issues:

- Padding blend hole at wide char boundary: when a padding cell overlaps
  the second half of a wide character, the right half's attr value is
  unreliable. Use the left half's saved attr for blending instead.

- Wide char background split at popup boundary: when a wide character in
  an upper popup straddles the edge of a lower opacity popup, both
  halves got different background colors. Since terminals cannot render
  different left/right background colors for a wide character, detect
  the lower popup with popup_is_over_opacity() and use the non-popup
  side's underlying attr for both halves.

- Wrong blend color with cterm-only highlights under 'termguicolors':
  when a popup highlight has ctermbg but no guibg, bg_rgb is set to
  CTERMCOLOR (not INVALCOLOR). hl_blend_attr() used this value as a real
  RGB color, producing gray instead of the intended color. Use
  COLOR_INVALID() to detect both INVALCOLOR and CTERMCOLOR, and fall back
  to converting the cterm color number to RGB.

closes: #19943

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-10 17:43:59 +00:00
Christian Brabandt 07faa961a0 patch 9.2.0331: spellfile: stack buffer overflows in spell file generation
Problem:  spell_read_aff() uses sprintf() into a fixed-size stack buffer
          without bounds checking. store_aff_word() uses STRCAT() to
          append attacker-controlled strings into newword[MAXWLEN] without
          checking remaining space. Both are reachable via :mkspell with
          crafted .aff/.dic files (xinyi234)
Solution: Replace sprintf() with vim_snprintf() in spell_read_aff().
          Replace STRCAT() with STRNCAT() with explicit remaining-space
          calculation in store_aff_word().

closes: #19944

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-09 22:27:36 +00:00
zeertzjq 2fbc69c9ad patch 9.2.0330: tests: some patterns in tar and zip plugin tests not strict enough
Problem:  Some patterns in tar and zip plugin tests not strict enough.
Solution: Use assert_equal() for lines that should match exactly. Match
          a literal dot properly (zeertzjq).

closes: #19946

Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-09 22:21:23 +00:00
Christian Brabandt 158947e294 patch 9.2.0329: tests: test_indent.vim leaves swapfiles behind
Problem:  tests: test_indent.vim leaves swapfiles behind
Solution: Close open buffer using :bw! instead of :close!

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-09 21:30:19 +00:00
Yasuhiro Matsumoto d42b047f78 patch 9.2.0328: Cannot handle mouseclicks in the statusline
Problem:  Cannot handle mouseclicks in the statusline
Solution: Add the %[FuncName] statusline item to define clickable
          regions with a callback function. (Yasuhiro Matsumoto)

closes: #19841

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-09 21:15:30 +00:00
Christian Brabandt 6c16ccaf61 patch 9.2.0327: filetype: uv scripts are not detected
Problem:  filetype: uv scripts are not detected
          (Asger Hautop Drewsen)
Solution: Detect uv scripts as python filetype if the shebang line
          contains "uv run"

Reference:
https://docs.astral.sh/uv/guides/scripts/#using-a-shebang-to-create-an-executable-file

fixes: #19941

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-09 20:50:01 +00:00
Joël Stemmer f554a7c709 runtime(jjdescription): Add highlighting for 'Renamed' status lines
`jj status` output uses the 'R' prefix for renamed files.

closes: #19879

Signed-off-by: Joël Stemmer <jstemmer@google.com>
Signed-off-by: Gregory Anders <greg@gpanders.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-09 19:33:05 +00:00
Joël Stemmer 959817472d runtime(jjdescription): Anchor status matches to start of line
The regex for status line highlighting was too broad, `jjComment` lines
containing e.g. the letter 'A' followed by a space anywhere in the line
were highlighted.

related: #19879

Signed-off-by: Joël Stemmer <jstemmer@google.com>
Signed-off-by: Gregory Anders <greg@gpanders.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-09 19:30:53 +00:00
Aaron Burrow 4a1bcc67b4 patch 9.2.0326: runtime(tar): but with dotted path
Problem:  runtime(tar): but with dotted path
Solution: Do not strip everything after the first dot
          (Aaron Burrow)

tar#Extract was getting the extensionless basename by
stripping away everything starting with the leftmost
dot.  So if a directory had a dot or the file had an
'extra' dot then the code did the wrong thing.  For
example, if it was given:

  /tmp/foo.bar/baz.tar.gz

Then it would treat /tmp/foo as the extensionless
basename, but it actually should have grabbed:

  /tmp/foo.bar/baz

This patch fixes the issue by instead looking at the
rightmost dot(s).

This bug was discovered by ChatGPT 5.4.  I wrote the
patch and tested vim.

closes: #19930

Signed-off-by: Aaron Burrow <burrows@fastmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-09 19:11:16 +00:00
Aaron Burrow 00285c035a patch 9.2.0325: runtime(tar): bug in zstd handling
Problem:  patch 9.2.0325: runtime(tar): bug in zstd handling
Solution: use correct --zstd argument, separated from other arguments,
          rework testing framework (Aaron Burrow).

The tar.vim plugin allows vim to read and manipulate zstd archives,
but it had a bug that caused extraction attempts to fail.
Specifically, if the archive has a .tar.zst or .tzst extension, then
the code was generating invalid extraction commands that looked like
this:

  tar --zstdpxf foo.tar.zst foo

When they should be like this:

  tar --zstd -pxf foo.tar.zst foo

This patch changes the flag manipulation logic so that --zstd isn't
glued to pxf.

The labor for this change was divided between ChatGPT 5.4 and me.
ChatGPT 5.4 identified the issue (from a code scan?), and I wrote
the patch and tested vim.

related: #19930

Signed-off-by: Aaron Burrow <burrows@fastmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-09 19:06:13 +00:00
zeertzjq 3e2012914e patch 9.2.0324: 0x9b byte not unescaped in <Cmd> mapping
Problem:  0x9b byte not unescaped in <Cmd> mapping (BenYip).
Solution: Translate K_CSI to CSI like what is done in vgetc().
          (zeertzjq).

fixes:  #19936
closes: #19937

Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-09 18:55:02 +00:00
Hirohito Higashi 9d9381fb28 runtime(doc): Tweak documentation style a bit
closes: #19939

Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-09 18:49:43 +00:00
Maxim Kim c23aebdf99 runtime(org): Link to generic bold/Italic highlighting groups
fixes: #19933

Signed-off-by: Maxim Kim <habamax@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-09 18:44:45 +00:00
Hirohito Higashi 72cefe6b72 runtime(help): support highlighting groups in translated syntax doc
closes: #19942

Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-09 18:38:35 +00:00
Christian Brabandt 3e194b1068 runtime(vimball): detect more path traversal attacks
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-09 18:35:39 +00:00
Stefan VanBuren c2734dc03c patch 9.2.0323: filetype: buf.lock files are not recognized
Problem:  filetype: buf.lock files are not recognized
Solution: Detect buf.lock files as yaml filetype
          (Stefan VanBuren)

Reference:
https://buf.build/docs/configuration/v2/buf-lock/

closes: #19935

Signed-off-by: Stefan VanBuren <svanburen@buf.build>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-08 18:30:46 +00:00
Yasuhiro Matsumoto 3d224e42e7 patch 9.2.0322: tests: test_popupwin fails
Problem:  tests: test_popupwin fails (after v9.2.0319)
Solution: Regenerate the dump file (Yasuhiro Matsumoto).

The reference dump for Test_popupwin_opacity_wide_2 was not updated
when patch 9.2.0319 changed the blending behavior for double-width
characters at popup padding boundaries. The covered half of a
double-width character now correctly shows a space instead of the
full character.

related: #19881
closes:  #19934

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-08 18:21:13 +00:00
908 changed files with 40685 additions and 12986 deletions
-52
View File
@@ -1,52 +0,0 @@
version: "{build}"
image: Visual Studio 2015
skip_tags: true
environment:
matrix:
- FEATURE: HUGE
# Alternate environments, not used right now. 2022 is a lot slower.
#
# - job_name: VS-2015
# appveyor_build_worker_image: Visual Studio 2015
# FEATURE: HUGE
# - job_name: VS-2017
# appveyor_build_worker_image: Visual Studio 2017
# FEATURE: HUGE
# - job_name: VS-2019
# appveyor_build_worker_image: Visual Studio 2019
# FEATURE: HUGE
# - job_name: VS-2022
# appveyor_build_worker_image: Visual Studio 2022
# FEATURE: HUGE
# disabled
# - FEATURE: TINY
# - FEATURE: NORMAL
matrix:
fast_finish: true
before_build:
- call ver
- ci\appveyor.bat install
build_script:
- ci\appveyor.bat build
test_script:
- ci\appveyor.bat test
artifacts:
- path: src/vim.exe
name: vim
- path: src/gvim.exe
name: gvim
# vim: sw=2 sts=2 et ts=8 sr
+15 -6
View File
@@ -18,6 +18,7 @@ runtime/autoload/javascriptcomplete.vim @jsit
runtime/autoload/modula2.vim @dkearns
runtime/autoload/rubycomplete.vim @segfault @dkearns
runtime/autoload/rust.vim @lilyball
runtime/autoload/tohtml.vim @fritzophrenic
runtime/autoload/typeset.vim @lifepillar
runtime/autoload/xmlformat.vim @chrisbra
runtime/autoload/dist/json.vim @habamax
@@ -133,6 +134,7 @@ runtime/doc/xxd-ru.1 @RestorerZ
runtime/doc/xxd-ru.UTF-8.1 @RestorerZ
runtime/ftplugin/abaqus.vim @costerwi
runtime/ftplugin/abnf.vim @A4-Tacks
runtime/ftplugin/algol68.vim @dkearns
runtime/ftplugin/antlr4.vim @jiangyinzuo
runtime/ftplugin/apache.vim @dubgeiser
runtime/ftplugin/arduino.vim @k-takata
@@ -338,6 +340,7 @@ runtime/ftplugin/thrift.vim @jiangyinzuo
runtime/ftplugin/tiasm.vim @Freed-Wu
runtime/ftplugin/tidy.vim @dkearns
runtime/ftplugin/tmux.vim @ericpruitt
runtime/ftplugin/tolk.vim @redavy
runtime/ftplugin/toml.vim @averms
runtime/ftplugin/tt2html.vim @petdance
runtime/ftplugin/twig.vim @ribru17
@@ -402,6 +405,7 @@ runtime/indent/json.vim @elzr
runtime/indent/jsonc.vim @izhakjakov
runtime/indent/julia.vim @carlobaldassi
runtime/indent/just.vim @pbnj
runtime/indent/karel.vim @KnoP-01
runtime/indent/kdl.vim @imsnif @jiangyinzuo
runtime/indent/kotlin.vim @udalov
runtime/indent/krl.vim @KnoP-01
@@ -468,10 +472,12 @@ runtime/pack/dist/opt/helptoc/ @kennypete
runtime/pack/dist/opt/matchit/ @chrisbra
runtime/pack/dist/opt/nohlsearch/ @habamax
runtime/plugin/manpager.vim @Konfekt
runtime/syntax/shared/hgcommitDiff.vim @vegerot
runtime/plugin/tohtml.vim @fritzophrenic
runtime/syntax/2html.vim @fritzophrenic
runtime/syntax/abaqus.vim @costerwi
runtime/syntax/abnf.vim @A4-Tacks
runtime/syntax/aidl.vim @dpelle
runtime/syntax/algol68.vim @dkearns
runtime/syntax/amiga.vim @sodero
runtime/syntax/ant.vim @dkearns
runtime/syntax/antlr4.vim @jiangyinzuo
@@ -578,17 +584,17 @@ runtime/syntax/java.vim @zzzyxwvut
runtime/syntax/javascript.vim @fleiner
runtime/syntax/jinja.vim @gpanders
runtime/syntax/jjdescription.vim @gpanders
runtime/syntax/jq.vim @vito-c
runtime/syntax/json.vim @vito-c
runtime/syntax/jsonc.vim @izhakjakov
runtime/syntax/julia.vim @carlobaldassi
runtime/syntax/just.vim @pbnj
runtime/syntax/jq.vim @vito-c
runtime/syntax/karel.vim @kirillmorozov
runtime/syntax/kconfig.vim @chrisbra
runtime/syntax/kdl.vim @imsnif @jiangyinzuo
runtime/syntax/kitty.vim @OXY2DEV
runtime/syntax/kivy.vim @prophittcorey
runtime/syntax/kotlin.vim @udalov
runtime/syntax/kdl.vim @imsnif @jiangyinzuo
runtime/syntax/krl.vim @KnoP-01
runtime/syntax/leex.vim @jparise
runtime/syntax/less.vim @genoma
@@ -605,8 +611,8 @@ runtime/syntax/m3quake.vim @dkearns
runtime/syntax/mailcap.vim @dkearns
runtime/syntax/mallard.vim @jhradilek
runtime/syntax/markdown.vim @tpope
runtime/syntax/mbsync.vim @fymyte
runtime/syntax/mason.vim @petdance
runtime/syntax/mbsync.vim @fymyte
runtime/syntax/mediawiki.vim @avidseeker
runtime/syntax/meson.vim @Liambeguin
runtime/syntax/mf.vim @lifepillar
@@ -655,8 +661,8 @@ runtime/syntax/qml.vim @ChaseKnowlden
runtime/syntax/racket.vim @benknoble
runtime/syntax/raml.vim @in3d
runtime/syntax/rapid.vim @KnoP-01
runtime/syntax/ratpoison.vim @trapd00r
runtime/syntax/rasi.vim @fymyte
runtime/syntax/ratpoison.vim @trapd00r
runtime/syntax/rc.vim @chrisbra
runtime/syntax/rcs.vim @hdima
runtime/syntax/rebol.vim @mrdubya
@@ -672,8 +678,10 @@ runtime/syntax/scala.vim @derekwyatt
runtime/syntax/scheme.vim @evhan
runtime/syntax/scss.vim @tpope
runtime/syntax/sed.vim @dkearns
runtime/syntax/shared/debversions.vim @jamessan
runtime/syntax/sgf.vim @lykahb
runtime/syntax/shaderslang.vim @mTvare6
runtime/syntax/shared/debversions.vim @jamessan
runtime/syntax/shared/hgcommitDiff.vim @vegerot
runtime/syntax/skhd.vim @kiyoon
runtime/syntax/solidity.vim @coti-z
runtime/syntax/spajson.vim @dseomn
@@ -698,6 +706,7 @@ runtime/syntax/thrift.vim @jiangyinzuo
runtime/syntax/tiasm.vim @Freed-Wu
runtime/syntax/tidy.vim @dkearns
runtime/syntax/tmux.vim @ericpruitt
runtime/syntax/tolk.vim @redavy
runtime/syntax/toml.vim @averms
runtime/syntax/tt2.vim @petdance
runtime/syntax/tt2html.vim @petdance
@@ -0,0 +1,325 @@
name: Build Vim on Linux
description: Build Vim on Linux
inputs:
features:
description: Vim features
required: true
compiler:
description: Compiler
required: true
architecture:
description: Architecture
required: false
extra:
description: Extra flags
required: true
shadow:
description: Shadow directory
required: false
interface:
description: Interface of language interpreter
required: false
lua_ver:
description: Lua version
required: false
python3:
description: Python3 ABI type
required: false
coverage:
description: Enable coverage
required: false
runs:
using: "composite"
steps:
- name: Check Filelist (for packaging)
shell: bash
run: |
echo '::group::Check Filelist (for packaging)'
# If any files in the repository are not listed in Filelist this will
# exit with an error code and list the missing entries.
make -f ci/unlisted.make
echo '::endgroup::'
- name: Check hlgroups (are any new hlgroups added, but not handled in highlight.c)
shell: bash
run: |
echo '::group::Check hlgroups (are any new hlgroups added, but not handled in highlight.c)'
# If any highlight groups have been documented, but not handled in
# highlight.c, nor listed as 'intentionally left out' in hlgroups.ignore,
# exit with an error code and list the missing entries.
make -C ci -f hlgroups.make
echo '::endgroup::'
- name: Report executable syntax tests
if: contains(fromJSON(inputs.extra), 'syn_test_execs')
shell: bash
run: |
echo '::group::Report executable syntax tests'
# Search and list all found executable syntax tests, and exit with
# an error code.
make -C runtime/syntax executables
echo '::endgroup::'
- name: Add i386 packages to dpkg
if: inputs.architecture == 'i386'
shell: bash
run: |
echo '::group::Add i386 packages to dpkg'
sudo dpkg --add-architecture i386
echo '::endgroup::'
- name: Uninstall snap
shell: bash
run: |
echo '::group::Uninstall snap'
sudo bash ci/remove_snap.sh
echo '::endgroup::'
- name: Enable debug packages
shell: bash
run: |
echo '::group::Enable debug packages'
# Some of the ASAN suppressions are in libraries linked with dlopen
# and symbolization of them requires these debug packages.
sudo apt install ubuntu-dbgsym-keyring
sudo cp ci/ddebs.list /etc/apt/sources.list.d/ddebs.list
sudo cp ci/pinned-pkgs /etc/apt/preferences.d/pinned-pkgs
echo '::endgroup::'
# TODO: switch to GTK4 GUI
- name: Install packages
shell: bash
run: |
echo '::group::Install packages'
# This is added by default, and it is often broken, but we don't need anything from it
sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list
PKGS=( \
gettext \
x11-utils \
labwc \
wl-clipboard \
wayland-utils \
libgtk-3-dev:${{ inputs.architecture }} \
libgtk-3-bin:${{ inputs.architecture }} \
desktop-file-utils \
libc6-dbgsym:${{ inputs.architecture }} \
libtool-bin \
libncurses-dev:${{ inputs.architecture }} \
libxt-dev:${{ inputs.architecture }} \
libegl-mesa0:${{ inputs.architecture }} \
libegl1:${{ inputs.architecture }} \
libegl1-mesa-dev:${{ inputs.architecture }} \
libepoxy-dev:${{ inputs.architecture }} \
libwayland-egl1:${{ inputs.architecture }} \
libwayland-client0:${{ inputs.architecture }} \
libwayland-cursor0:${{ inputs.architecture }} \
locales-all \
software-properties-common \
)
if ${{ contains(fromJSON(inputs.extra), 'asan') }} && ${{ contains(inputs.architecture, 'native') }}; then
PKGS+=( \
libepoxy0-dbgsym:${{ inputs.architecture }} \
libxdamage1-dbgsym:${{ inputs.architecture }} \
libxcb1-dbgsym:${{ inputs.architecture }} \
libgtk-3-bin-dbgsym:${{ inputs.architecture }} \
libgtk-3-0t64-dbgsym:${{ inputs.architecture }} \
libglib2.0-0t64-dbgsym:${{ inputs.architecture }} \
libglib2.0-bin-dbgsym:${{ inputs.architecture }} \
libglib2.0-dev-bin-dbgsym:${{ inputs.architecture }} \
)
fi
if ${{ inputs.features == 'huge' }}; then
LUA_VER=${{ inputs.lua_ver || '5.4' }}
PKGS+=( \
autoconf \
gdb \
lcov \
libcanberra-dev \
libperl-dev \
python3-dev \
liblua${LUA_VER}-dev \
lua${LUA_VER} \
ruby-dev \
tcl-dev \
cscope \
libsodium-dev \
attr \
libattr1-dev
)
fi
if ${{ contains(fromJSON(inputs.extra), 'proto') }}; then
PKGS+=( python3-clang )
fi
sudo apt-get update && sudo apt-get upgrade -y --allow-downgrades && sudo apt-get install -y --allow-downgrades "${PKGS[@]}"
- name: Install gcc-${{ env.GCC_VER }}
if: inputs.compiler == 'gcc'
shell: bash
run: |
echo '::group::Install gcc-${{ env.GCC_VER }}'
# ubuntu-toolchain-r/test PPA for gcc-13 compiler
# disabled because the installation failed, causing test failures
# sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y
sudo apt-get update -y
sudo apt-get install -y gcc-${{ env.GCC_VER }}:${{ inputs.architecture }}
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-${{ env.GCC_VER }} 100
sudo update-alternatives --set gcc /usr/bin/gcc-${{ env.GCC_VER }}
echo '::endgroup::'
- name: Install clang-${{ env.CLANG_VER }}
if: inputs.compiler == 'clang'
shell: bash
run: |
echo '::group::Install clang-${{ env.CLANG_VER }}'
. /etc/lsb-release
curl -fsSL https://apt.llvm.org/llvm-snapshot.gpg.key | gpg --dearmor | sudo tee /usr/share/keyrings/llvm-archive-keyring.gpg > /dev/null
echo "Types: deb
URIs: https://apt.llvm.org/${DISTRIB_CODENAME}/
Suites: llvm-toolchain-${DISTRIB_CODENAME}-${{ env.CLANG_VER }}
Components: main
Signed-By: /usr/share/keyrings/llvm-archive-keyring.gpg" | sudo tee /etc/apt/sources.list.d/llvm-toolchain.sources > /dev/null
sudo apt-get update -y
sudo apt-get install -y clang-${{ env.CLANG_VER }} llvm-${{ env.CLANG_VER }}
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-${{ env.CLANG_VER }} 100
sudo update-alternatives --set clang /usr/bin/clang-${{ env.CLANG_VER }}
sudo update-alternatives --install /usr/bin/llvm-cov llvm-cov /usr/bin/llvm-cov-${{ env.CLANG_VER }} 100
sudo update-alternatives --install /usr/bin/asan_symbolize asan_symbolize /usr/bin/asan_symbolize-${{ env.CLANG_VER }} 100
echo '::endgroup::'
- name: Set up environment
shell: bash
run: |
echo '::group::Set up environment'
mkdir -p "${LOG_DIR}"
mkdir -p "${HOME}/bin"
echo "${HOME}/bin" >> $GITHUB_PATH
(
echo "LINUX_VERSION=$(uname -r)"
echo "NPROC=$(getconf _NPROCESSORS_ONLN)"
echo "TMPDIR=$(mktemp -d -p /tmp)"
case "${{ inputs.features }}" in
tiny)
echo "TEST=testtiny"
if ${{ contains(fromJSON(inputs.extra), 'nogui') }}; then
CONFOPT="--disable-gui"
fi
;;
normal)
;;
huge)
echo "TEST=scripttests test_libvterm indenttest syntaxtest"
INTERFACE=${{ inputs.interface || 'yes' }}
if ${{ inputs.python3 == 'stable-abi' }}; then
PYTHON3_CONFOPT="--with-python3-stable-abi=3.8"
fi
# The ubuntu-24.04 CI runner does not provide a python2 package.
CONFOPT="--enable-perlinterp=${INTERFACE} --enable-pythoninterp=no --enable-python3interp=${INTERFACE} --enable-rubyinterp=${INTERFACE} --enable-luainterp=${INTERFACE} --enable-tclinterp=${INTERFACE} ${PYTHON3_CONFOPT}"
;;
esac
if ${{ contains(fromJSON(inputs.extra), 'no_x11_wl') }}; then
CONFOPT="${CONFOPT} --without-x --disable-gui --without-wayland --enable-socketserver"
fi
if ${{ inputs.coverage == true }}; then
CFLAGS="${CFLAGS} --coverage -DUSE_GCOV_FLUSH"
echo "LDFLAGS=--coverage"
fi
if ${{ contains(fromJSON(inputs.extra), 'uchar') }}; then
CFLAGS="${CFLAGS} -funsigned-char"
fi
if ${{ contains(fromJSON(inputs.extra), 'testgui') }}; then
echo "TEST=-C src testgui"
fi
if ${{ contains(fromJSON(inputs.extra), 'unittests') }}; then
echo "TEST=unittests"
fi
if ${{ contains(fromJSON(inputs.extra), 'asan') }}; then
echo "SANITIZER_CFLAGS=-g -O0 -DABORT_ON_INTERNAL_ERROR -DEXITFREE -fsanitize-recover=all -fsanitize=address -fsanitize=undefined -fno-omit-frame-pointer"
echo "ASAN_OPTIONS=print_stacktrace=1:log_path=${LOG_DIR}/asan"
echo "UBSAN_OPTIONS=print_stacktrace=1:log_path=${LOG_DIR}/ubsan"
echo "LSAN_OPTIONS=suppressions=${GITHUB_WORKSPACE}/src/testdir/lsan-suppress.txt"
fi
if ${{ contains(fromJSON(inputs.extra), 'vimtags') }}; then
echo "TEST=-C runtime/doc vimtags VIMEXE=../../${SRCDIR}/vim"
fi
if ${{ contains(fromJSON(inputs.extra), 'proto') }}; then
echo "TEST=-C src protoclean proto"
fi
echo "CFLAGS=${CFLAGS}"
echo "CONFOPT=${CONFOPT}"
# Disables GTK attempt to integrate with the accessibility service that does run in CI.
echo "NO_AT_BRIDGE=1"
) >> $GITHUB_ENV
echo '::endgroup::'
- name: Set up system
shell: bash
run: |
echo '::group::Set up system'
if [[ ${CC} = clang ]]; then
# Use llvm-cov instead of gcov when compiler is clang.
ln -fs /usr/bin/llvm-cov ${HOME}/bin/gcov
fi
sudo sysctl -w net.ipv6.conf.lo.disable_ipv6=0
sudo usermod -a -G audio "${USER}"
sudo bash ci/setup-xvfb.sh
echo '::endgroup::'
- name: Check autoconf
if: contains(fromJSON(inputs.extra), 'unittests')
shell: bash
run: |
echo '::group::Check autoconf'
make -C src autoconf
echo '::endgroup::'
- name: Set up shadow dir
if: inputs.shadow
shell: bash
run: |
echo '::group::Set up shadow dir'
make -C src shadow
echo "SRCDIR=${{ inputs.shadow }}" >> $GITHUB_ENV
echo "SHADOWOPT=-C ${{ inputs.shadow }}" >> $GITHUB_ENV
echo '::endgroup::'
- name: Configure
shell: bash
run: |
echo '::group::Configure'
./configure --with-features=${{ inputs.features }} ${CONFOPT} --enable-fail-if-missing
# Append various warning flags to CFLAGS.
sed -i -f ci/config.mk.sed ${SRCDIR}/auto/config.mk
sed -i -f ci/config.mk.${CC}.sed ${SRCDIR}/auto/config.mk
if [[ ${CC} = clang ]]; then
# Suppress some warnings produced by clang 12 and later.
sed -i -f ci/config.mk.clang-12.sed ${SRCDIR}/auto/config.mk
fi
echo '::endgroup::'
- name: Build
if: (!contains(fromJSON(inputs.extra), 'unittests'))
shell: bash
run: |
echo '::group::Build'
make ${SHADOWOPT} -j${NPROC}
echo '::endgroup::'
- name: Check version
if: (!contains(fromJSON(inputs.extra), 'unittests'))
shell: bash
run: |
echo '::group::Check version'
"${SRCDIR}"/vim --version
"${SRCDIR}"/vim -u NONE -i NONE --not-a-term -esNX -V1 -S ci/if_ver-1.vim -c quit
"${SRCDIR}"/vim -u NONE -i NONE --not-a-term -esNX -V1 -S ci/if_ver-2.vim -c quit
if ${{ inputs.features == 'huge' }}; then
# Also check that optional and dynamic features are configured and working
"${SRCDIR}"/vim -u NONE -i NONE --not-a-term -esNX -V1 \
-c "let g:required=['gettext', 'sodium', 'sound', 'perl', 'python3', 'lua', 'ruby', 'tcl']" \
-S ci/if_feat_check.vim -c quit
fi
echo '::endgroup::'
+6 -5
View File
@@ -1,4 +1,4 @@
name: 'test_artifacts'
name: "test_artifacts"
description: "Upload failed test artifacts"
inputs:
artifact-name:
@@ -14,7 +14,7 @@ runs:
# it from the matrix automatically like in Vim
# upstream.
# - name: Collect matrix properties for naming
# uses: actions/github-script@v8
# uses: actions/github-script@v9
# id: matrix-props
# env:
# MATRIX_PROPS: ${{ toJSON(inputs) }}
@@ -50,9 +50,10 @@ runs:
# A file, directory or wildcard pattern that describes what
# to upload.
path: |
${{ github.workspace }}/runtime/indent/testdir/*.fail
${{ github.workspace }}/runtime/syntax/testdir/failed/*
${{ github.workspace }}/src/testdir/failed/*
${{ github.workspace }}/logs/**/*.symbolized
${{ github.workspace }}/runtime/indent/testdir/*.fail
${{ github.workspace }}/runtime/syntax/testdir/failed/*
${{ github.workspace }}/src/testdir/failed/*
# The desired behavior if no files are found using the
# provided path.
if-no-files-found: ignore
-1
View File
@@ -8,7 +8,6 @@ CI:
- '.github/dependabot.yml'
- '.github/labeler.yml'
- '.github/workflows/*'
- '.appveyor.yml'
- '.codecov.yml'
documentation:
+176
View File
@@ -0,0 +1,176 @@
name: CI for Linux
on:
workflow_call:
# Cancels all previous workflow runs for pull requests that have not completed.
concurrency:
# The concurrency group contains the workflow name and the branch name for
# pull requests or the commit hash for any other events.
group: ${{ github.workflow }}-linux-${{ github.event_name == 'pull_request' && github.head_ref || github.sha }}
cancel-in-progress: true
permissions:
contents: read # to fetch code (actions/checkout)
jobs:
linux:
runs-on: ${{ matrix.architecture == 'arm64' && 'ubuntu-24.04-arm' || 'ubuntu-24.04' }}
env:
CC: ${{ matrix.compiler }}
GCC_VER: 14
CLANG_VER: 22
TEST: test
SRCDIR: ./src
LEAK_CFLAGS: -DEXITFREE
LOG_DIR: ${{ github.workspace }}/logs
TERM: xterm
DISPLAY: ":99"
DEBIAN_FRONTEND: noninteractive
strategy:
fail-fast: false
matrix:
features: [tiny, normal, huge]
compiler: [clang, gcc]
extra: [[]]
# Only use non-native architecture when features != huge.
# features=huge tries to install python3-dev, which fails to install
# for the non-native architecture.
architecture: [native]
include:
- features: tiny
compiler: clang
extra: [nogui]
- features: tiny
compiler: gcc
extra: [nogui, syn_test_execs]
- features: tiny
compiler: gcc
extra: [nogui]
architecture: arm64
- features: normal
shadow: ./src/shadow
compiler: gcc
architecture: i386
- features: huge
coverage: true
- features: huge
compiler: clang
interface: dynamic
python3: stable-abi
- features: huge
compiler: gcc
coverage: true
interface: dynamic
extra: [uchar, testgui]
- features: huge
compiler: gcc
coverage: true
extra: [unittests]
- features: huge
compiler: gcc
coverage: true
extra: [unittests]
architecture: arm64
- features: normal
compiler: gcc
extra: [vimtags, proto, preproc_indent, encoding, codestyle]
- features: huge
compiler: gcc
extra: [no_x11_wl]
steps:
- name: Checkout repository from GitHub
uses: actions/checkout@v6.0.2
- name: Build
timeout-minutes: 15
uses: ./.github/actions/build_vim_on_linux
with:
features: ${{ matrix.features }}
compiler: ${{ matrix.compiler }}
architecture: ${{ matrix.architecture }}
extra: ${{ toJSON(matrix.extra) }}
shadow: ${{ matrix.shadow }}
interface: ${{ matrix.interface }}
lua_ver: ${{ matrix.lua_ver }}
python3: ${{ matrix.python3 }}
coverage: ${{ matrix.coverage }}
- name: Test
timeout-minutes: 20
run: make ${SHADOWOPT} ${TEST}
# Enable to debug failing tests live and ssh into the CI runners
# - name: Setup tmate session
# if: ${{ failure() }}
# uses: mxschmitt/action-tmate@v3
# with:
# limit-access-to-actor: true
- name: Upload failed test artifacts
if: ${{ !cancelled() }}
uses: ./.github/actions/test_artifacts
- name: Vim tags
if: contains(matrix.extra, 'vimtags')
run: |
# This will exit with an error code if the generated vim tags differs from source.
(
cd runtime/doc
git diff --exit-code -- tags
make html; rm *.html tags.ref;
test -f errors.log && exit 3;
true
)
- name: Generate Proto files
if: contains(matrix.extra, 'proto')
run: |
# This will exit with an error code if the generated proto files differ from source
(
git diff --exit-code -- src/proto/
true
)
- name: Check Source Code style
if: contains(matrix.extra, 'codestyle')
run: |
make -C src/testdir codestyle
- name: Check preprocessor indent
if: contains(matrix.extra, 'preproc_indent')
run: |
# This will exit with an error code if the files differ from source
(
"${SRCDIR}"/vim -u NONE --not-a-term -esNX +"cd runtime/tools" -S preproc_indent.vim
git diff --exit-code -- src/*.[ch] src/xxd/xxd.c
true
)
- name: Check encoding of utf-8 runtime files
if: contains(matrix.extra, 'encoding')
run: |
# This will exit with an error code if utf-8 runtime files are not in utf-8 encoding
(
find . -type f -name "*utf-8*.vim" -exec sh -c \
'iconv -f utf-8 -t utf-8 "$1" >/dev/null 2>&1 || echo "non utf-8 encoding detected in $1"' \
find-sh {} \; |grep "non utf-8 encoding" && exit 3
true
)
- name: Generate gcov files
if: matrix.coverage
run: |
cd "${SRCDIR}"
find . -type f -name '*.gcno' -exec gcov -pb {} + || true
- name: Codecov
timeout-minutes: 20
if: matrix.coverage
uses: codecov/codecov-action@v6
with:
flags: linux,${{ matrix.features }}-${{ matrix.compiler }}-${{ join(matrix.extra, '-') }}
token: ${{ secrets.CODECOV_TOKEN }}
+82
View File
@@ -0,0 +1,82 @@
name: CI for Linux ASan
on:
workflow_call:
# Cancels all previous workflow runs for pull requests that have not completed.
concurrency:
# The concurrency group contains the workflow name and the branch name for
# pull requests or the commit hash for any other events.
group: ${{ github.workflow }}-linux_asan-${{ github.event_name == 'pull_request' && github.head_ref || github.sha }}
cancel-in-progress: true
permissions:
contents: read # to fetch code (actions/checkout)
jobs:
linux-asan:
runs-on: ubuntu-24.04
env:
CC: clang
CLANG_VER: 21
SRCDIR: ./src
LEAK_CFLAGS: -DEXITFREE
LOG_DIR: ${{ github.workspace }}/logs
TERM: xterm
DISPLAY: ":99"
DEBIAN_FRONTEND: noninteractive
strategy:
fail-fast: false
matrix:
testset:
- tinytests
- newtests.1
- newtests.2
steps:
- name: Checkout repository from GitHub
uses: actions/checkout@v6.0.2
- name: Build
timeout-minutes: 15
uses: ./.github/actions/build_vim_on_linux
with:
features: huge
compiler: clang
extra: '["asan"]'
# Lua5.1 is the most widely used version (since it's what LuaJIT is
# compatible with), so ensure it works
lua_ver: "5.1"
- name: Test (tinytests)
if: matrix.testset == 'tinytests'
timeout-minutes: 20
run: make ${TEST} NEW_TESTS_RES=
- name: Test (newtests)
if: startsWith(matrix.testset, 'newtests')
timeout-minutes: 20
env:
JOB_INDEX: ${{ strategy.job-index }}
JOB_TOTAL: ${{ strategy.job-total }}
run: |
set -x
make -C src/testdir SCRIPTS_TINY_OUT= \
NEW_TESTS_RES="$(python3 ci/gen_testset.py $((JOB_TOTAL-1)) | jq -r --argjson i $((JOB_INDEX-1)) '.[$i]|join(" ")')"
- name: ASan logs
if: ${{ !cancelled() }}
run: |
for f in $(grep -lR '#[[:digit:]]* *0x[[:xdigit:]]*' "${LOG_DIR}"); do
(
echo "$f"
asan_symbolize -l "$f"
) | tee "$f".symbolized
false # in order to fail a job
done
- name: Upload failed test artifacts
if: ${{ !cancelled() }}
uses: ./.github/actions/test_artifacts
+103
View File
@@ -0,0 +1,103 @@
name: CI for macOS
on:
workflow_call:
# Cancels all previous workflow runs for pull requests that have not completed.
concurrency:
# The concurrency group contains the workflow name and the branch name for
# pull requests or the commit hash for any other events.
group: ${{ github.workflow }}-macos-${{ github.event_name == 'pull_request' && github.head_ref || github.sha }}
cancel-in-progress: true
permissions:
contents: read # to fetch code (actions/checkout)
jobs:
macos:
runs-on: ${{ matrix.runner }}
env:
CC: clang
TEST: test
SRCDIR: ./src
LEAK_CFLAGS: -DEXITFREE
TERM: xterm
strategy:
fail-fast: false
matrix:
features: [tiny, normal, huge]
runner: [macos-15-intel, macos-26]
steps:
- name: Checkout repository from GitHub
uses: actions/checkout@v6.0.2
- name: Install packages
if: matrix.features == 'huge'
run: |
brew install lua libtool
echo "LUA_PREFIX=$(brew --prefix)" >> $GITHUB_ENV
- name: Set up environment
run: |
(
echo "NPROC=$(getconf _NPROCESSORS_ONLN)"
case "${{ matrix.features }}" in
tiny)
echo "TEST=testtiny"
echo "CONFOPT=--disable-gui"
;;
normal)
;;
huge)
echo "CONFOPT=--enable-perlinterp --enable-python3interp --enable-rubyinterp --enable-luainterp --enable-tclinterp"
;;
esac
) >> $GITHUB_ENV
- name: Configure
run: |
./configure --with-features=${{ matrix.features }} ${CONFOPT} --enable-fail-if-missing
# Append various warning flags to CFLAGS.
# BSD sed needs backup extension specified.
sed -i.bak -f ci/config.mk.sed ${SRCDIR}/auto/config.mk
# On macOS, the entity of gcc is clang.
sed -i.bak -f ci/config.mk.clang.sed ${SRCDIR}/auto/config.mk
# Suppress some warnings produced by clang 12 and later.
if clang --version | grep -qs 'Apple clang version \(1[3-9]\|[2-9]\)\.'; then
sed -i.bak -f ci/config.mk.clang-12.sed ${SRCDIR}/auto/config.mk
fi
- name: Build
env:
LC_ALL: C
run: |
make -j${NPROC}
- name: Check version
run: |
"${SRCDIR}"/vim --version
"${SRCDIR}"/vim -u NONE -i NONE --not-a-term -esNX -V1 -S ci/if_ver-1.vim -c quit
"${SRCDIR}"/vim -u NONE -i NONE --not-a-term -esNX -V1 -S ci/if_ver-2.vim -c quit
if ${{ matrix.features == 'huge' }}; then
# Also check that optional and dynamic features are configured and working
"${SRCDIR}"/vim -u NONE -i NONE --not-a-term -esNX -V1 \
-c "let g:required=['sound', 'perl', 'python3', 'lua', 'ruby', 'tcl']" \
-S ci/if_feat_check.vim -c quit
fi
- name: Install packages for testing
run: |
# Apple diff is broken. Use GNU diff instead. See #14032.
brew install diffutils
- name: Test
timeout-minutes: 25
run: |
make ${TEST}
- name: Upload failed test artifacts
if: ${{ !cancelled() }}
uses: ./.github/actions/test_artifacts
+362
View File
@@ -0,0 +1,362 @@
name: CI for Windows
on:
workflow_call:
# Cancels all previous workflow runs for pull requests that have not completed.
concurrency:
# The concurrency group contains the workflow name and the branch name for
# pull requests or the commit hash for any other events.
group: ${{ github.workflow }}-windows-${{ github.event_name == 'pull_request' && github.head_ref || github.sha }}
cancel-in-progress: true
permissions:
contents: read # to fetch code (actions/checkout)
jobs:
windows:
runs-on: windows-2022
env:
# Interfaces
# Lua
LUA_VER: 54
LUA_VER_DOT: "5.4"
LUA_RELEASE: 5.4.2
LUA32_URL: https://downloads.sourceforge.net/luabinaries/lua-%LUA_RELEASE%_Win32_dllw6_lib.zip
LUA64_URL: https://downloads.sourceforge.net/luabinaries/lua-%LUA_RELEASE%_Win64_dllw6_lib.zip
LUA_DIR: D:\Lua
# do not want \L to end up in pathdef.c and compiler complaining about unknown escape sequences \l
LUA_DIR_SLASH: D:/Lua
# Python 2
PYTHON_VER: 27
PYTHON_VER_DOT: "2.7"
PYTHON_DIR: 'C:\Python27'
# Python 3
PYTHON3_VER: 313
PYTHON3_VER_DOT: "3.13"
# Other dependencies
# winpty
WINPTY_URL: https://github.com/rprichard/winpty/releases/download/0.4.3/winpty-0.4.3-msvc2015.zip
# libsodium
SODIUM_VER: "1.0.20"
# SODIUM_MSVC_URL: https://download.libsodium.org/libsodium/releases/libsodium-%SODIUM_VER%-stable-msvc.zip
SODIUM_MSVC_URL: https://github.com/jedisct1/libsodium/releases/download/%SODIUM_VER%-RELEASE/libsodium-%SODIUM_VER%-msvc.zip
SODIUM_MSVC_VER: v143
# SODIUM_MINGW_URL: https://download.libsodium.org/libsodium/releases/libsodium-%SODIUM_VER%-stable-mingw.tar.gz
SODIUM_MINGW_URL: https://github.com/jedisct1/libsodium/releases/download/%SODIUM_VER%-RELEASE/libsodium-%SODIUM_VER%-mingw.tar.gz
SODIUM_MINGW_VER: 26
# Gettext-tools, iconv and libraries
GETTEXT32_URL: https://github.com/mlocati/gettext-iconv-windows/releases/download/v0.21-v1.16/gettext0.21-iconv1.16-shared-32.zip
GETTEXT64_URL: https://github.com/mlocati/gettext-iconv-windows/releases/download/v0.21-v1.16/gettext0.21-iconv1.16-shared-64.zip
# Escape sequences
COL_RED: "\x1b[31m"
COL_GREEN: "\x1b[32m"
COL_YELLOW: "\x1b[33m"
COL_RESET: "\x1b[m"
strategy:
fail-fast: false
matrix:
include:
- { features: HUGE, toolchain: msvc, VIMDLL: no, GUI: no, arch: x64, python3: stable }
- { features: HUGE, toolchain: mingw, VIMDLL: yes, GUI: yes, arch: x86, python3: stable, coverage: yes }
- { features: HUGE, toolchain: msvc, VIMDLL: no, GUI: yes, arch: x86 }
- { features: HUGE, toolchain: mingw, VIMDLL: yes, GUI: no, arch: x64, coverage: yes }
- { features: HUGE, toolchain: msvc, VIMDLL: no, GUI: no, arch: x64, ttytype: conpty }
- { features: NORMAL, toolchain: msvc, VIMDLL: yes, GUI: no, arch: x86 }
- { features: NORMAL, toolchain: mingw, VIMDLL: no, GUI: yes, arch: x64 }
- { features: TINY, toolchain: msvc, VIMDLL: yes, GUI: yes, arch: x64 }
- { features: TINY, toolchain: mingw, VIMDLL: no, GUI: no, arch: x86 }
steps:
- name: Initialize
id: init
shell: bash
run: |
# Show Windows version
cmd /c ver
if ${{ matrix.arch == 'x64' }}; then
cygreg=registry
pyreg=
echo "VCARCH=amd64" >> $GITHUB_ENV
echo "WARCH=x64" >> $GITHUB_ENV
echo "BITS=64" >> $GITHUB_ENV
echo "MSYSTEM=MINGW64" >> $GITHUB_ENV
else
cygreg=registry32
pyreg=-32
echo "VCARCH=x86" >> $GITHUB_ENV
echo "WARCH=ia32" >> $GITHUB_ENV
echo "BITS=32" >> $GITHUB_ENV
echo "MSYSTEM=MINGW32" >> $GITHUB_ENV
fi
echo "VCVARSALL=$(vswhere -products \* -latest -property installationPath)\\VC\\Auxiliary\\Build\\vcvarsall.bat" >> $GITHUB_ENV
if ${{ matrix.features != 'TINY' }}; then
if ${{ matrix.arch == 'x86' }}; then
choco install python2 --no-progress --forcex86
else
choco install python2 --no-progress
fi
fi
python3_dir=$(cat "/proc/$cygreg/HKEY_LOCAL_MACHINE/SOFTWARE/Python/PythonCore/${PYTHON3_VER_DOT}$pyreg/InstallPath/@")
echo "PYTHON3_DIR=$python3_dir" >> $GITHUB_ENV
if ${{ matrix.toolchain == 'msvc' }}; then
SODIUM_DIR=D:\\libsodium
echo "SODIUM_LIB=${SODIUM_DIR}\\${{ matrix.arch == 'x64' && 'x64' || 'Win32' }}\\Release\\${SODIUM_MSVC_VER}\\dynamic" >> $GITHUB_ENV
else
SODIUM_DIR=D:\\libsodium-win${{ matrix.arch == 'x64' && '64' || '32' }}
# do not want \L to end up in pathdef.c and compiler complaining about unknown escape sequences \l
SODIUM_DIR_SLASH=D:/libsodium-win${{ matrix.arch == 'x64' && '64' || '32' }}
echo "SODIUM_LIB=${SODIUM_DIR}\\bin" >> $GITHUB_ENV
echo "SODIUM_DIR_SLASH=${SODIUM_DIR_SLASH}" >> $GITHUB_ENV
fi
echo "SODIUM_DIR=${SODIUM_DIR}" >> $GITHUB_ENV
echo "GETTEXT_PATH=D:\gettext${{ matrix.arch == 'x64' && '64' || '32' }}" >> $GITHUB_ENV
- uses: msys2/setup-msys2@v2.31.1
if: matrix.toolchain == 'mingw'
with:
update: true
install: tar
pacboy: >-
make:p gcc:p
msystem: ${{ env.MSYSTEM }}
release: false
- name: Checkout repository from GitHub
uses: actions/checkout@v6.0.2
- name: Create a list of download URLs
shell: cmd
run: |
type NUL > urls.txt
echo %LUA_RELEASE%>> urls.txt
echo %WINPTY_URL%>> urls.txt
echo %SODIUM_VER%>> urls.txt
echo %GETTEXT32_URL%>> urls.txt
echo %GETTEXT64_URL%>> urls.txt
- name: Cache downloaded files
uses: actions/cache@v5.0.5
with:
path: downloads
key: ${{ runner.os }}-${{ matrix.arch }}-${{ hashFiles('urls.txt') }}
- name: Download dependencies
shell: cmd
run: |
path C:\Program Files\7-Zip;%path%
if not exist downloads mkdir downloads
echo %COL_GREEN%Download Lua%COL_RESET%
call :downloadfile %LUA${{ env.BITS }}_URL% downloads\lua.zip
7z x downloads\lua.zip -o%LUA_DIR% > nul || exit 1
if not "${{ matrix.ttytype }}" == "conpty" (
echo %COL_GREEN%Download winpty%COL_RESET%
call :downloadfile %WINPTY_URL% downloads\winpty.zip
7z x -y downloads\winpty.zip -oD:\winpty > nul || exit 1
copy /Y D:\winpty\%WARCH%\bin\winpty.dll src\winpty%BITS%.dll
copy /Y D:\winpty\%WARCH%\bin\winpty-agent.exe src\
)
echo %COL_GREEN%Download libsodium%COL_RESET%
if "${{ matrix.toolchain }}"=="msvc" (
call :downloadfile %SODIUM_MSVC_URL% downloads\libsodium.zip
7z x -y downloads\libsodium.zip -oD:\ > nul || exit 1
) else (
call :downloadfile %SODIUM_MINGW_URL% downloads\libsodium.tar.gz
7z x -y downloads\libsodium.tar.gz -so | 7z x -si -ttar -oD:\ > nul || exit 1
mklink %SODIUM_LIB%\libsodium.dll %SODIUM_LIB%\libsodium-%SODIUM_MINGW_VER%.dll
)
echo %COL_GREEN%Download Gettext%COL_RESET%
call :downloadfile %GETTEXT${{ env.BITS }}_URL% downloads\gettext${{ env.BITS }}.zip
7z e -y downloads\gettext${{ env.BITS }}.zip -oD:\gettext${{ env.BITS }} > nul || exit 1
copy /y D:\gettext${{ env.BITS }}\libintl-8.dll src\ || exit 1
copy /y D:\gettext${{ env.BITS }}\libiconv-2.dll src\ || exit 1
goto :eof
:downloadfile
:: call :downloadfile <URL> <localfile>
if not exist %2 (
curl -f -L %1 -o %2
)
if ERRORLEVEL 1 (
rem Retry once.
curl -f -L %1 -o %2 || exit 1
)
goto :eof
- name: Build (MSVC)
if: matrix.toolchain == 'msvc'
shell: cmd
run: |
call "%VCVARSALL%" %VCARCH%
cd src
if "${{ matrix.VIMDLL }}"=="yes" (
set GUI=yes
) else (
set GUI=${{ matrix.GUI }}
)
if "${{ matrix.python3 }}"=="stable" (
set PYTHON3_STABLE=yes
) else (
set PYTHON3_STABLE=no
)
if "${{ matrix.features }}"=="HUGE" (
nmake -nologo -f Make_mvc.mak ^
FEATURES=${{ matrix.features }} ^
GUI=%GUI% IME=yes ICONV=yes VIMDLL=${{ matrix.VIMDLL }} ^
DYNAMIC_LUA=yes LUA=%LUA_DIR% ^
DYNAMIC_PYTHON=yes PYTHON=%PYTHON_DIR% ^
DYNAMIC_PYTHON3=yes PYTHON3=%PYTHON3_DIR% ^
DYNAMIC_PYTHON3_STABLE_ABI=%PYTHON3_STABLE% ^
DYNAMIC_SODIUM=yes SODIUM=%SODIUM_DIR% ^
CI_FLAGS=/we4267
) else (
nmake -nologo -f Make_mvc.mak ^
FEATURES=${{ matrix.features }} ^
GUI=%GUI% IME=yes ICONV=yes VIMDLL=${{ matrix.VIMDLL }} ^
CI_FLAGS=/we4267
)
- name: Build (MinGW)
if: matrix.toolchain == 'mingw'
shell: msys2 {0}
run: |
cd src
if [ "${{ matrix.VIMDLL }}" = "yes" ]; then
GUI=yes
else
GUI=${{ matrix.GUI }}
fi
if [ "${{ matrix.python3 }}" = "stable" ]; then
PYTHON3_STABLE=yes
else
PYTHON3_STABLE=no
fi
if [ "${{ matrix.features }}" = "HUGE" ]; then
mingw32-make -f Make_ming.mak -j2 \
FEATURES=${{ matrix.features }} \
GUI=$GUI IME=yes ICONV=yes VIMDLL=${{ matrix.VIMDLL }} \
DYNAMIC_LUA=yes LUA=${LUA_DIR_SLASH} \
DYNAMIC_PYTHON=yes PYTHON=${PYTHON_DIR} \
DYNAMIC_PYTHON3=yes PYTHON3=${PYTHON3_DIR} \
DYNAMIC_PYTHON3_STABLE_ABI=${PYTHON3_STABLE} \
DYNAMIC_SODIUM=yes SODIUM=${SODIUM_DIR_SLASH} \
STATIC_STDCPLUS=yes COVERAGE=${{ matrix.coverage }}
else
mingw32-make -f Make_ming.mak -j2 \
FEATURES=${{ matrix.features }} \
GUI=$GUI IME=yes ICONV=yes VIMDLL=${{ matrix.VIMDLL }} \
STATIC_STDCPLUS=yes
fi
- name: Check version
shell: cmd
run: |
PATH %LUA_DIR%;C:\msys64\%MSYSTEM%\bin;%PYTHON3_DIR%;%PATH%
if "${{ matrix.GUI }}"=="yes" (
start /wait src\gvim -u NONE -i NONE -c "redir > version.txt | ver | q" || exit 1
type version.txt
echo.
start /wait src\gvim -u NONE -i NONE -c "redir! > version.txt | so ci\if_ver-1.vim | q"
start /wait src\gvim -u NONE -i NONE -c "redir >> version.txt | so ci\if_ver-2.vim | q"
type version.txt
del version.txt
) else (
src\vim --version || exit 1
src\vim -u NONE -i NONE --not-a-term -esNX -V1 -S ci/if_ver-1.vim -c quit
src\vim -u NONE -i NONE --not-a-term -esNX -V1 -S ci/if_ver-2.vim -c quit
if "${{ matrix.features }}"=="HUGE" (
src\vim -u NONE -i NONE --not-a-term -esNX -V1 ^
-c "let g:required=['gettext', 'sodium', 'sound', 'python3', 'lua']" ^
-S ci/if_feat_check.vim -c quit
)
)
#- name: Prepare Artifact
# shell: cmd
# run: |
# mkdir artifacts
# copy src\*vim.exe artifacts
# copy src\vim*.dll artifacts
#
#- name: Upload Artifact
# uses: actions/upload-artifact@v7
# with:
# name: vim${{ matrix.bits }}-${{ matrix.toolchain }}
# path: ./artifacts
# disabled because of https://github.com/tunisiano187/Chocolatey-packages/issues/3916
#- name: Install packages for testing
# shell: bash
# run: |
# if ${{ matrix.features != 'TINY' }}; then
# if ${{ matrix.arch == 'x64' }}; then
# choco install netbeans --no-progress
# else
# exit 0
# fi
# fi
- name: Test and show the result of testing gVim
if: matrix.GUI == 'yes' || matrix.VIMDLL == 'yes'
shell: cmd
timeout-minutes: 15
run: |
PATH %LUA_DIR%;C:\msys64\%MSYSTEM%\bin;%PYTHON3_DIR%;%PATH%;%SODIUM_LIB%
call "%VCVARSALL%" %VCARCH%
echo %COL_GREEN%Test gVim:%COL_RESET%
cd src\testdir
if "${{ matrix.GUI }}"=="yes" (
nmake -nologo -f Make_mvc.mak VIMPROG=..\gvim || exit 1
) else (
@rem Run only tiny tests.
nmake -nologo -f Make_mvc.mak tiny VIMPROG=..\gvim || exit 1
)
- name: Test and show the result of testing Vim
if: matrix.GUI == 'no' || matrix.VIMDLL == 'yes'
shell: cmd
timeout-minutes: 15
run: |
PATH %LUA_DIR%;C:\msys64\%MSYSTEM%\bin;%PYTHON3_DIR%;%PATH%;%SODIUM_LIB%
call "%VCVARSALL%" %VCARCH%
echo %COL_GREEN%Test Vim:%COL_RESET%
cd src\testdir
nmake -nologo -f Make_mvc.mak clean
if "${{ matrix.GUI }}"=="no" (
nmake -nologo -f Make_mvc.mak VIMPROG=..\vim || exit 1
) else (
@rem Run only tiny tests.
nmake -nologo -f Make_mvc.mak tiny VIMPROG=..\vim || exit 1
)
- name: Upload failed test artifacts
if: ${{ !cancelled() }}
uses: ./.github/actions/test_artifacts
- name: Generate gcov files
if: matrix.coverage
shell: msys2 {0}
run: |
cd src
find . -type f -name '*.gcno' -exec gcov -pb {} + || true
- name: Codecov
timeout-minutes: 20
if: matrix.coverage
uses: codecov/codecov-action@v6
with:
directory: src
flags: windows,${{ matrix.toolchain }}-${{ matrix.arch }}-${{ matrix.features }}
token: ${{ secrets.CODECOV_TOKEN }}
+4 -4
View File
@@ -44,11 +44,11 @@ jobs:
steps:
- name: Checkout repository from github
uses: actions/checkout@v6
uses: actions/checkout@v6.0.2
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v4
uses: github/codeql-action/init@v4.36.0
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
@@ -59,7 +59,7 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v4
uses: github/codeql-action/autobuild@v4.36.0
# ️ Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
@@ -73,4 +73,4 @@ jobs:
# make release
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v4
uses: github/codeql-action/analyze@v4.36.0
+1 -1
View File
@@ -19,7 +19,7 @@ jobs:
steps:
- name: Checkout repository from github
if: env.TOKEN
uses: actions/checkout@v6
uses: actions/checkout@v6.0.2
- name: Download Coverity
if: env.TOKEN
+1 -1
View File
@@ -17,6 +17,6 @@ jobs:
pull-requests: write
steps:
- uses: actions/labeler@v6
- uses: actions/labeler@v6.1.0
with:
repo-token: "${{ secrets.GITHUB_TOKEN }}"
+1 -1
View File
@@ -8,7 +8,7 @@ jobs:
lychee:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v6.0.2
- name: Run Lychee
uses: lycheeverse/lychee-action@v2
with:
+1 -1
View File
@@ -64,7 +64,7 @@ jobs:
runs-on: ${{ inputs.os }}
steps:
- name: Checkout
uses: actions/checkout@v6
uses: actions/checkout@v6.0.2
- name: Set up legacy build
if: inputs.legacy
+325
View File
@@ -0,0 +1,325 @@
# AGENTS.md
Guidance for AI coding agents working in the Vim repository.
## Project
Vim is a text editor written in C. The canonical repository is
https://github.com/vim/vim. The code is old and has grown organically over
the past 30+ years. Some files are vendored from upstream projects
(`src/xdiff`, `src/libvterm`); parts of the runtime are occasionally shared
with forks like Neovim.
Vim strives to be portable across several different operating systems and
aims to be a stable, robust editor gradually developing new features while
remaining backwards compatible as much as possible.
At the same time, Vim can be compiled with different feature sets, from the
POSIX compatible minimal vi to a full-fledged GUI editor which includes
additional scripting interfaces.
See `runtime/doc/develop.txt` for the high level design goals.
## Build and test
# Full build on Unix/Linux (from src/):
make
# Run the full test suite:
make test
# Generate proto files
make proto
# Run a single test file:
cd src/testdir && make test_name.res
Output is in testdir/messages and testdir/test.log
Builds on Windows depend on the Environment, see `src/INSTALLpc.txt`
for Cygwin/MSYS and MSVC ways to build Vim
Before submitting any patch, at minimum:
1. The build succeeds without new warnings.
2. Relevant tests pass.
3. The code matches the style of the file being edited.
## Layout
- `src/` - the C source. Subsystem names are usually obvious from filenames
(`buffer.c`, `window.c`, `search.c`, `vim9compile.c`, etc.).
- `src/proto/` - function prototypes, one `.pro` file per source file.
Regenerated; do not hand-edit unless you know what you're doing.
- `src/po` - Translations
- `src/xxd` - for the xxd subproject
- `src/xdiff` - for the xdiff library (imported from git)
- `src/libvterm` - for the libvterm library
- `src/testdir/` - tests. Vim-script files named `test_*.vim`.
Screendump expected output lives in `src/testdir/dumps/`.
- `runtime/doc/` - user-facing documentation in Vim help format, when updating,
also update the Last Change header
- `runtime/syntax/generator` - Syntax script for Vim Script, automatically generated
from Vims source
- `runtime/` - runtime files shipped with Vim, when updating, also update the
Last Change header and a short description if this file has no maintainer
If the file has a maintainer, changes should go via them (so make a merge
request against the upstream repo instead)
- `src/version.c` - contains the `included_patches[]` list. Every
patch touching anything below `src/` (with the exception of `src/po`) needs a
new entry at the top, will be updated only when merging into
the master tree.
## Commit format
Vim uses a strict commit message format. The subject line is a
one-sentence **problem statement**, not a description of the fix:
patch 9.2.NNNN: short description of the problem
Problem: Restatement of the problem as a full sentence, possibly
with a reporter attribution in parentheses.
Solution: Short description of the fix, ending with the author's
name in parentheses.
optional longer description of the problem and solution goes here in prose.
Do not use bullet points.
fixes: #NNNN
related: #NNNN
closes: #NNNN
Co-authored-by: Name
Signed-off-by: Author Name <email>
Rules:
- **Subject line states the problem**, not the solution. "fix typo" is
wrong; "typo in foo() causes OOB read" is right.
- **Problem line is a full sentence with a trailing period.** It mirrors
the subject.
- **Solution line ends with `(Author Name)`** — parentheses, period
after them.
- **Longer prose**, if any, goes after the Problem/Solution header
- **`fixes:` references the issue** the patch fixes.
**`closes:` references the PR** that introduces the fix.
**`related:` references related issues**, including issues that caused this
one.
All can appear. Colon, aligned, no trailing period.
- **`Signed-off-by:` is required** — DCO.
- **`Co-Authored-By:` is allowed** and is the accepted way to
acknowledge AI assistance transparently. Human
coauthors should usually also have their own Signed-off-by.
## C code conventions
- **Indentation is 4 spaces per level.** Existing files use tabs with
`ts=8 sts=4 sw=4 noet` (set by the modeline in the file),
so tabs of width 8 appear where two levels of indent collapse. `sign.c`,
`sound.c`, and any new file must use spaces only and follow the style from
the .editorconfig file.
- **Opening braces go on their own line (Allman style)** — for function
definitions and for control-flow constructs (`if`/`else`/`for`/`while`/
`do`) alike.
- **Function definitions**: return type on its own indented line, with
the function name beginning on the next line.
- Initialize locals where a reader cannot trivially see the first
assignment (common for pointers and return-value accumulators).
Don't add `= 0` initializers for values that are always assigned
before use — they can hide real uninitialized-read bugs from
the compiler.
- `for (int i = 0; ...)` loop declarations are fine in files that
use them; older files may declare the counter at the top of the
block.
- **Function-scope declarations at the top of a block** is the historical
style, but mid-block declarations are acceptable in files that have
adopted them. Match the surrounding code.
- **Custom types end in `_T`** (e.g., `buf_T`, `linenr_T`, `pos_T`).
Never use `_t` — it collides with POSIX typedefs.
- **C language is C95 plus specific C99 features**: `//` comments,
mixed declarations and statements, `__func__`, `bool`/`_Bool`,
variadic macros, compound literals, `static inline`, trailing enum
commas. Do not reach for later C standards — Vim still must build
with Compaq C on OpenVMS. See `*assumptions-C-compiler*` in
`develop.txt` for the full list.
- **`bool` / `true` / `false` are acceptable.** Vim is transitioning
from `int` with `TRUE`/`FALSE` to C99 `bool`. Do not "fix" `bool`
back to `int`. Within a single patch, be consistent — don't mix
`true` and `TRUE` in new code.
- **Do not mass-convert** `TRUE`/`FALSE` to `true`/`false` across files
unless that is the patch's explicit purpose. Opportunistic
conversions create noise in diffs.
- **`STRLEN_LITERAL("...")`** should be used when the length of a
string literal is needed. Avoid `STRLEN()` on literals.
- **`vim_snprintf_safelen()`** returns the written length; prefer it
over `vim_snprintf()` when the length is then needed.
- **Prefer `dict_add_string_len()`** when the string length is already
known, over `dict_add_string()` which calls `STRLEN()`.
- **String/buffer parameters go `(char_u *buf, size_t buflen)`** —
length alongside pointer, in bytes. Use `size_t` for byte counts,
`int` only where required by legacy APIs.
- **Guards before divisions.** Check for divisor zero explicitly, even
when a composite earlier guard would prevent it. Relying on
transitive guards is fragile.
- When introducing new allocations, verify the cleanup paths handle all exit
conditions (early return, error branches, etc).
**Use Vim wrappers instead of libc where one exists:**
| libc | Vim | Why |
|---------------|------------------------|-----------------------------|
| `free()` | `vim_free()` | Tolerates NULL |
| `malloc()` | `alloc()` / `lalloc()` | Checks for OOM |
| `strcpy()` | `STRCPY()` | Cast for `char_u *` |
| `strchr()` | `vim_strchr()` | Handles special characters |
| `strrchr()` | `vim_strrchr()` | Handles special characters |
| `memcpy()` | `mch_memmove()` | Handles overlapping copies |
| `bcopy()` | `mch_memmove()` | Handles overlapping copies |
| `memset()` | `vim_memset()` | Uniform across systems |
| `isspace()` | `vim_isspace()` | Handles bytes > 127 |
| `iswhite()` | `vim_iswhite()` | TRUE only for tab and space |
Further rules, not spelled out here, live in `runtime/doc/develop.txt`:
- `*style-names*` — reserved name patterns (`is*`, `to*`, `str*`, `mem*`,
`wcs*`, `.*_t`, `__.*`), forbidden identifiers (`delete`, `this`, `new`,
`time`, `index`), and the 31-character function-name limit.
- `*style-spaces*`, `*style-examples*` — spacing and one-statement-per-line.
- `*style-various*``FEAT_` feature prefix, uppercase `#define`,
`#ifdef HAVE_X` rather than `#if HAVE_X`, no `'\"'`.
- `*assumptions-makefiles*` — POSIX.1-2001 `make` only in the main
Makefiles (no `%` rules, `:=`, `.ONESHELL`, GNU conditionals).
- Vim uses `char_u` instead of `char` type
- Vim uses the macros `STRLEN`, `STRCPY`, `STRCMP`, `STRCAT` that work
with the `char_u` type.
- `*style-clang-format*``sign.c` and `sound.c` are formatted with
`clang-format`; re-run it after editing those files.
## Vim9 script conventions (in tests and runtime files)
- Write modern Vim style (new files can use Vim9 script, but compatibility
with Neovim and other forks is a concern, so in doubt please ask!)
- **Drop `l:` prefix from local variables** in Vim-script tests.
- **Don't add `CheckFeature` inside individual tests** if it's already
at the top of the file.
- If a test file doesn't gate features at the top, add CheckFeature to
individual tests that depend on specific build features.
## Test conventions
- Tests are in `src/testdir/test_*.vim`.
- Reproducible tests beat "it doesn't crash" tests. If a patch fixes
a rendering bug, add a screendump test. If it fixes incorrect output,
assert the output.
- Add comprehensive tests for newly added features and include them
in existing tests if possible
- **Screendump tests** use `CheckScreendump`, `RunVimInTerminal`,
`VerifyScreenDump`, and live dumps in `src/testdir/dumps/`.
- `v9.CheckScriptSuccess(lines)` / `v9.CheckScriptFailure(lines, error, lnum)`
are the standard way to test Vim9 script behavior at script-load time.
- When fixing a bug reported as an issue, include a test that
reproduces the original report, not just a minimal synthetic case.
- Tests for Syntax runtime are in `runtime/syntax/testdir`
- Tests for Indent runtime are in `runtime/indent/testdir`
## Common gotchas
- **Distinguish what code enforces from what docs claim.** If a patch
changes documented behavior, say so in the Problem/Solution.
- **Generated files** (`src/auto/configure`, generated Wayland protocol
C, etc.) should only be regenerated when their source changes.
Mixing unrelated regeneration into a functional patch creates noise.
## Documentation
- User-facing option or feature changes require a `runtime/doc/*.txt`
update in the same patch.
- When editing an existing help file, bump the `Last change:` header
at the top.
### Help file style
See `runtime/doc/helphelp.txt` (`*help-writing*`) for the authoritative
reference. Key conventions:
- **File header**: first line is `*filename.txt*` then a tab then a
short description. That description appears under `LOCAL ADDITIONS`
in `help.txt`. The version and `Last change:` date go on the second
line, right aligned.
- **Modeline**: every help file ends with a Vim modeline — typically
`vim:tw=78:ts=8:noet:ft=help:norl:`.
- **Layout**: `'textwidth'` 78, `'tabstop'` 8, indent and align with
tab characters. Two spaces between sentences. Run `:retab`
(not `:retab!`, and review the diff) after editing.
- **Tags** are defined as `*tag-name*`, usually right-aligned on the
line where the thing they name is introduced. Tag names must be
unique across all of `runtime/doc/`; for plugin help, prefix with
the plugin name.
- **Cross-references inside help text**:
- `|tag-name|` — hot-link to an existing tag.
- `` `:cmd` `` — Ex command, highlighted as a code block.
- `'option'` — option name, in single quotes.
- `<Key>` or `CTRL-X` — special keys.
- `{placeholder}` — user-supplied argument.
- **Sections** are separated by a line of `=` starting in column 1.
Column or subsection headings end with `~` to trigger heading
highlighting.
- **Code blocks** start with `>` at the end of the introducing line
and end with `<` as the first non-blank on a later line (any line
starting in column 1 also implicitly closes the block). Use `>vim`
(or another language name) to request syntax highlighting inside
the block.
- **Notation** — `Note`, `Todo`, `Error` and a few similar words are
auto-highlighted; do not try to fake the highlighting by other means.
- **Language**: gender-neutral language is preferred for new or updated
text; existing wording does not need to be rewritten for this alone.
## Release policy
Vim alternates between development cycles and stability periods — see
`runtime/doc/develop.txt` `*design-policy*`.
- **During a stability period** only clear bug fixes, security fixes,
documentation updates, translations, and runtime file updates are
accepted. No new features, no backwards-incompatible changes.
- **Once released in a minor version**, C-core features must stay
backwards-compatible. Runtime files have a bit more flexibility so
their maintainers can correct old behavior.
- **Deprecated features** stay reachable via config (do not hard-error),
are documented as deprecated, can be disabled at compile time, and
may be removed in a later cycle.
## Security
Before reporting a suspected security issue or submitting a patch
that touches security-sensitive code, read `SECURITY.md`. Follow
the disclosure process described there.
## Before submitting
1. Commit message follows the format above.
2. All modified code compiles without new warnings.
3. Tests pass, and new functionality has regression tests.
4. Documentation is updated for user-visible changes.
5. Signed-off-by is present.
6. Diff contains only changes relevant to the stated problem —
no stray whitespace fixes, no unrelated refactors, no unrelated
regeneration of `auto/configure`.
7. For multi-patch series: each commit compiles and passes its own
tests. A known-broken intermediate state that a later patch fixes
is not acceptable — squash instead.
## When in doubt
- Make the smallest possible change to achieve the goal. Do not rewrite
entire files or functions when a targeted edit suffices.
- Read surrounding code and match its style rather than imposing an
"improvement."
- Err toward smaller, more focused patches. A patch that does three
things is three patches.
- If a patch fixes a symptom of a deeper bug, say so in the Problem
and acknowledge the scope limitation in the Solution.
- Before claiming a bug exists, reproduce it. Before claiming code does X, read
the code. Do not rely on training-data memory of file contents.
- Before running shell commands that modify files outside the working tree,
install packages, push branches, or invoke network operations, confirm with
the user.
+15 -3
View File
@@ -9,20 +9,24 @@ SRC_ALL = \
.github/MAINTAINERS \
.github/ISSUE_TEMPLATE/bug_report.yml \
.github/ISSUE_TEMPLATE/feature_request.md \
.github/workflows/ci-linux.yml \
.github/workflows/ci-linux_asan.yml \
.github/workflows/ci-macos.yml \
.github/workflows/ci-windows.yml \
.github/workflows/ci.yml \
.github/workflows/codeql-analysis.yml \
.github/workflows/coverity.yml \
.github/workflows/link-check.yml \
.github/actions/build_vim_on_linux/action.yml \
.github/actions/test_artifacts/action.yml \
.github/dependabot.yml \
.gitignore \
.hgignore \
.appveyor.yml \
.clang-format \
.codecov.yml \
.editorconfig \
ci/appveyor.bat \
ci/config.mk*.sed \
ci/gen_testset.py \
ci/if_ver*.vim \
ci/if_feat_check.vim \
ci/lychee.toml \
@@ -145,12 +149,14 @@ SRC_ALL = \
src/session.c \
src/sha256.c \
src/sign.c \
src/socketserver.c \
src/sound.c \
src/spell.c \
src/spell.h \
src/spellfile.c \
src/spellsuggest.c \
src/strings.c \
src/strptime.c \
src/structs.h \
src/syntax.c \
src/tabpanel.c \
@@ -343,6 +349,7 @@ SRC_ALL = \
src/proto/session.pro \
src/proto/sha256.pro \
src/proto/sign.pro \
src/proto/socketserver.pro \
src/proto/sound.pro \
src/proto/spell.pro \
src/proto/spellfile.pro \
@@ -440,6 +447,7 @@ SRC_ALL = \
src/libvterm/t/66screen_extent.test \
src/libvterm/t/67screen_dbl_wh.test \
src/libvterm/t/68screen_termprops.test \
src/libvterm/t/69screen_pushline.test \
src/libvterm/t/69screen_reflow.test \
src/libvterm/t/90vttest_01-movement-1.test \
src/libvterm/t/90vttest_01-movement-2.test \
@@ -496,6 +504,9 @@ SRC_UNIX = \
src/gui_gtk_f.c \
src/gui_gtk_f.h \
src/gui_gtk_x11.c \
src/gui_gtk4.c \
src/gui_gtk4_f.c \
src/gui_gtk4_f.h \
src/gui_gtk_res.xml \
src/gui_motif.c \
src/gui_xmdlg.c \
@@ -525,6 +536,7 @@ SRC_UNIX = \
src/proto/gui_gtk.pro \
src/proto/gui_gtk_x11.pro \
src/proto/gui_gtk_gresources.pro \
src/proto/gui_gtk4.pro \
src/proto/gui_motif.pro \
src/proto/gui_xmdlg.pro \
src/proto/gui_x11.pro \
@@ -1191,10 +1203,10 @@ LANG_DOS = \
# be excluded from distribution tarballs and the like.
# This excludes them from the CI check for unlisted files.
IGNORE = \
.appveyor.yml \
.github/FUNDING.yml \
.github/labeler.yml \
.github/workflows/label.yml \
AGENTS.md \
SECURITY.md \
ci/unlisted.make \
ci/hlgroups.make \
-1
View File
@@ -1,7 +1,6 @@
# [![Vim The editor](https://github.com/vim/vim/raw/master/runtime/vimlogo.gif)](https://www.vim.org)
[![Github Build status](https://github.com/vim/vim/workflows/GitHub%20CI/badge.svg)](https://github.com/vim/vim/actions?query=workflow%3A%22GitHub+CI%22)
[![Appveyor Build status](https://ci.appveyor.com/api/projects/status/o2qht2kjm02sgghk?svg=true)](https://ci.appveyor.com/project/chrisbra/vim)
[![Cirrus Build Status](https://api.cirrus-ci.com/github/vim/vim.svg)](https://cirrus-ci.com/github/vim/vim)
[![Coverage Status](https://codecov.io/gh/vim/vim/coverage.svg?branch=master)](https://codecov.io/gh/vim/vim?branch=master)
[![Coverity Scan](https://scan.coverity.com/projects/241/badge.svg)](https://scan.coverity.com/projects/vim)
-131
View File
@@ -1,131 +0,0 @@
@echo off
:: Batch file for building/testing Vim on AppVeyor
set target=%1
set "GETTEXT_PATH=c:\gettext64\bin"
setlocal ENABLEDELAYEDEXPANSION
cd %APPVEYOR_BUILD_FOLDER%
:: Python3
set "PYTHON3_VER=311"
set "PYTHON3_RELEASE=3.11.1"
set "PYTHON3_URL=https://www.python.org/ftp/python/%PYTHON3_RELEASE%/python-%PYTHON3_RELEASE%-amd64.exe"
set "PYTHON3_DIR=C:\python%PYTHON3_VER%-x64"
:: Gettext-tools, iconv and libraries
set "GETTEXT64_URL=https://github.com/mlocati/gettext-iconv-windows/releases/download/v0.21-v1.16/gettext0.21-iconv1.16-shared-64.zip"
set "GETTEXT64_DIR=c:\gettext64"
set "VSWHERE=%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe"
if exist "%VSWHERE%" (
for /f "usebackq delims=" %%i in (
`"%VSWHERE%" -products * -latest -property installationPath`
) do (
set "VCVARSALL=%%i\VC\Auxiliary\Build\vcvarsall.bat"
)
)
if not exist "%VCVARSALL%" (
set "VCVARSALL=%ProgramFiles(x86)%\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"
)
call "%VCVARSALL%" x64
goto %target%
echo Unknown build target.
exit 1
:: ----------------------------------------------------------------------------
:install
@echo on
if not exist downloads mkdir downloads
:: Python 3
if not exist %PYTHON3_DIR% (
call :downloadfile %PYTHON3_URL% downloads\python3.exe
cmd /c start /wait downloads\python3.exe /quiet TargetDir=%PYTHON3_DIR% ^
Include_pip=0 Include_tcltk=0 Include_test=0 Include_tools=0 ^
AssociateFiles=0 Shortcuts=0 Include_doc=0 Include_launcher=0 ^
InstallLauncherAllUsers=0
)
:: GETTEXT
if not exist %GETTEXT64_DIR% (
mkdir %GETTEXT64_DIR%
call :downloadfile %GETTEXT64_URL% downloads\gettext64.zip
cmd /c powershell.exe -NoLogo -NoProfile -Command ^
Add-Type -AssemblyName 'System.IO.Compression.FileSystem'; ^
[System.IO.Compression.ZipFile]::ExtractToDirectory^('downloads\gettext64.zip', ^
'%GETTEXT64_DIR%'^)
copy /y %GETTEXT64_DIR%\bin\libintl-8.dll C:\projects\vim\src\ || exit 1
copy /y %GETTEXT64_DIR%\bin\libiconv-2.dll C:\projects\vim\src\ || exit 1
)
@echo off
goto :eof
:: ----------------------------------------------------------------------------
:build
cd src
echo "Building MSVC 64bit console Version"
nmake -f Make_mvc.mak CPU=AMD64 ^
OLE=no GUI=no IME=yes ICONV=yes DEBUG=no ^
FEATURES=%FEATURE% CI_CFLAGS=/we4267
if not exist vim.exe (
echo Build failure.
exit 1
)
:: build MSVC huge version with python and channel support
:: GUI needs to be last, so that testing works
echo "Building MSVC 64bit GUI Version"
if "%FEATURE%" == "HUGE" (
nmake -f Make_mvc.mak CPU=AMD64 ^
OLE=no GUI=yes IME=yes ICONV=yes DEBUG=no POSTSCRIPT=yes ^
PYTHON_VER=27 DYNAMIC_PYTHON=yes PYTHON=C:\Python27-x64 ^
PYTHON3_VER=%PYTHON3_VER% DYNAMIC_PYTHON3=yes PYTHON3=%PYTHON3_DIR% ^
FEATURES=%FEATURE% CI_CFLAGS=/we4267
) ELSE (
nmake -f Make_mvc.mak CPU=AMD64 ^
OLE=no GUI=yes IME=yes ICONV=yes DEBUG=no ^
FEATURES=%FEATURE% CI_CFLAGS=/we4267
)
if not exist gvim.exe (
echo Build failure.
exit 1
)
.\gvim -u NONE -c "redir @a | ver |0put a | wq" ver_msvc.txt || exit 1
echo "version output MSVC console"
.\vim --version || exit 1
echo "version output MSVC GUI"
type ver_msvc.txt || exit 1
goto :eof
:: ----------------------------------------------------------------------------
:test
@echo on
cd src/testdir
:: Testing with MSVC gvim
path %PYTHON3_DIR%;%GETTEXT_PATH%;%PATH%
nmake -f Make_mvc.mak VIMPROG=..\gvim
nmake -f Make_mvc.mak clean
:: Testing with MSVC console version
nmake -f Make_mvc.mak VIMPROG=..\vim
@echo off
goto :eof
:: ----------------------------------------------------------------------------
:downloadfile
:: call :downloadfile <URL> <localfile>
if not exist %2 (
curl -f -L %1 -o %2
)
if ERRORLEVEL 1 (
rem Retry once.
curl -f -L %1 -o %2 || exit 1
)
@goto :eof
+43
View File
@@ -0,0 +1,43 @@
#!/usr/bin/env python3
import argparse
import itertools
import json
import re
import subprocess
def generate_testset(n):
cp = subprocess.run(["make", "-C", "src/testdir", "-npq"], capture_output=True)
tests = set()
for line in cp.stdout.decode().split("\n"):
if re.match(r"^(NEW_TESTS_RES|TEST_VIM9_RES) = ", line):
tests.update(re.findall(r"\btest\w+\.res\b", line))
tests = sorted(list(tests))
# move test_alot*.res to the end
tests = (
[t for t in tests if not t.startswith("test_alot")]
+ [t for t in tests if t.startswith("test_alot_")]
+ ["test_alot.res"]
)
targets = tests
if n > 1:
targets = [ts for ts in itertools.batched(tests, n)]
targets = [[t for t in ts if t] for ts in itertools.zip_longest(*targets)]
return targets
def main():
parser = argparse.ArgumentParser()
parser.add_argument("n", type=int, nargs="?", default=1)
args = parser.parse_args()
print(json.dumps(generate_testset(args.n)))
if __name__ == "__main__":
main()
+1 -1
View File
@@ -13,7 +13,7 @@ extensions = ["c", "h", "md", "html", "txt"]
accept = ["100..=103", "200..=299", "429"]
# Retry each request a few times on transient network errors
retries = 2
max_retries = 2
retry_wait_time = 2
# Timeout per request in seconds
+1 -1
View File
@@ -137,7 +137,7 @@ README_vms.txt VMS
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ
Для системе macOS вы може использовать MacVim: https://macvim.org
Для системе macOS вы можете использовать MacVim: https://macvim.org
Последние новости о редакторе Vim можно найти на его домашней странице:
https://www.vim.org/
+18 -16
View File
@@ -90,7 +90,7 @@ Unicode true ; !include defaults to UTF-8 after Unicode True since 3.0 Alpha 2
# ----------- No configurable settings below this line -----------
##########################################################
# Installer Attributes, Including headers, Plugins and etc.
# Installer Attributes, Including headers, Plugins and etc.
CRCCheck force
@@ -638,21 +638,23 @@ SectionGroupEnd
!undef LIBRARY_X64
${EndIf}
# Install DLLs for 32-bit gvimext.dll into the GvimExt32 directory.
SetOutPath $0\GvimExt32
ClearErrors
!insertmacro InstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \
"${GETTEXT}\gettext32\libintl-8.dll" \
"$0\GvimExt32\libintl-8.dll" "$0\GvimExt32"
!insertmacro InstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \
"${GETTEXT}\gettext32\libiconv-2.dll" \
"$0\GvimExt32\libiconv-2.dll" "$0\GvimExt32"
# Install libgcc_s_sjlj-1.dll only if it is needed.
!if ${INCLUDE_LIBGCC}
!if /FileExists "${GETTEXT}\gettext32\libgcc_s_sjlj-1.dll"
!insertmacro InstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \
"${GETTEXT}\gettext32\libgcc_s_sjlj-1.dll" \
"$0\GvimExt32\libgcc_s_sjlj-1.dll" "$0\GvimExt32"
!if ! ${ARM64}
# Install DLLs for 32-bit gvimext.dll into the GvimExt32 directory.
SetOutPath $0\GvimExt32
ClearErrors
!insertmacro InstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \
"${GETTEXT}\gettext32\libintl-8.dll" \
"$0\GvimExt32\libintl-8.dll" "$0\GvimExt32"
!insertmacro InstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \
"${GETTEXT}\gettext32\libiconv-2.dll" \
"$0\GvimExt32\libiconv-2.dll" "$0\GvimExt32"
# Install libgcc_s_sjlj-1.dll only if it is needed.
!if ${INCLUDE_LIBGCC}
!if /FileExists "${GETTEXT}\gettext32\libgcc_s_sjlj-1.dll"
!insertmacro InstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \
"${GETTEXT}\gettext32\libgcc_s_sjlj-1.dll" \
"$0\GvimExt32\libgcc_s_sjlj-1.dll" "$0\GvimExt32"
!endif
!endif
!endif
${EndIf}
+2 -1
View File
@@ -14,9 +14,10 @@ Omni completion files:
ccomplete.vim C
csscomplete.vim HTML / CSS
htmlcomplete.vim HTML
javascriptcomplete.vim Javascript
javascriptcomplete.vim Javascript
phpcomplete.vim PHP
pythoncomplete.vim Python
python3complete.vim Python
rubycomplete.vim Ruby
syntaxcomplete.vim from syntax highlighting
xmlcomplete.vim XML (uses files in the xml directory)
+2 -4
View File
@@ -3,9 +3,7 @@ vim9script
# Language: ConTeXt typesetting engine
# Maintainer: Nicola Vitacolonna <nvitacolonna@gmail.com>
# Former Maintainers: Nikolai Weibull <now@bitwi.se>
# Latest Revision: 2026 Feb 03
# Last Change:
# 2026 Mar 30 by Vim project: Use fnameescape for the Log command
# Latest Revision: 2026 May 20
# Typesetting {{{
import autoload './typeset.vim'
@@ -35,7 +33,7 @@ export def Log(bufname: string)
var logpath = typeset.LogPath(bufname)
if filereadable(logpath)
execute 'edit' .. fnameescape(typeset.LogPath(bufname))
execute 'edit' fnameescape(typeset.LogPath(bufname))
return
endif
+40 -6
View File
@@ -3,7 +3,7 @@ vim9script
# Vim functions for file type detection
#
# Maintainer: The Vim Project <https://github.com/vim/vim>
# Last Change: 2026 Apr 03
# Last Change: 2026 May 29
# Former Maintainer: Bram Moolenaar <Bram@vim.org>
# These functions are moved here from runtime/filetype.vim to make startup
@@ -63,6 +63,21 @@ export def FTapp()
endfor
enddef
# This function checks for Kawasaki robots AS file or atlas file type.
export def FTas()
if exists("g:filetype_as")
exe "setf " .. g:filetype_as
return
endif
for lnum in range(1, min([line("$"), 30]))
if getline(lnum) =~ '^\.NETCONF'
setf kawasaki_as
return
endif
endfor
setf atlas
enddef
# This function checks for the kind of assembly that is wanted by the user, or
# can be detected from the beginning of the file.
export def FTasm()
@@ -547,7 +562,7 @@ export def FThtml()
while n < 40 && n <= line("$")
# Check for Angular
if getline(n) =~ '@\(if\|for\|defer\|switch\)\|\*\(ngIf\|ngFor\|ngSwitch\|ngTemplateOutlet\)\|ng-template\|ng-content'
if getline(n) =~ '@\(if\|for\|defer\|switch\)\|\*\(ngIf\|ngFor\|ngSwitch\|ngTemplateOutlet\)\|\<ng-template\|\<ng-content'
setf htmlangular
return
endif
@@ -798,9 +813,14 @@ export def FTnroff(): number
enddef
export def FTmm()
if exists("g:filetype_mm")
exe "setf " .. g:filetype_mm
return
endif
var n = 1
while n < 20
if getline(n) =~ '^\s*\(#\s*\(include\|import\)\>\|@import\>\|/\*\)'
if getline(n) =~ '^\s*\(//\|#\s*\(include\|import\)\>\|@import\>\|/\*\)'
setf objcpp
return
endif
@@ -915,7 +935,7 @@ export def FTinc()
elseif line =~ '^\s*\%({\|(\*\)' || line =~? ft_pascal_keywords
setf pascal
return
elseif line =~# '\<\%(require\|inherit\)\>' || line =~# '[A-Z][A-Za-z0-9_:${}/]*\s\+\%(??\|[?:+.]\)\?=.\? '
elseif line =~# '^\s*\<\%(require\|inherit\)\>' || line =~# '^\s*[A-Z][A-Za-z0-9_:${}/]*\%(\[[A-Za-z0-9_:/]\+\]\)*\s\+\%(??=\|[?:+.]=\|=[+.]\?\)\s\+'
setf bitbake
return
endif
@@ -1726,6 +1746,8 @@ const ft_from_ext = {
"tdf": "ahdl",
# AIDL
"aidl": "aidl",
# Algol 68
"a68": "algol68",
# AMPL
"run": "ampl",
# ANTLR / PCCTS
@@ -1764,7 +1786,6 @@ const ft_from_ext = {
"astro": "astro",
# Atlas
"atl": "atlas",
"as": "atlas",
# Atom is based on XML
"atom": "xml",
# Authzed
@@ -1798,6 +1819,7 @@ const ft_from_ext = {
# BDF font
"bdf": "bdf",
# Beancount
"bean": "beancount",
"beancount": "beancount",
# BibTeX bibliography database file
"bib": "bib",
@@ -2292,6 +2314,8 @@ const ft_from_ext = {
# KAREL
"kl": "karel",
"KL": "karel",
# Kawasaki AS
"pg": "kawasaki_as",
# KDL
"kdl": "kdl",
# KerML
@@ -2312,6 +2336,8 @@ const ft_from_ext = {
"kts": "kotlin",
# KDE script
"ks": "kscript",
# Kaitai struct
"ksy": "yaml",
# Kyaml
"kyaml": "yaml",
"kyml": "yaml",
@@ -2613,6 +2639,8 @@ const ft_from_ext = {
"qmd": "quarto",
# QuickBms
"bms": "quickbms",
# Popcap Reanimation files
"reanim": "xml",
# Racket (formerly detected as "scheme")
"rkt": "racket",
"rktd": "racket",
@@ -2707,6 +2735,8 @@ const ft_from_ext = {
"mill": "scala",
# SBT - Scala Build Tool
"sbt": "sbt",
# SGF, Smart Game Format
"sgf": "sgf",
# Slang Shading Language
"slang": "shaderslang",
# Slint
@@ -2735,6 +2765,8 @@ const ft_from_ext = {
"sieve": "sieve",
# TriG
"trig": "trig",
# Tolk
"tolk": "tolk",
# Zig and Zig Object Notation (ZON)
"zig": "zig",
"zon": "zig",
@@ -3113,7 +3145,9 @@ const ft_from_ext = {
"bp": "bp",
# Tiltfile
"Tiltfile": "tiltfile",
"tiltfile": "tiltfile"
"tiltfile": "tiltfile",
# Ghostty
"ghostty": "ghostty",
}
# Key: file name (the final path component, excluding the drive and root)
# Value: filetype
+5 -3
View File
@@ -4,7 +4,7 @@ vim9script
# Invoked from "scripts.vim" in 'runtimepath'
#
# Maintainer: The Vim Project <https://github.com/vim/vim>
# Last Change: 2025 Dec 22
# Last Change: 2026 Apr 09
# Former Maintainer: Bram Moolenaar <Bram@vim.org>
export def DetectFiletype()
@@ -45,6 +45,8 @@ def DetectFromHashBang(firstline: string)
name = substitute(line1, '^#!.*\<env\>\s\+\(\i\+\).*', '\1', '')
elseif line1 =~ '^#!\s*[^/\\ ]*\>\([^/\\]\|$\)'
name = substitute(line1, '^#!\s*\([^/\\ ]*\>\).*', '\1', '')
elseif line1 =~ '^#!.*\<busybox\>'
name = substitute(line1, '^#!.*\<busybox\>\s\+\(\i\+\).*', '\1', '')
else
name = substitute(line1, '^#!\s*\S*[/\\]\(\f\+\).*', '\1', '')
endif
@@ -67,7 +69,7 @@ enddef
# Returns an empty string when not recognized.
export def Exe2filetype(name: string, line1: string): string
# Bourne-like shell scripts: bash bash2 dash ksh ksh93 sh
if name =~ '^\(bash\d*\|dash\|ksh\d*\|sh\)\>'
if name =~ '^\(bash\d*\|d\?ash\|ksh\d*\|sh\)\>'
return dist#ft#SetFileTypeSH(line1, false)
# csh scripts
@@ -115,7 +117,7 @@ export def Exe2filetype(name: string, line1: string): string
return 'php'
# Python
elseif name =~ 'python'
elseif name =~ 'python' || (name == 'uv' && line1 =~ '\<uv run\>')
return 'python'
# Groovy
+9 -6
View File
@@ -3,7 +3,7 @@ vim9script
# Vim runtime support library
#
# Maintainer: The Vim Project <https://github.com/vim/vim>
# Last Change: 2026 Apr 06
# Last Change: 2026 May 30
export def IsSafeExecutable(filetype: string, executable: string): bool
if empty(exepath(executable))
@@ -51,7 +51,7 @@ if has('unix')
execute $'silent !cmd /c start "" /b {args} {Redir()}' | redraw!
enddef
endif
elseif exists('$WSL_DISTRO_NAME') # use cmd.exe to start GUI apps in WSL
elseif exists('$WSL_DISTRO_NAME') && executable('cmd.exe') # use cmd.exe to start GUI apps in WSL
export def Launch(args: string)
const command = (args =~? '\v<\f+\.(exe|com|bat|cmd)>')
? $'cmd.exe /c start /b {args} {Redir()}'
@@ -131,15 +131,18 @@ enddef
export def Open(file: string)
# disable shellslash for shellescape, required on Windows #17995
if exists('+shellslash') && &shellslash
&shellslash = false
defer setbufvar('%', '&shellslash', true)
&shellslash = false
endif
if &shell == 'pwsh' || &shell == 'powershell'
const shell = &shell
defer setbufvar('%', '&shell', &shell)
setlocal shell&
defer setbufvar('%', '&shell', shell)
endif
Launch($"{Viewer()} {shellescape(file, 1)}")
if has('unix') && !has('win32unix') && !exists('$WSL_DISTRO_NAME')
Launch($"{Viewer()} {shellescape(file)}")
else
Launch($"{Viewer()} {shellescape(file, 1)}")
endif
enddef
# Uncomment this line to check for compilation errors early
+19 -18
View File
@@ -15,6 +15,7 @@
" 2025 Feb 28 by Vim Project: add support for bzip3 (#16755)
" 2025 May 11 by Vim Project: check network connectivity (#17249)
" 2025 Dec 21 by Vim Project: make the wget check more robust (#18987)
" 2026 May 20 by Vim Project: use correct shellescape() with ! command
" }}}
"
" GetLatestVimScripts: 642 1 :AutoInstall: getscript.vim
@@ -433,9 +434,9 @@ fun! s:GetOneScript(...)
let itry= 1
while itry <= 3
if has("win32") || has("win16") || has("win95")
new|exe "silent r!".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(tmpfile).' '.shellescape(scriptaddr)|bw!
new|exe "silent r!".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(tmpfile,1).' '.shellescape(scriptaddr,1)|bw!
else
exe "silent !".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(tmpfile)." ".shellescape(scriptaddr)
exe "silent !".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(tmpfile,1)." ".shellescape(scriptaddr,1)
endif
if itry == 1
exe "silent vsplit ".fnameescape(tmpfile)
@@ -503,9 +504,9 @@ fun! s:GetOneScript(...)
" -----------------------------------------------------------------------------
echomsg ".downloading new <".sname.">"
if has("win32") || has("win16") || has("win95")
new|exe "silent r!".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(sname)." ".shellescape(g:GetLatestVimScripts_downloadaddr.latestsrcid)|bw!
new|exe "silent r!".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(sname,1)." ".shellescape(g:GetLatestVimScripts_downloadaddr.latestsrcid,1)|bw!
else
exe "silent !".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(sname)." ".shellescape(g:GetLatestVimScripts_downloadaddr.latestsrcid)
exe "silent !".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(sname,1)." ".shellescape(g:GetLatestVimScripts_downloadaddr.latestsrcid,1)
endif
" --------------------------------------------------------------------------
@@ -513,7 +514,7 @@ fun! s:GetOneScript(...)
" --------------------------------------------------------------------------
if doautoinstall
if filereadable(sname)
exe "silent !".g:GetLatestVimScripts_mv." ".shellescape(sname)." ".shellescape(s:autoinstall)
exe "silent !".g:GetLatestVimScripts_mv." ".shellescape(sname,1)." ".shellescape(s:autoinstall,1)
let curdir = fnameescape(substitute(getcwd(),'\','/','ge'))
let installdir= curdir."/Installed"
if !isdirectory(installdir)
@@ -532,33 +533,33 @@ fun! s:GetOneScript(...)
" decompress
if sname =~ '\.bz2$'
exe "sil !".g:GetLatestVimScripts_bunzip2." ".shellescape(sname)
exe "sil !".g:GetLatestVimScripts_bunzip2." ".shellescape(sname,1)
let sname= substitute(sname,'\.bz2$','','')
elseif sname =~ '\.bz3$'
exe "sil !".g:GetLatestVimScripts_bunzip3." ".shellescape(sname)
exe "sil !".g:GetLatestVimScripts_bunzip3." ".shellescape(sname,1)
let sname= substitute(sname,'\.bz3$','','')
elseif sname =~ '\.gz$'
exe "sil !".g:GetLatestVimScripts_gunzip." ".shellescape(sname)
exe "sil !".g:GetLatestVimScripts_gunzip." ".shellescape(sname,1)
let sname= substitute(sname,'\.gz$','','')
elseif sname =~ '\.xz$'
exe "sil !".g:GetLatestVimScripts_unxz." ".shellescape(sname)
exe "sil !".g:GetLatestVimScripts_unxz." ".shellescape(sname,1)
let sname= substitute(sname,'\.xz$','','')
else
endif
" distribute archive(.zip, .tar, .vba, .vmb, ...) contents
if sname =~ '\.zip$'
exe "silent !".g:GetLatestVimScripts_unzip." -o ".shellescape(sname)
exe "silent !".g:GetLatestVimScripts_unzip." -o ".shellescape(sname,1)
elseif sname =~ '\.tar$'
exe "silent !tar -xvf ".shellescape(sname)
exe "silent !tar -xvf ".shellescape(sname,1)
elseif sname =~ '\.tgz$'
exe "silent !tar -zxvf ".shellescape(sname)
exe "silent !tar -zxvf ".shellescape(sname,1)
elseif sname =~ '\.taz$'
exe "silent !tar -Zxvf ".shellescape(sname)
exe "silent !tar -Zxvf ".shellescape(sname,1)
elseif sname =~ '\.tbz$'
exe "silent !tar -jxvf ".shellescape(sname)
exe "silent !tar -jxvf ".shellescape(sname,1)
elseif sname =~ '\.txz$'
exe "silent !tar -Jxvf ".shellescape(sname)
exe "silent !tar -Jxvf ".shellescape(sname,1)
elseif sname =~ '\.vba$\|\.vmb$'
silent 1split
if exists("g:vimball_home")
@@ -579,12 +580,12 @@ fun! s:GetOneScript(...)
" move plugin to plugin/ or AsNeeded/ directory
" ---------------------------------------------
if sname =~ '.vim$'
exe "silent !".g:GetLatestVimScripts_mv." ".shellescape(sname)." ".tgtdir
exe "silent !".g:GetLatestVimScripts_mv." ".shellescape(sname,1)." ".tgtdir
else
exe "silent !".g:GetLatestVimScripts_mv." ".shellescape(sname)." ".installdir
exe "silent !".g:GetLatestVimScripts_mv." ".shellescape(sname,1)." ".installdir
endif
if tgtdir != "plugin"
exe "silent !".g:GetLatestVimScripts_mv." ".shellescape("plugin/".pname)." ".tgtdir
exe "silent !".g:GetLatestVimScripts_mv." ".shellescape("plugin/".pname,1)." ".tgtdir
endif
" helptags step
+23 -34
View File
@@ -1,6 +1,6 @@
" Vim autoload file for editing compressed files.
" Maintainer: The Vim Project <https://github.com/vim/vim>
" Last Change: 2024 Nov 25
" Last Change: 2026 Apr 26
" Former Maintainer: Bram Moolenaar <Bram@vim.org>
" These functions are used by the gzip plugin.
@@ -82,13 +82,8 @@ fun gzip#read(cmd)
let empty = line("'[") == 1 && line("']") == line("$")
let tmp = tempname()
let tmpe = tmp . "." . expand("<afile>:e")
if exists('*fnameescape')
let tmp_esc = fnameescape(tmp)
let tmpe_esc = fnameescape(tmpe)
else
let tmp_esc = escape(tmp, ' ')
let tmpe_esc = escape(tmpe, ' ')
endif
let tmp_esc = fnameescape(tmp)
let tmpe_esc = fnameescape(tmpe)
" write the just read lines to a temp file "'[,']w tmp.gz"
execute "silent '[,']w " . tmpe_esc
" uncompress the temp file: call system("gzip -dn tmp.gz")
@@ -101,22 +96,14 @@ fun gzip#read(cmd)
let ok = 1
" delete the compressed lines; remember the line number
let l = line("'[") - 1
if exists(":lockmarks")
lockmarks '[,']d _
else
'[,']d _
endif
lockmarks '[,']d _
" read in the uncompressed lines "'[-1r tmp"
" Use ++edit if the buffer was empty, keep the 'ff' and 'fenc' options.
setlocal nobin
if exists(":lockmarks")
if empty
execute "silent lockmarks " . l . "r ++edit " . tmp_esc
else
execute "silent lockmarks " . l . "r " . tmp_esc
endif
if empty
execute "silent lockmarks " . l . "r ++edit " . tmp_esc
else
execute "silent " . l . "r " . tmp_esc
execute "silent lockmarks " . l . "r " . tmp_esc
endif
" if buffer became empty, delete trailing blank line
@@ -143,11 +130,7 @@ fun gzip#read(cmd)
" When uncompressed the whole buffer, do autocommands
if ok && empty
if exists('*fnameescape')
let fname = fnameescape(expand("%:r"))
else
let fname = escape(expand("%:r"), " \t\n*?[{`$\\%#'\"|!<")
endif
let fname = fnameescape(expand("%:r"))
if filereadable(undofile(expand("%")))
exe "sil rundo " . fnameescape(undofile(expand("%")))
endif
@@ -191,8 +174,9 @@ fun gzip#appre(cmd)
call s:set_compression(readfile(nm, "b", 1)[0])
endif
" Rename to a weird name to avoid the risk of overwriting another file
let nmt = expand("<afile>:p:h") . "/X~=@l9q5"
" Rename to a unique name to avoid the risk of overwriting another file
" or being targeted by a symlink in a shared directory.
let nmt = s:samedir_tempname(nm)
let nmte = nmt . "." . expand("<afile>:e")
if rename(nm, nmte) == 0
if &patchmode != "" && getfsize(nm . &patchmode) == -1
@@ -208,22 +192,27 @@ fun gzip#appre(cmd)
endfun
" find a file name for the file to be compressed. Use "name" without an
" extension if possible. Otherwise use a weird name to avoid overwriting an
" existing file.
" extension if possible. Otherwise use a unique name to avoid overwriting an
" existing file or following a symlink set up by another user.
fun s:tempname(name)
let fn = fnamemodify(a:name, ":r")
if !filereadable(fn) && !isdirectory(fn)
return fn
endif
return fnamemodify(a:name, ":p:h") . "/X~=@l9q5"
return s:samedir_tempname(a:name)
endfun
" Generate an unpredictable file name in the same directory as "name", using
" the random component of tempname() to avoid symlink attacks in shared
" directories (e.g. /tmp).
fun s:samedir_tempname(name)
let tmp = tempname()
return fnamemodify(a:name, ":p:h") . "/" . fnamemodify(tmp, ":h:t") . fnamemodify(tmp, ":t")
endfun
fun s:escape(name)
" shellescape() was added by patch 7.0.111
if exists("*shellescape")
return shellescape(a:name)
endif
return "'" . a:name . "'"
return shellescape(a:name)
endfun
" vim: set sw=2 :
+17 -3
View File
@@ -14,6 +14,10 @@
" i.e. "import url<c-x,c-o>"
" Continue parsing on invalid line??
"
" v 0.10 by Vim project
" * disables importing local modules, unless the global Vim variable
" g:pythoncomplete_allow_import is set to non-zero
"
" v 0.9
" * Fixed docstring parsing for classes and functions
" * Fixed parsing of *args and **kwargs type arguments
@@ -131,12 +135,24 @@ class Completer(object):
self.parser = PyParser()
def evalsource(self,text,line=0):
# vim is imported locally in vimpy3complete(); re-import here so the
# vim.eval() below works (otherwise NameError, silently caught).
import vim
sc = self.parser.parse(text,line)
try: allow_imports = int(
vim.eval("get(g:, 'pythoncomplete_allow_import', 0)"))
except Exception:
allow_imports = 0
src = sc.get_code()
dbg("source: %s" % src)
try: exec(src,self.compldict)
except: dbg("parser: %s, %s" % (sys.exc_info()[0],sys.exc_info()[1]))
for l in sc.locals:
# Executing import/from statements harvested from the buffer runs
# arbitrary package code; only do so when the user opted in.
if not allow_imports and (l.startswith('import')
or l.startswith('from ')):
continue
try: exec(l,self.compldict)
except: dbg("locals: %s, %s [%s]" % (sys.exc_info()[0],sys.exc_info()[1],l))
@@ -300,13 +316,11 @@ class Scope(object):
def get_code(self):
str = ""
if len(self.docstr) > 0: str += '"""'+self.docstr+'"""\n'
for l in self.locals:
if l.startswith('import'): str += l+'\n'
str += 'class _PyCmplNoType:\n def __getattr__(self,name):\n return None\n'
for sub in self.subscopes:
str += sub.get_code()
for l in self.locals:
if not l.startswith('import'): str += l+'\n'
if not l.startswith('import') and not l.startswith('from '): str += l+'\n'
return str
+17 -3
View File
@@ -12,6 +12,10 @@
" i.e. "import url<c-x,c-o>"
" Continue parsing on invalid line??
"
" v 0.10 by Vim project
" * disables importing local modules, unless the global Vim variable
" g:pythoncomplete_allow_import is set to non-zero
"
" v 0.9
" * Fixed docstring parsing for classes and functions
" * Fixed parsing of *args and **kwargs type arguments
@@ -145,12 +149,24 @@ class Completer(object):
self.parser = PyParser()
def evalsource(self,text,line=0):
# vim is imported locally in vimcomplete(); re-import here so the
# vim.eval() below works (otherwise NameError, silently caught).
import vim
sc = self.parser.parse(text,line)
try: allow_imports = int(
vim.eval("get(g:, 'pythoncomplete_allow_import', 0)"))
except Exception:
allow_imports = 0
src = sc.get_code()
dbg("source: %s" % src)
try: exec(src) in self.compldict
except: dbg("parser: %s, %s" % (sys.exc_info()[0],sys.exc_info()[1]))
for l in sc.locals:
# Executing import/from statements harvested from the buffer runs
# arbitrary package code; only do so when the user opted in.
if not allow_imports and (l.startswith('import')
or l.startswith('from ')):
continue
try: exec(l) in self.compldict
except: dbg("locals: %s, %s [%s]" % (sys.exc_info()[0],sys.exc_info()[1],l))
@@ -315,13 +331,11 @@ class Scope(object):
def get_code(self):
str = ""
if len(self.docstr) > 0: str += '"""'+self.docstr+'"""\n'
for l in self.locals:
if l.startswith('import'): str += l+'\n'
str += 'class _PyCmplNoType:\n def __getattr__(self,name):\n return None\n'
for sub in self.subscopes:
str += sub.get_code()
for l in self.locals:
if not l.startswith('import'): str += l+'\n'
if not l.startswith('import') and not l.startswith('from '): str += l+'\n'
return str
+2 -1
View File
@@ -1,5 +1,6 @@
" Description: Helper functions for Rust commands/mappings
" Last Modified: 2023-09-11
" 2026 May 20 by Vim project: use correct shellescape() with ! command
" For bugs, patches and license go to https://github.com/rust-lang/rust.vim
function! rust#Load()
@@ -125,7 +126,7 @@ function! s:Run(dict, rustc_args, args)
echohl None
endif
if !v:shell_error
exe '!' . shellescape(exepath) . " " . join(map(a:args, 'shellescape(v:val)'))
exe '!' . shellescape(exepath,1) . " " . join(map(a:args, 'shellescape(v:val,1)'))
endif
endfunction
+69 -43
View File
@@ -21,6 +21,11 @@
" 2026 Feb 06 by Vim Project: consider 'nowrapscan' (#19333)
" 2026 Feb 07 by Vim Project: make the path traversal detection more robust (#19341)
" 2026 Apr 06 by Vim Project: fix bugs with lz4 support (#19925)
" 2026 Apr 09 by Vim Project: fix bugs with zstd support (#19930)
" 2026 Apr 09 by Vim Project: fix bug with dotted filename (#19930)
" 2026 Apr 15 by Vim Project: fix more path traversal issues (#19981)
" 2026 Apr 16 by Vim Project: use g:tar_secure in tar#Extract()
" 2026 May 14 by Vim Project: use correct shellescape() call in Vimuntar()
"
" Contains many ideas from Michael Toren's <tar.vim>
"
@@ -610,118 +615,139 @@ fun! tar#Extract()
let &report= repkeep
return
endif
let tarball = expand("%")
let tarbase = substitute(tarball,'\..*$','','')
if fname =~ '^[.]\?[.]/' || simplify(fname) =~ '\.\.[/\\]'
call s:Msg('tar#Extract', 'error', "Path Traversal Attack detected, not extracting!")
let &report= repkeep
return
endif
if has("unix")
if fname =~ '^/'
call s:Msg('tar#Extract', 'error', "Path Traversal Attack detected, not extracting!")
let &report= repkeep
return
endif
else
if fname =~ '^\%(\a:[\\/]\|[\\/]\)'
call s:Msg('tar#Extract', 'error', "Path Traversal Attack detected, not extracting!")
let &report= repkeep
return
endif
endif
let extractcmd= s:WinPath(g:tar_extractcmd)
if filereadable(tarbase.".tar")
call system(extractcmd." ".shellescape(tarbase).".tar ".shellescape(fname))
let tarball = expand("%")
if !filereadable(tarball)
let &report= repkeep
return
endif
if tarball =~# "\.tar$"
call system(extractcmd." ".shellescape(tarball)." ".g:tar_secure.shellescape(fname))
if v:shell_error != 0
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarbase}.tar {fname}: failed!")
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarball} {fname}: failed!")
else
echo "***note*** successfully extracted ". fname
endif
elseif filereadable(tarbase.".tgz")
elseif tarball =~# "\.tgz$"
let extractcmd= substitute(extractcmd,"-","-z","")
call system(extractcmd." ".shellescape(tarbase).".tgz ".shellescape(fname))
call system(extractcmd." ".shellescape(tarball)." ".g:tar_secure.shellescape(fname))
if v:shell_error != 0
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarbase}.tgz {fname}: failed!")
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarball} {fname}: failed!")
else
echo "***note*** successfully extracted ".fname
endif
elseif filereadable(tarbase.".tar.gz")
elseif tarball =~# "\.tar\.gz$"
let extractcmd= substitute(extractcmd,"-","-z","")
call system(extractcmd." ".shellescape(tarbase).".tar.gz ".shellescape(fname))
call system(extractcmd." ".shellescape(tarball)." ".g:tar_secure.shellescape(fname))
if v:shell_error != 0
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarbase}.tar.gz {fname}: failed!")
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarball} {fname}: failed!")
else
echo "***note*** successfully extracted ".fname
endif
elseif filereadable(tarbase.".tbz")
elseif tarball =~# "\.tbz$"
let extractcmd= substitute(extractcmd,"-","-j","")
call system(extractcmd." ".shellescape(tarbase).".tbz ".shellescape(fname))
call system(extractcmd." ".shellescape(tarball)." ".g:tar_secure.shellescape(fname))
if v:shell_error != 0
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarbase}.tbz {fname}: failed!")
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarball} {fname}: failed!")
else
echo "***note*** successfully extracted ".fname
endif
elseif filereadable(tarbase.".tar.bz2")
elseif tarball =~# "\.tar\.bz2$"
let extractcmd= substitute(extractcmd,"-","-j","")
call system(extractcmd." ".shellescape(tarbase).".tar.bz2 ".shellescape(fname))
call system(extractcmd." ".shellescape(tarball)." ".g:tar_secure.shellescape(fname))
if v:shell_error != 0
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarbase}.tar.bz2 {fname}: failed!")
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarball} {fname}: failed!")
else
echo "***note*** successfully extracted ".fname
endif
elseif filereadable(tarbase.".tar.bz3")
elseif tarball =~# "\.tar\.bz3$"
let extractcmd= substitute(extractcmd,"-","-j","")
call system(extractcmd." ".shellescape(tarbase).".tar.bz3 ".shellescape(fname))
call system(extractcmd." ".shellescape(tarball)." ".g:tar_secure.shellescape(fname))
if v:shell_error != 0
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarbase}.tar.bz3 {fname}: failed!")
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarball} {fname}: failed!")
else
echo "***note*** successfully extracted ".fname
endif
elseif filereadable(tarbase.".txz")
elseif tarball =~# "\.txz$"
let extractcmd= substitute(extractcmd,"-","-J","")
call system(extractcmd." ".shellescape(tarbase).".txz ".shellescape(fname))
call system(extractcmd." ".shellescape(tarball)." ".g:tar_secure.shellescape(fname))
if v:shell_error != 0
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarbase}.txz {fname}: failed!")
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarball} {fname}: failed!")
else
echo "***note*** successfully extracted ".fname
endif
elseif filereadable(tarbase.".tar.xz")
elseif tarball =~# "\.tar\.xz$"
let extractcmd= substitute(extractcmd,"-","-J","")
call system(extractcmd." ".shellescape(tarbase).".tar.xz ".shellescape(fname))
call system(extractcmd." ".shellescape(tarball)." ".g:tar_secure.shellescape(fname))
if v:shell_error != 0
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarbase}.tar.xz {fname}: failed!")
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarball} {fname}: failed!")
else
echo "***note*** successfully extracted ".fname
endif
elseif filereadable(tarbase.".tzst")
let extractcmd= substitute(extractcmd,"-","--zstd","")
call system(extractcmd." ".shellescape(tarbase).".tzst ".shellescape(fname))
elseif tarball =~# "\.tzst$"
let extractcmd= substitute(extractcmd,"-","--zstd -","")
call system(extractcmd." ".shellescape(tarball)." ".g:tar_secure.shellescape(fname))
if v:shell_error != 0
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarbase}.tzst {fname}: failed!")
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarball} {fname}: failed!")
else
echo "***note*** successfully extracted ".fname
endif
elseif filereadable(tarbase.".tar.zst")
let extractcmd= substitute(extractcmd,"-","--zstd","")
call system(extractcmd." ".shellescape(tarbase).".tar.zst ".shellescape(fname))
elseif tarball =~# "\.tar\.zst$"
let extractcmd= substitute(extractcmd,"-","--zstd -","")
call system(extractcmd." ".shellescape(tarball)." ".g:tar_secure.shellescape(fname))
if v:shell_error != 0
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarbase}.tar.zst {fname}: failed!")
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarball} {fname}: failed!")
else
echo "***note*** successfully extracted ".fname
endif
elseif filereadable(tarbase.".tlz4")
elseif tarball =~# "\.tlz4$"
if has("linux")
let extractcmd= substitute(extractcmd,"-","-I lz4 -","")
endif
call system(extractcmd." ".shellescape(tarbase).".tlz4 ".shellescape(fname))
call system(extractcmd." ".shellescape(tarball)." ".g:tar_secure.shellescape(fname))
if v:shell_error != 0
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarbase}.tlz4 {fname}: failed!")
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarball} {fname}: failed!")
else
echo "***note*** successfully extracted ".fname
endif
elseif filereadable(tarbase.".tar.lz4")
elseif tarball =~# "\.tar\.lz4$"
if has("linux")
let extractcmd= substitute(extractcmd,"-","-I lz4 -","")
endif
call system(extractcmd." ".shellescape(tarbase).".tar.lz4 ".shellescape(fname))
call system(extractcmd." ".shellescape(tarball)." ".g:tar_secure.shellescape(fname))
if v:shell_error != 0
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarbase}.tar.lz4 {fname}: failed!")
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarball} {fname}: failed!")
else
echo "***note*** successfully extracted ".fname
endif
@@ -807,9 +833,9 @@ fun! tar#Vimuntar(...)
" if necessary, decompress the tarball; then, extract it
if tartail =~ '\.tgz'
if executable("gunzip")
silent exe "!gunzip ".shellescape(tartail)
silent exe "!gunzip ".shellescape(tartail, 1)
elseif executable("gzip")
silent exe "!gzip -d ".shellescape(tartail)
silent exe "!gzip -d ".shellescape(tartail, 1)
else
echoerr "unable to decompress<".tartail."> on this system"
if simplify(curdir) != simplify(tarhome)
File diff suppressed because it is too large Load Diff
+2 -4
View File
@@ -2,9 +2,7 @@ vim9script
# Language: Generic TeX typesetting engine
# Maintainer: Nicola Vitacolonna <nvitacolonna@gmail.com>
# Latest Revision: 2026 Feb 19
# Last Change:
# 2026 Mar 30 by Vim project: Use fnameescape for the ProcessOutput command
# Latest Revision: 2026 May 20
# Constants and helpers {{{
const SLASH = !exists("+shellslash") || &shellslash ? '/' : '\'
@@ -62,7 +60,7 @@ def ProcessOutput(qfid: number, wd: string, efm: string, ch: channel, msg: strin
endif
# Make sure the working directory is correct
silent execute "lcd" .. fnameescape(wd)
silent execute "lcd" fnameescape(wd)
setqflist([], 'a', {'id': qfid, 'lines': [msg], 'efm': efm})
silent lcd -
enddef
+30 -20
View File
@@ -1,12 +1,9 @@
" vimball.vim : construct a file containing both paths and files
" Maintainer: This runtime file is looking for a new maintainer.
" Original Author: Charles E. Campbell
" Date: Apr 11, 2016
" Date: May 20, 2026
" Version: 37 (with modifications from the Vim Project)
" GetLatestVimScripts: 1502 1 :AutoInstall: vimball.vim
" Last Change:
" 2025 Feb 28 by Vim Project: add support for bzip3 (#16755)
" 2026 Apr 05 by Vim Project: Detect Path Traversal Attacks
" Copyright: (c) 2004-2011 by Charles E. Campbell
" The VIM LICENSE applies to Vimball.vim, and Vimball.txt
" (see |copyright|) except use "Vimball" instead of "Vim".
@@ -105,14 +102,14 @@ fun! vimball#MkVimball(line1,line2,writelevel,...) range
while linenr <= a:line2
let svfile = getline(linenr)
if !filereadable(svfile)
call vimball#ShowMesg(s:ERROR,"unable to read file<".svfile.">")
call s:ChgDir(curdir)
call vimball#RestoreSettings()
return
endif
" create/switch to mkvimball tab
if !exists("vbtabnr")
tabnew
@@ -121,7 +118,7 @@ fun! vimball#MkVimball(line1,line2,writelevel,...) range
else
exe "tabn ".vbtabnr
endif
let lastline= line("$") + 1
if lastline == 2 && getline("$") == ""
call setline(1,'" Vimball Archiver by Charles E. Campbell')
@@ -165,7 +162,7 @@ endfun
" ---------------------------------------------------------------------
" vimball#Vimball: extract and distribute contents from a vimball {{{2
" (invoked the the UseVimball command embedded in
" (invoked the the UseVimball command embedded in
" vimballs' prologue)
fun! vimball#Vimball(really,...)
@@ -215,7 +212,7 @@ fun! vimball#Vimball(really,...)
" give title to listing of (extracted) files from Vimball Archive
if a:really
echohl Title | echomsg "Vimball Archive" | echohl None
else
else
echohl Title | echomsg "Vimball Archive Listing" | echohl None
echohl Statement | echomsg "files would be placed under: ".home | echohl None
endif
@@ -229,12 +226,25 @@ fun! vimball#Vimball(really,...)
let fsize = substitute(getline(linenr+1),'^\(\d\+\).\{-}$','\1','')+0
let fenc = substitute(getline(linenr+1),'^\d\+\s*\(\S\{-}\)$','\1','')
let filecnt = filecnt + 1
if fname =~ '\.\.'
" Do not allow a leading /, .. anywhere, or a Windows drive letter
" (e.g. C:/foo) in the file name. Backslashes were already converted
" to forward slashes above, so this also catches \\server\share UNC
" paths via the leading-slash check.
if fname =~ '\.\.' || fname =~ '^/' || fname =~ '^\a:'
echomsg "(Vimball) Path Traversal Attack detected, aborting..."
exe "tabn ".curtabnr
bw! Vimball
call s:ChgDir(curdir)
return
" Also, disallow strange paths, that could lead to code execution from
" .VimballRecord
" Disallow: pipe, quotes and closing paren
elseif fname =~ '[|'')"]'
echomsg printf("(Vimball) Forbidding strange filename: '%s', aborting...", fname)
exe "tabn ".curtabnr
bw! Vimball
call s:ChgDir(curdir)
return
endif
if a:really
@@ -293,7 +303,7 @@ fun! vimball#Vimball(really,...)
exe "silent w! ".fnameescape(fnamepath)
endif
echo "wrote ".fnameescape(fnamepath)
call s:RecordInVar(home,"call delete('".fnamepath."')")
call s:RecordInVar(home,"call delete('".escape(fnamepath, '"''|')."')")
endif
" return to tab with vimball
@@ -368,7 +378,7 @@ fun! vimball#RmVimball(...)
call s:ChgDir(home)
if filereadable(".VimballRecord")
keepalt keepjumps 1split
keepalt keepjumps 1split
sil! keepalt keepjumps e .VimballRecord
let keepsrch= @/
if search('^\M'.curfile."\m: ".'cw')
@@ -416,7 +426,7 @@ fun! vimball#Decompress(fname,...)
" decompression:
if expand("%") =~ '.*\.gz' && executable("gunzip")
" handle *.gz with gunzip
silent exe "!gunzip ".shellescape(a:fname)
silent exe "!gunzip ".shellescape(a:fname,1)
if v:shell_error != 0
call vimball#ShowMesg(s:WARNING,"(vimball#Decompress) gunzip may have failed with <".a:fname.">")
endif
@@ -426,7 +436,7 @@ fun! vimball#Decompress(fname,...)
elseif expand("%") =~ '.*\.gz' && executable("gzip")
" handle *.gz with gzip -d
silent exe "!gzip -d ".shellescape(a:fname)
silent exe "!gzip -d ".shellescape(a:fname,1)
if v:shell_error != 0
call vimball#ShowMesg(s:WARNING,'(vimball#Decompress) "gzip -d" may have failed with <'.a:fname.">")
endif
@@ -436,7 +446,7 @@ fun! vimball#Decompress(fname,...)
elseif expand("%") =~ '.*\.bz2' && executable("bunzip2")
" handle *.bz2 with bunzip2
silent exe "!bunzip2 ".shellescape(a:fname)
silent exe "!bunzip2 ".shellescape(a:fname,1)
if v:shell_error != 0
call vimball#ShowMesg(s:WARNING,"(vimball#Decompress) bunzip2 may have failed with <".a:fname.">")
endif
@@ -446,7 +456,7 @@ fun! vimball#Decompress(fname,...)
elseif expand("%") =~ '.*\.bz2' && executable("bzip2")
" handle *.bz2 with bzip2 -d
silent exe "!bzip2 -d ".shellescape(a:fname)
silent exe "!bzip2 -d ".shellescape(a:fname,1)
if v:shell_error != 0
call vimball#ShowMesg(s:WARNING,'(vimball#Decompress) "bzip2 -d" may have failed with <'.a:fname.">")
endif
@@ -456,7 +466,7 @@ fun! vimball#Decompress(fname,...)
elseif expand("%") =~ '.*\.bz3' && executable("bunzip3")
" handle *.bz3 with bunzip3
silent exe "!bunzip3 ".shellescape(a:fname)
silent exe "!bunzip3 ".shellescape(a:fname,1)
if v:shell_error != 0
call vimball#ShowMesg(s:WARNING,"(vimball#Decompress) bunzip3 may have failed with <".a:fname.">")
endif
@@ -466,7 +476,7 @@ fun! vimball#Decompress(fname,...)
elseif expand("%") =~ '.*\.bz3' && executable("bzip3")
" handle *.bz3 with bzip3 -d
silent exe "!bzip3 -d ".shellescape(a:fname)
silent exe "!bzip3 -d ".shellescape(a:fname,1)
if v:shell_error != 0
call vimball#ShowMesg(s:WARNING,'(vimball#Decompress) "bzip3 -d" may have failed with <'.a:fname.">")
endif
@@ -476,7 +486,7 @@ fun! vimball#Decompress(fname,...)
elseif expand("%") =~ '.*\.zip' && executable("unzip")
" handle *.zip with unzip
silent exe "!unzip ".shellescape(a:fname)
silent exe "!unzip ".shellescape(a:fname,1)
if v:shell_error != 0
call vimball#ShowMesg(s:WARNING,"(vimball#Decompress) unzip may have failed with <".a:fname.">")
endif
@@ -556,7 +566,7 @@ fun! s:RecordInFile(home)
if exists("s:recordfile") || exists("s:recorddir")
let curdir= getcwd()
call s:ChgDir(a:home)
keepalt keepjumps 1split
keepalt keepjumps 1split
let cmd= expand("%:tr").": "
+20 -1
View File
@@ -22,6 +22,8 @@
" 2026 Mar 08 by Vim Project: Make ZipUpdatePS() check for powershell
" 2026 Apr 01 by Vim Project: Detect more path traversal attacks
" 2026 Apr 05 by Vim Project: Detect more path traversal attacks
" 2026 Apr 14 by Vim Project: Detect more path traversal attacks on Windows
" 2026 Apr 15 by Vim Project: Detect more path traversal attacks on Windows
" License: Vim License (see vim's :help license)
" Copyright: Copyright (C) 2005-2019 Charles E. Campbell {{{1
" Permission is hereby granted to use and distribute this code,
@@ -405,7 +407,12 @@ fun! zip#Write(fname)
else
let zipfile = substitute(a:fname,'^.\{-}zipfile://\(.\{-}\)::[^\\].*$','\1','')
let fname = substitute(a:fname,'^.\{-}zipfile://.\{-}::\([^\\].*\)$','\1','')
" TODO: what to check on MS-Windows to avoid writing absolute paths?
" fname should not start with drive letter, UNC path, or leading slash
if fname =~ '^\%(\a:[\\/]\|[\\/]\)'
call s:Mess('Error', "***error*** (zip#Write) Path Traversal Attack detected, not writing!")
call s:ChgDir(curdir,s:WARNING,"(zip#Write) unable to return to ".curdir."!")
return
endif
endif
if fname =~ '^[.]\{1,2}/'
let gnu_cmd = g:zip_zipcmd . ' -d ' . s:Escape(fnamemodify(zipfile,":p"),0) . ' ' . s:Escape(fname,0)
@@ -499,6 +506,18 @@ fun! zip#Extract()
call s:Mess('Error', "***error*** (zip#Browse) Path Traversal Attack detected, not extracting!")
return
endif
" block absolute paths
if has("unix")
if fname =~ '^/'
call s:Mess('Error', "***error*** (zip#Extract) Path Traversal Attack detected, not extracting!")
return
endif
else
if fname =~ '^\%(\a:[\\/]\|[\\/]\)'
call s:Mess('Error', "***error*** (zip#Extract) Path Traversal Attack detected, not extracting!")
return
endif
endif
if filereadable(fname)
call s:Mess('Error', "***error*** (zip#Extract) <" .. fname .."> already exists in directory, not overwriting!")
return
+7 -4
View File
@@ -4,9 +4,9 @@
" Maintainer: Original maintainer Steven Vertigan <steven@vertigan.wattle.id.au>
" URL: https://github.com/vim/colorschemes
" License: Same as Vim
" Last Change: 2025 Oct 14
" Last Change: 2026 Apr 24
" Generated by Colortemplate v3.0.0-beta10
" Generated by Colortemplate v3.0.0-rc1
set background=dark
@@ -124,7 +124,8 @@ hi ToolbarButton guifg=#ffffff guibg=#005faf guisp=NONE gui=NONE ctermfg=231 cte
hi ToolbarLine guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE term=reverse
hi Type guifg=#ffa500 guibg=NONE guisp=NONE gui=bold ctermfg=214 ctermbg=NONE cterm=NONE term=NONE
hi Underlined guifg=NONE guibg=NONE guisp=NONE gui=underline ctermfg=NONE ctermbg=NONE cterm=underline term=underline
hi VertSplit guifg=#008787 guibg=NONE guisp=NONE gui=NONE ctermfg=30 ctermbg=NONE cterm=NONE term=NONE
hi VertSplit guifg=#5fffff guibg=NONE guisp=NONE gui=NONE ctermfg=87 ctermbg=NONE cterm=NONE term=NONE
hi VertSplitNC guifg=#008787 guibg=NONE guisp=NONE gui=NONE ctermfg=30 ctermbg=NONE cterm=NONE term=NONE
hi Visual guifg=#ffffff guibg=#008787 guisp=NONE gui=NONE ctermfg=231 ctermbg=30 cterm=NONE term=reverse
hi VisualNOS guifg=#008787 guibg=#ffffff guisp=NONE gui=NONE ctermfg=30 ctermbg=231 cterm=NONE term=NONE
hi WarningMsg guifg=#d787d7 guibg=NONE guisp=NONE gui=NONE ctermfg=176 ctermbg=NONE cterm=NONE term=standout
@@ -197,7 +198,8 @@ if s:t_Co >= 16
hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=NONE
hi Type ctermfg=darkyellow ctermbg=NONE cterm=NONE
hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
hi VertSplit ctermfg=darkcyan ctermbg=NONE cterm=NONE
hi VertSplit ctermfg=cyan ctermbg=NONE cterm=NONE
hi VertSplitNC ctermfg=darkcyan ctermbg=NONE cterm=NONE
hi Visual ctermfg=white ctermbg=darkcyan cterm=NONE
hi VisualNOS ctermfg=darkcyan ctermbg=white cterm=NONE
hi WarningMsg ctermfg=magenta ctermbg=NONE cterm=NONE
@@ -268,6 +270,7 @@ if s:t_Co >= 8
hi Type ctermfg=red ctermbg=NONE cterm=NONE
hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
hi VertSplit ctermfg=cyan ctermbg=NONE cterm=NONE
hi VertSplitNC ctermfg=darkcyan ctermbg=NONE cterm=NONE
hi Visual ctermfg=black ctermbg=cyan cterm=NONE
hi VisualNOS ctermfg=cyan ctermbg=gray cterm=NONE
hi WarningMsg ctermfg=red ctermbg=NONE cterm=NONE
+17 -17
View File
@@ -2,10 +2,10 @@
" Description: Soothing pastel theme for the high-spirited!
" Author: The Catppuccin Community <catppuccin.com>
" Maintainer: Mao-Yining <mao.yining@outlook.com>
" URL: https://www.github.com/vim/colorschemes
" Last Change: 2026 Jan 31
" URL: https://github.com/vim/colorschemes
" Last Change: 2026 May 04
" Generated by Colortemplate v3.0.0-beta10
" Generated by Colortemplate v3.0.0-rc1
hi clear
let g:colors_name = 'catppuccin'
@@ -80,7 +80,7 @@ if &background == 'dark'
hi PmenuExtra guifg=#6c7086 guibg=#181825 guisp=NONE gui=NONE ctermfg=59 ctermbg=232 cterm=NONE term=NONE
hi PmenuExtraSel guifg=#6c7086 guibg=#313244 guisp=NONE gui=bold ctermfg=59 ctermbg=236 cterm=bold term=bold
hi PmenuMatch guifg=#cdd6f4 guibg=NONE guisp=NONE gui=bold ctermfg=189 ctermbg=NONE cterm=bold term=bold
hi PmenuMatchSel guifg=NONE guibg=NONE guisp=NONE gui=bold ctermfg=NONE ctermbg=NONE cterm=bold term=bold
hi PmenuMatchSel guifg=#cdd6f4 guibg=NONE guisp=NONE gui=bold ctermfg=189 ctermbg=NONE cterm=bold term=bold
hi PmenuSbar guifg=NONE guibg=#313244 guisp=NONE gui=NONE ctermfg=NONE ctermbg=236 cterm=NONE term=reverse
hi PmenuSel guifg=NONE guibg=#313244 guisp=NONE gui=bold ctermfg=NONE ctermbg=236 cterm=bold term=bold
hi PmenuThumb guifg=NONE guibg=#6c7086 guisp=NONE gui=NONE ctermfg=NONE ctermbg=59 cterm=NONE term=NONE
@@ -98,8 +98,8 @@ if &background == 'dark'
hi SpellLocal guifg=NONE guibg=NONE guisp=#89b4fa gui=undercurl ctermfg=111 ctermbg=NONE cterm=underline term=underline
hi SpellRare guifg=NONE guibg=NONE guisp=#a6e3a1 gui=undercurl ctermfg=114 ctermbg=NONE cterm=underline term=underline
hi Statement guifg=#cba6f7 guibg=NONE guisp=NONE gui=NONE ctermfg=183 ctermbg=NONE cterm=NONE term=NONE
hi StatusLine guifg=#cdd6f4 guibg=#11111b guisp=NONE gui=NONE ctermfg=189 ctermbg=16 cterm=NONE term=bold,reverse
hi StatusLineNC guifg=#45475a guibg=#181825 guisp=NONE gui=NONE ctermfg=240 ctermbg=232 cterm=NONE term=bold,underline
hi StatusLine guifg=#cdd6f4 guibg=#11111b guisp=NONE gui=bold ctermfg=189 ctermbg=16 cterm=bold term=bold,reverse
hi StatusLineNC guifg=#6c7086 guibg=#181825 guisp=NONE gui=NONE ctermfg=59 ctermbg=232 cterm=NONE term=bold,underline
hi StorageClass guifg=#f9e2af guibg=NONE guisp=NONE gui=NONE ctermfg=222 ctermbg=NONE cterm=NONE term=NONE
hi String guifg=#a6e3a1 guibg=NONE guisp=NONE gui=NONE ctermfg=114 ctermbg=NONE cterm=NONE term=NONE
hi Structure guifg=#f9e2af guibg=NONE guisp=NONE gui=NONE ctermfg=222 ctermbg=NONE cterm=NONE term=NONE
@@ -207,8 +207,8 @@ if &background == 'dark'
hi PmenuExtra ctermfg=Grey ctermbg=DarkGrey cterm=NONE
hi PmenuExtraSel ctermfg=Grey ctermbg=DarkYellow cterm=bold
hi PmenuMatch ctermfg=White ctermbg=NONE cterm=bold
hi PmenuMatchSel ctermfg=NONE ctermbg=NONE cterm=bold
hi PmenuSbar ctermfg=NONE ctermbg=DarkYellow cterm=NONE
hi PmenuMatchSel ctermfg=White ctermbg=NONE cterm=bold
hi PmenuSbar ctermfg=NONE ctermbg=NONE cterm=NONE
hi PmenuSel ctermfg=NONE ctermbg=DarkYellow cterm=bold
hi PmenuThumb ctermfg=NONE ctermbg=Grey cterm=NONE
hi PreInsert ctermfg=Grey ctermbg=NONE cterm=NONE
@@ -328,8 +328,8 @@ if &background == 'dark'
hi PmenuExtra ctermfg=Grey ctermbg=DarkGrey cterm=NONE
hi PmenuExtraSel ctermfg=Grey ctermbg=DarkYellow cterm=bold
hi PmenuMatch ctermfg=White ctermbg=NONE cterm=bold
hi PmenuMatchSel ctermfg=NONE ctermbg=NONE cterm=bold
hi PmenuSbar ctermfg=NONE ctermbg=DarkYellow cterm=NONE
hi PmenuMatchSel ctermfg=White ctermbg=NONE cterm=bold
hi PmenuSbar ctermfg=NONE ctermbg=NONE cterm=NONE
hi PmenuSel ctermfg=NONE ctermbg=DarkYellow cterm=bold
hi PmenuThumb ctermfg=NONE ctermbg=Grey cterm=NONE
hi PreInsert ctermfg=Grey ctermbg=NONE cterm=NONE
@@ -466,7 +466,7 @@ if &background == 'light'
hi PmenuExtra guifg=#9ca0b0 guibg=#e6e9ef guisp=NONE gui=NONE ctermfg=247 ctermbg=255 cterm=NONE term=NONE
hi PmenuExtraSel guifg=#9ca0b0 guibg=#ccd0da guisp=NONE gui=bold ctermfg=247 ctermbg=253 cterm=bold term=bold
hi PmenuMatch guifg=#4c4f69 guibg=NONE guisp=NONE gui=bold ctermfg=236 ctermbg=NONE cterm=bold term=bold
hi PmenuMatchSel guifg=NONE guibg=NONE guisp=NONE gui=bold ctermfg=NONE ctermbg=NONE cterm=bold term=bold
hi PmenuMatchSel guifg=#4c4f69 guibg=NONE guisp=NONE gui=bold ctermfg=236 ctermbg=NONE cterm=bold term=bold
hi PmenuSbar guifg=NONE guibg=#ccd0da guisp=NONE gui=NONE ctermfg=NONE ctermbg=253 cterm=NONE term=reverse
hi PmenuSel guifg=NONE guibg=#ccd0da guisp=NONE gui=bold ctermfg=NONE ctermbg=253 cterm=bold term=bold
hi PmenuThumb guifg=NONE guibg=#9ca0b0 guisp=NONE gui=NONE ctermfg=NONE ctermbg=247 cterm=NONE term=NONE
@@ -484,8 +484,8 @@ if &background == 'light'
hi SpellLocal guifg=NONE guibg=NONE guisp=#1e66f5 gui=undercurl ctermfg=27 ctermbg=NONE cterm=underline term=underline
hi SpellRare guifg=NONE guibg=NONE guisp=#40a02b gui=undercurl ctermfg=34 ctermbg=NONE cterm=underline term=underline
hi Statement guifg=#8839ef guibg=NONE guisp=NONE gui=NONE ctermfg=93 ctermbg=NONE cterm=NONE term=NONE
hi StatusLine guifg=#4c4f69 guibg=#dce0e8 guisp=NONE gui=NONE ctermfg=236 ctermbg=254 cterm=NONE term=bold,reverse
hi StatusLineNC guifg=#bcc0cc guibg=#e6e9ef guisp=NONE gui=NONE ctermfg=250 ctermbg=255 cterm=NONE term=bold,underline
hi StatusLine guifg=#4c4f69 guibg=#dce0e8 guisp=NONE gui=bold ctermfg=236 ctermbg=254 cterm=bold term=bold,reverse
hi StatusLineNC guifg=#9ca0b0 guibg=#e6e9ef guisp=NONE gui=NONE ctermfg=247 ctermbg=255 cterm=NONE term=bold,underline
hi StorageClass guifg=#df8e1d guibg=NONE guisp=NONE gui=NONE ctermfg=172 ctermbg=NONE cterm=NONE term=NONE
hi String guifg=#40a02b guibg=NONE guisp=NONE gui=NONE ctermfg=34 ctermbg=NONE cterm=NONE term=NONE
hi Structure guifg=#df8e1d guibg=NONE guisp=NONE gui=NONE ctermfg=172 ctermbg=NONE cterm=NONE term=NONE
@@ -593,8 +593,8 @@ if &background == 'light'
hi PmenuExtra ctermfg=DarkGrey ctermbg=Grey cterm=NONE
hi PmenuExtraSel ctermfg=DarkGrey ctermbg=Grey cterm=bold
hi PmenuMatch ctermfg=Black ctermbg=NONE cterm=bold
hi PmenuMatchSel ctermfg=NONE ctermbg=NONE cterm=bold
hi PmenuSbar ctermfg=NONE ctermbg=Grey cterm=NONE
hi PmenuMatchSel ctermfg=Black ctermbg=NONE cterm=bold
hi PmenuSbar ctermfg=NONE ctermbg=NONE cterm=NONE
hi PmenuSel ctermfg=NONE ctermbg=Grey cterm=bold
hi PmenuThumb ctermfg=NONE ctermbg=DarkGrey cterm=NONE
hi PreInsert ctermfg=Black ctermbg=NONE cterm=NONE
@@ -714,8 +714,8 @@ if &background == 'light'
hi PmenuExtra ctermfg=DarkGrey ctermbg=Grey cterm=NONE
hi PmenuExtraSel ctermfg=DarkGrey ctermbg=Grey cterm=bold
hi PmenuMatch ctermfg=Black ctermbg=NONE cterm=bold
hi PmenuMatchSel ctermfg=NONE ctermbg=NONE cterm=bold
hi PmenuSbar ctermfg=NONE ctermbg=Grey cterm=NONE
hi PmenuMatchSel ctermfg=Black ctermbg=NONE cterm=bold
hi PmenuSbar ctermfg=NONE ctermbg=NONE cterm=NONE
hi PmenuSel ctermfg=NONE ctermbg=Grey cterm=bold
hi PmenuThumb ctermfg=NONE ctermbg=DarkGrey cterm=NONE
hi PreInsert ctermfg=Black ctermbg=NONE cterm=NONE
+8 -5
View File
@@ -3,9 +3,9 @@
" Author: Original author Bohdan Vlasyuk <bohdan@vstu.edu.ua>
" URL: https://github.com/vim/colorschemes
" License: Same as Vim
" Last Change: 2025 Oct 14
" Last Change: 2026 Apr 24
" Generated by Colortemplate v3.0.0-beta10
" Generated by Colortemplate v3.0.0-rc1
set background=dark
@@ -126,7 +126,8 @@ hi ToolbarButton guifg=#ffffff guibg=#0030ff guisp=NONE gui=NONE ctermfg=231 cte
hi ToolbarLine guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE term=reverse
hi Type guifg=#90f020 guibg=NONE guisp=NONE gui=NONE ctermfg=118 ctermbg=NONE cterm=NONE term=NONE
hi Underlined guifg=#80a0ff guibg=NONE guisp=NONE gui=underline ctermfg=111 ctermbg=NONE cterm=underline term=underline
hi VertSplit guifg=#000000 guibg=#808080 guisp=NONE gui=NONE ctermfg=16 ctermbg=102 cterm=NONE term=NONE
hi VertSplit guifg=#000040 guibg=#c0c0c0 guisp=NONE gui=NONE ctermfg=17 ctermbg=252 cterm=NONE term=NONE
hi VertSplitNC guifg=#000000 guibg=#808080 guisp=NONE gui=NONE ctermfg=16 ctermbg=102 cterm=NONE term=NONE
hi Visual guifg=#8080ff guibg=#ffffff guisp=NONE gui=reverse ctermfg=105 ctermbg=231 cterm=reverse term=reverse
hi VisualNOS guifg=#8080ff guibg=#c0c0c0 guisp=NONE gui=reverse,underline ctermfg=105 ctermbg=252 cterm=reverse,underline term=NONE
hi WarningMsg guifg=#ff0000 guibg=NONE guisp=NONE gui=NONE ctermfg=196 ctermbg=NONE cterm=NONE term=standout
@@ -196,7 +197,8 @@ if s:t_Co >= 16
hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=NONE
hi Type ctermfg=green ctermbg=NONE cterm=NONE
hi Underlined ctermfg=blue ctermbg=NONE cterm=underline
hi VertSplit ctermfg=black ctermbg=darkgrey cterm=NONE
hi VertSplit ctermfg=black ctermbg=grey cterm=NONE
hi VertSplitNC ctermfg=black ctermbg=darkgrey cterm=NONE
hi Visual ctermfg=blue ctermbg=white cterm=reverse
hi VisualNOS ctermfg=blue ctermbg=grey cterm=reverse,underline
hi WarningMsg ctermfg=red ctermbg=NONE cterm=NONE
@@ -264,7 +266,8 @@ if s:t_Co >= 8
hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=NONE
hi Type ctermfg=darkgreen ctermbg=NONE cterm=NONE
hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
hi VertSplit ctermfg=grey ctermbg=black cterm=reverse
hi VertSplit ctermfg=darkblue ctermbg=grey cterm=reverse
hi VertSplitNC ctermfg=grey ctermbg=black cterm=reverse
hi Visual ctermfg=blue ctermbg=grey cterm=reverse
hi VisualNOS ctermfg=blue ctermbg=grey cterm=reverse,underline
hi WarningMsg ctermfg=darkred ctermbg=NONE cterm=NONE
+7 -4
View File
@@ -4,9 +4,9 @@
" Maintainer: Original maintainer David Schweikert <david@schweikert.ch>
" URL: https://github.com/vim/colorschemes
" License: Same as Vim
" Last Change: 2025 Oct 08
" Last Change: 2026 Apr 24
" Generated by Colortemplate v3.0.0-beta10
" Generated by Colortemplate v3.0.0-rc1
set background=light
@@ -91,7 +91,8 @@ hi ToolbarButton guifg=#ffffff guibg=#bcbcbc guisp=NONE gui=bold ctermfg=231 cte
hi ToolbarLine guifg=NONE guibg=#e4e4e4 guisp=NONE gui=NONE ctermfg=NONE ctermbg=254 cterm=NONE term=reverse
hi Type guifg=#0000ff guibg=NONE guisp=NONE gui=bold ctermfg=21 ctermbg=NONE cterm=bold term=NONE
hi Underlined guifg=#6a5acd guibg=NONE guisp=NONE gui=underline ctermfg=62 ctermbg=NONE cterm=underline term=underline
hi VertSplit guifg=#e4e4e4 guibg=#00008b guisp=NONE gui=NONE ctermfg=254 ctermbg=18 cterm=NONE term=NONE
hi VertSplit guifg=#ffff00 guibg=#00008b guisp=NONE gui=NONE ctermfg=226 ctermbg=18 cterm=NONE term=NONE
hi VertSplitNC guifg=#e4e4e4 guibg=#00008b guisp=NONE gui=NONE ctermfg=254 ctermbg=18 cterm=NONE term=NONE
hi Visual guifg=#000000 guibg=#d0d0d0 guisp=NONE gui=NONE ctermfg=16 ctermbg=252 cterm=NONE term=reverse
hi VisualNOS guifg=NONE guibg=#ee0000 guisp=NONE gui=NONE ctermfg=NONE ctermbg=196 cterm=NONE term=NONE
hi WarningMsg guifg=#cd00cd guibg=#ffffff guisp=NONE gui=NONE ctermfg=164 ctermbg=231 cterm=NONE term=standout
@@ -164,7 +165,8 @@ if s:t_Co >= 16
hi ToolbarLine ctermfg=NONE ctermbg=grey cterm=NONE
hi Type ctermfg=blue ctermbg=NONE cterm=bold
hi Underlined ctermfg=blue ctermbg=NONE cterm=underline
hi VertSplit ctermfg=grey ctermbg=darkblue cterm=NONE
hi VertSplit ctermfg=yellow ctermbg=darkblue cterm=NONE
hi VertSplitNC ctermfg=grey ctermbg=darkblue cterm=NONE
hi Visual ctermfg=white ctermbg=darkgrey cterm=NONE
hi VisualNOS ctermfg=NONE ctermbg=darkred cterm=NONE
hi WarningMsg ctermfg=darkmagenta ctermbg=white cterm=NONE
@@ -236,6 +238,7 @@ if s:t_Co >= 8
hi Type ctermfg=darkblue ctermbg=NONE cterm=NONE
hi Underlined ctermfg=darkblue ctermbg=NONE cterm=underline
hi VertSplit ctermfg=darkblue ctermbg=darkyellow cterm=reverse
hi VertSplitNC ctermfg=darkblue ctermbg=darkyellow cterm=reverse
hi Visual ctermfg=NONE ctermbg=NONE cterm=reverse
hi VisualNOS ctermfg=NONE ctermbg=NONE cterm=underline
hi WarningMsg ctermfg=darkmagenta ctermbg=NONE cterm=NONE
+7 -4
View File
@@ -4,9 +4,9 @@
" Maintainer: Original maintainer Hans Fugal <hans@fugal.net>
" URL: https://github.com/vim/colorschemes
" License: Same as Vim
" Last Change: 2025 Oct 08
" Last Change: 2026 Apr 24
" Generated by Colortemplate v3.0.0-beta10
" Generated by Colortemplate v3.0.0-rc1
set background=dark
@@ -91,7 +91,8 @@ hi ToolbarButton guifg=#333333 guibg=#ffde9b guisp=NONE gui=bold ctermfg=236 cte
hi ToolbarLine guifg=NONE guibg=#666666 guisp=NONE gui=NONE ctermfg=NONE ctermbg=241 cterm=NONE term=reverse
hi Type guifg=#bdb76b guibg=NONE guisp=NONE gui=bold ctermfg=143 ctermbg=NONE cterm=bold term=NONE
hi Underlined guifg=#75a0ff guibg=NONE guisp=NONE gui=underline ctermfg=111 ctermbg=NONE cterm=underline term=underline
hi VertSplit guifg=#7f7f8c guibg=#c2bfa5 guisp=NONE gui=NONE ctermfg=242 ctermbg=144 cterm=NONE term=NONE
hi VertSplit guifg=#333333 guibg=#c2bfa5 guisp=NONE gui=NONE ctermfg=236 ctermbg=144 cterm=NONE term=NONE
hi VertSplitNC guifg=#7f7f8c guibg=#c2bfa5 guisp=NONE gui=NONE ctermfg=242 ctermbg=144 cterm=NONE term=NONE
hi Visual guifg=#f0e68c guibg=#6b8e24 guisp=NONE gui=NONE ctermfg=186 ctermbg=64 cterm=NONE term=reverse
hi VisualNOS guifg=#f0e68c guibg=#6dceeb guisp=NONE gui=NONE ctermfg=186 ctermbg=81 cterm=NONE term=NONE
hi WarningMsg guifg=#cd5c5c guibg=NONE guisp=NONE gui=bold ctermfg=167 ctermbg=NONE cterm=bold term=standout
@@ -167,7 +168,8 @@ if s:t_Co >= 16
hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=NONE
hi Type ctermfg=darkyellow ctermbg=NONE cterm=bold
hi Underlined ctermfg=darkblue ctermbg=NONE cterm=underline
hi VertSplit ctermfg=darkgrey ctermbg=grey cterm=NONE
hi VertSplit ctermfg=black ctermbg=grey cterm=NONE
hi VertSplitNC ctermfg=darkgrey ctermbg=grey cterm=NONE
hi Visual ctermfg=white ctermbg=darkgreen cterm=NONE
hi VisualNOS ctermfg=NONE ctermbg=NONE cterm=underline
hi WarningMsg ctermfg=darkred ctermbg=NONE cterm=bold
@@ -237,6 +239,7 @@ if s:t_Co >= 8
hi Type ctermfg=darkyellow ctermbg=NONE cterm=bold
hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
hi VertSplit ctermfg=grey ctermbg=black cterm=reverse
hi VertSplitNC ctermfg=grey ctermbg=black cterm=reverse
hi Visual ctermfg=NONE ctermbg=NONE cterm=reverse
hi VisualNOS ctermfg=NONE ctermbg=NONE cterm=underline
hi WarningMsg ctermfg=darkred ctermbg=NONE cterm=bold
+7 -4
View File
@@ -3,9 +3,9 @@
" Maintainer: original maintainer Ron Aaron <ron@ronware.org>
" URL: https://www.github.com/vim/colorschemes
" License: Same as Vim
" Last Change: 2025 Oct 08
" Last Change: 2026 Apr 24
" Generated by Colortemplate v3.0.0-beta10
" Generated by Colortemplate v3.0.0-rc1
set background=dark
@@ -114,7 +114,8 @@ hi ToolbarButton guifg=#000000 guibg=#e5e5e5 guisp=NONE gui=bold ctermfg=16 cter
hi ToolbarLine guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE term=reverse
hi Type guifg=#60ff60 guibg=NONE guisp=NONE gui=bold ctermfg=83 ctermbg=NONE cterm=bold term=NONE
hi Underlined guifg=#80a0ff guibg=NONE guisp=NONE gui=underline ctermfg=111 ctermbg=NONE cterm=underline term=underline
hi VertSplit guifg=#000000 guibg=#00cdcd guisp=NONE gui=NONE ctermfg=16 ctermbg=44 cterm=NONE term=NONE
hi VertSplit guifg=#000000 guibg=#00ffff guisp=NONE gui=NONE ctermfg=16 ctermbg=51 cterm=NONE term=NONE
hi VertSplitNC guifg=#000000 guibg=#00cdcd guisp=NONE gui=NONE ctermfg=16 ctermbg=44 cterm=NONE term=NONE
hi Visual guifg=#000000 guibg=#a9a9a9 guisp=NONE gui=NONE ctermfg=16 ctermbg=145 cterm=NONE term=reverse
hi VisualNOS guifg=NONE guibg=#000000 guisp=NONE gui=bold,underline ctermfg=NONE ctermbg=16 cterm=underline term=NONE
hi WarningMsg guifg=#ff0000 guibg=NONE guisp=NONE gui=NONE ctermfg=196 ctermbg=NONE cterm=NONE term=standout
@@ -188,7 +189,8 @@ if s:t_Co >= 16
hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=NONE
hi Type ctermfg=green ctermbg=NONE cterm=bold
hi Underlined ctermfg=blue ctermbg=NONE cterm=underline
hi VertSplit ctermfg=black ctermbg=darkcyan cterm=NONE
hi VertSplit ctermfg=black ctermbg=cyan cterm=NONE
hi VertSplitNC ctermfg=black ctermbg=darkcyan cterm=NONE
hi Visual ctermfg=black ctermbg=darkgrey cterm=NONE
hi VisualNOS ctermfg=NONE ctermbg=black cterm=underline
hi WarningMsg ctermfg=red ctermbg=NONE cterm=NONE
@@ -263,6 +265,7 @@ if s:t_Co >= 8
hi Type ctermfg=darkgreen ctermbg=NONE cterm=NONE
hi Underlined ctermfg=darkblue ctermbg=NONE cterm=underline
hi VertSplit ctermfg=black ctermbg=darkcyan cterm=NONE
hi VertSplitNC ctermfg=black ctermbg=darkcyan cterm=NONE
hi Visual ctermfg=black ctermbg=grey cterm=NONE
hi VisualNOS ctermfg=NONE ctermbg=NONE cterm=underline
hi WarningMsg ctermfg=darkred ctermbg=NONE cterm=NONE
+4 -3
View File
@@ -4,9 +4,9 @@
" Maintainer: Original maintainer Steven Vertigan <steven@vertigan.wattle.id.au>
" URL: https://github.com/vim/colorschemes
" License: Same as Vim
" Last Change: 2025 Oct 08
" Last Change: 2026 Apr 24
" Generated by Colortemplate v3.0.0-beta10
" Generated by Colortemplate v3.0.0-rc1
set background=dark
@@ -59,7 +59,8 @@ hi! link TabPanelFill EndOfBuffer
hi! link Tag Special
hi! link Terminal Normal
hi! link Typedef Type
hi! link VertSplit StatusLineNC
hi! link VertSplit StatusLine
hi! link VertSplitNC StatusLineNC
hi! link diffBDiffer WarningMsg
hi! link diffCommon WarningMsg
hi! link diffDiffer WarningMsg
+45 -27
View File
@@ -3,9 +3,9 @@
" Author: Maxim Kim <habamax@gmail.com>
" URL: https://github.com/vim/colorschemes
" License: Same as Vim
" Last Change: 2025 Oct 22
" Last Change: 2026 May 28
" Generated by Colortemplate v3.0.0-beta10
" Generated by Colortemplate v3.0.0-rc1
set background=dark
@@ -37,17 +37,17 @@ hi! link TabPanelFill Normal
hi! link Terminal Normal
hi! link asciidoctorBlock Special
hi! link asciidoctorCode String
hi! link asciidoctorH1Delimiter Statement
hi! link asciidoctorH2Delimiter Statement
hi! link asciidoctorH3Delimiter Statement
hi! link asciidoctorH4Delimiter Statement
hi! link asciidoctorH5Delimiter Statement
hi! link asciidoctorH6Delimiter Statement
hi! link asciidoctorH1 htmlH1
hi! link asciidoctorH2 htmlH1
hi! link asciidoctorH3 htmlH1
hi! link asciidoctorH4 htmlH1
hi! link asciidoctorH5 htmlH1
hi! link asciidoctorH6 htmlH1
hi! link asciidoctorListMarker Constant
hi! link asciidoctorMacro Special
hi! link asciidoctorOption Special
hi! link asciidoctorSetextHeaderDelimiter Statement
hi! link asciidoctorTitleDelimiter Statement
hi! link asciidoctorTitle htmlH1
hi! link javaScriptFunction Statement
hi! link javaScriptIdentifier Statement
hi! link lspDiagSignErrorText Removed
@@ -58,11 +58,14 @@ hi! link lspDiagVirtualTextError Removed
hi! link lspDiagVirtualTextHint Added
hi! link lspDiagVirtualTextInfo Question
hi! link lspDiagVirtualTextWarning Changed
hi! link markdownHeadingRule Special
hi! link markdownUrl String
hi! link rstSection htmlH1
hi! link rubyDefine Statement
hi! link rubyMacro Statement
hi! link sqlKeyword Statement
hi! link sqlSpecial Constant
hi! link typstMarkupHeading htmlH1
hi! link vimCommentString Comment
hi! link vimOper Normal
hi! link vimParenSep Normal
@@ -107,12 +110,15 @@ hi PmenuExtra guifg=#767676 guibg=#3a3a3a guisp=NONE gui=NONE ctermfg=243 ctermb
hi PmenuExtraSel guifg=#9e9e9e guibg=#585858 guisp=NONE gui=NONE ctermfg=247 ctermbg=240 cterm=NONE term=NONE
hi PmenuKind guifg=#5f8787 guibg=#3a3a3a guisp=NONE gui=NONE ctermfg=66 ctermbg=237 cterm=NONE term=NONE
hi PmenuKindSel guifg=#5f8787 guibg=#585858 guisp=NONE gui=NONE ctermfg=66 ctermbg=240 cterm=NONE term=NONE
hi PmenuMatch guifg=#ffaf5f guibg=#3a3a3a guisp=NONE gui=NONE ctermfg=215 ctermbg=237 cterm=NONE term=NONE
hi PmenuMatchSel guifg=#ffaf5f guibg=#585858 guisp=NONE gui=NONE ctermfg=215 ctermbg=240 cterm=NONE term=NONE
hi PmenuSbar guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE term=reverse
hi PmenuMatch guifg=#ffaf5f guibg=NONE guisp=NONE gui=NONE ctermfg=215 ctermbg=NONE cterm=NONE term=NONE
hi PmenuMatchSel guifg=#ffaf5f guibg=NONE guisp=NONE gui=NONE ctermfg=215 ctermbg=NONE cterm=NONE term=NONE
hi PmenuSbar guifg=NONE guibg=#585858 guisp=NONE gui=NONE ctermfg=NONE ctermbg=240 cterm=NONE term=reverse
hi PmenuSel guifg=NONE guibg=#585858 guisp=NONE gui=NONE ctermfg=NONE ctermbg=240 cterm=NONE term=bold
hi PmenuShadow guifg=#767676 guibg=#121212 guisp=NONE gui=NONE ctermfg=243 ctermbg=233 cterm=NONE term=NONE
hi PmenuThumb guifg=NONE guibg=#767676 guisp=NONE gui=NONE ctermfg=NONE ctermbg=243 cterm=NONE term=NONE
hi Popup guifg=NONE guibg=#3a3a3a guisp=NONE gui=NONE ctermfg=NONE ctermbg=237 cterm=NONE term=NONE
hi PopupBorder guifg=#767676 guibg=#3a3a3a guisp=NONE gui=NONE ctermfg=243 ctermbg=237 cterm=NONE term=NONE
hi PopupTitle guifg=#9e9e9e guibg=#3a3a3a guisp=NONE gui=bold ctermfg=247 ctermbg=237 cterm=bold term=bold
hi PreProc guifg=#af875f guibg=NONE guisp=NONE gui=NONE ctermfg=137 ctermbg=NONE cterm=NONE term=NONE
hi Question guifg=#d7af87 guibg=NONE guisp=NONE gui=NONE ctermfg=180 ctermbg=NONE cterm=NONE term=standout
hi QuickFixLine guifg=NONE guibg=#4f2f4f guisp=NONE gui=NONE ctermfg=251 ctermbg=53 cterm=NONE term=NONE
@@ -136,17 +142,19 @@ hi Title guifg=NONE guibg=NONE guisp=NONE gui=bold ctermfg=NONE ctermbg=NONE cte
hi TitleBar guifg=#dadada guibg=#3c3c3c guisp=NONE gui=NONE ctermfg=253 ctermbg=237 cterm=NONE term=NONE
hi TitleBarNC guifg=#767676 guibg=#2c2c2c guisp=NONE gui=NONE ctermfg=243 ctermbg=236 cterm=NONE term=NONE
hi Todo guifg=#dadada guibg=NONE guisp=NONE gui=bold ctermfg=253 ctermbg=NONE cterm=bold term=bold,reverse
hi ToolbarButton guifg=#767676 guibg=#1c1c1c guisp=NONE gui=bold,reverse ctermfg=243 ctermbg=234 cterm=bold,reverse term=bold,reverse
hi ToolbarButton guifg=#5f8787 guibg=#1c1c1c guisp=NONE gui=bold,reverse ctermfg=66 ctermbg=234 cterm=bold,reverse term=bold,reverse
hi ToolbarLine guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE term=reverse
hi Type guifg=#5f87af guibg=NONE guisp=NONE gui=NONE ctermfg=67 ctermbg=NONE cterm=NONE term=NONE
hi Underlined guifg=NONE guibg=NONE guisp=NONE gui=underline ctermfg=NONE ctermbg=NONE cterm=underline term=underline
hi VertSplit guifg=#767676 guibg=#767676 guisp=NONE gui=NONE ctermfg=243 ctermbg=243 cterm=NONE term=NONE
hi VertSplit guifg=#9e9e9e guibg=#9e9e9e guisp=NONE gui=NONE ctermfg=247 ctermbg=247 cterm=NONE term=NONE
hi VertSplitNC guifg=#767676 guibg=#767676 guisp=NONE gui=NONE ctermfg=243 ctermbg=243 cterm=NONE term=NONE
hi Visual guifg=NONE guibg=#1a3456 guisp=NONE gui=NONE ctermfg=109 ctermbg=234 cterm=reverse term=reverse
hi VisualNOS guifg=#1c1c1c guibg=#5f8787 guisp=NONE gui=NONE ctermfg=234 ctermbg=66 cterm=NONE term=NONE
hi WarningMsg guifg=#d75f87 guibg=NONE guisp=NONE gui=NONE ctermfg=168 ctermbg=NONE cterm=NONE term=standout
hi WildMenu guifg=#1c1c1c guibg=#d7af87 guisp=NONE gui=bold ctermfg=234 ctermbg=180 cterm=bold term=bold
hi debugBreakpoint guifg=#1c1c1c guibg=#d75f87 guisp=NONE gui=NONE ctermfg=234 ctermbg=168 cterm=NONE term=NONE
hi debugPC guifg=#1c1c1c guibg=#5f87af guisp=NONE gui=NONE ctermfg=234 ctermbg=67 cterm=NONE term=NONE
hi htmlH1 guifg=#dadada guibg=NONE guisp=NONE gui=bold ctermfg=253 ctermbg=NONE cterm=bold term=bold
hi lCursor guifg=#1c1c1c guibg=#5fff00 guisp=NONE gui=NONE ctermfg=234 ctermbg=82 cterm=NONE term=NONE
if s:tgc || s:t_Co >= 256
@@ -202,12 +210,15 @@ if s:t_Co >= 16
hi PmenuExtraSel ctermfg=NONE ctermbg=NONE cterm=bold
hi PmenuKind ctermfg=NONE ctermbg=NONE cterm=bold,reverse
hi PmenuKindSel ctermfg=NONE ctermbg=NONE cterm=bold
hi PmenuMatch ctermfg=NONE ctermbg=NONE cterm=bold
hi PmenuMatchSel ctermfg=darkyellow ctermbg=NONE cterm=bold
hi PmenuSbar ctermfg=NONE ctermbg=NONE cterm=NONE
hi PmenuSel ctermfg=darkyellow ctermbg=NONE cterm=reverse
hi PmenuMatch ctermfg=NONE ctermbg=darkred cterm=reverse
hi PmenuMatchSel ctermfg=darkred ctermbg=NONE cterm=bold
hi PmenuSbar ctermfg=NONE ctermbg=NONE cterm=reverse
hi PmenuSel ctermfg=NONE ctermbg=NONE cterm=bold
hi PmenuShadow ctermfg=NONE ctermbg=NONE cterm=NONE
hi PmenuThumb ctermfg=NONE ctermbg=NONE cterm=reverse
hi PmenuThumb ctermfg=NONE ctermbg=NONE cterm=NONE
hi Popup ctermfg=NONE ctermbg=NONE cterm=reverse
hi PopupBorder ctermfg=NONE ctermbg=NONE cterm=reverse
hi PopupTitle ctermfg=NONE ctermbg=NONE cterm=bold,reverse
hi PreProc ctermfg=darkyellow ctermbg=NONE cterm=NONE
hi Question ctermfg=yellow ctermbg=NONE cterm=NONE
hi QuickFixLine ctermfg=black ctermbg=magenta cterm=NONE
@@ -231,17 +242,19 @@ if s:t_Co >= 16
hi TitleBar ctermfg=white ctermbg=black cterm=NONE
hi TitleBarNC ctermfg=darkgray ctermbg=black cterm=NONE
hi Todo ctermfg=white ctermbg=NONE cterm=bold
hi ToolbarButton ctermfg=darkgray ctermbg=black cterm=bold,reverse
hi ToolbarButton ctermfg=NONE ctermbg=NONE cterm=reverse
hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=NONE
hi Type ctermfg=darkblue ctermbg=NONE cterm=NONE
hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
hi VertSplit ctermfg=darkgray ctermbg=darkgray cterm=NONE
hi VertSplit ctermfg=gray ctermbg=gray cterm=NONE
hi VertSplitNC ctermfg=darkgray ctermbg=darkgray cterm=NONE
hi Visual ctermfg=cyan ctermbg=black cterm=reverse
hi VisualNOS ctermfg=black ctermbg=darkcyan cterm=NONE
hi WarningMsg ctermfg=red ctermbg=NONE cterm=NONE
hi WildMenu ctermfg=black ctermbg=yellow cterm=bold
hi debugBreakpoint ctermfg=black ctermbg=red cterm=NONE
hi debugPC ctermfg=black ctermbg=darkblue cterm=NONE
hi htmlH1 ctermfg=white ctermbg=NONE cterm=bold
hi lCursor ctermfg=black ctermbg=green cterm=NONE
finish
endif
@@ -284,12 +297,15 @@ if s:t_Co >= 8
hi PmenuExtraSel ctermfg=NONE ctermbg=NONE cterm=bold
hi PmenuKind ctermfg=NONE ctermbg=NONE cterm=bold,reverse
hi PmenuKindSel ctermfg=NONE ctermbg=NONE cterm=bold
hi PmenuMatch ctermfg=NONE ctermbg=NONE cterm=bold
hi PmenuMatchSel ctermfg=darkyellow ctermbg=NONE cterm=bold
hi PmenuSbar ctermfg=NONE ctermbg=NONE cterm=NONE
hi PmenuSel ctermfg=darkyellow ctermbg=NONE cterm=reverse
hi PmenuMatch ctermfg=NONE ctermbg=darkred cterm=reverse
hi PmenuMatchSel ctermfg=darkred ctermbg=NONE cterm=bold
hi PmenuSbar ctermfg=NONE ctermbg=NONE cterm=reverse
hi PmenuSel ctermfg=NONE ctermbg=NONE cterm=bold
hi PmenuShadow ctermfg=NONE ctermbg=NONE cterm=NONE
hi PmenuThumb ctermfg=NONE ctermbg=NONE cterm=reverse
hi PmenuThumb ctermfg=NONE ctermbg=NONE cterm=NONE
hi Popup ctermfg=NONE ctermbg=NONE cterm=reverse
hi PopupBorder ctermfg=NONE ctermbg=NONE cterm=reverse
hi PopupTitle ctermfg=NONE ctermbg=NONE cterm=bold,reverse
hi PreProc ctermfg=darkyellow ctermbg=NONE cterm=NONE
hi Question ctermfg=darkyellow ctermbg=NONE cterm=NONE
hi QuickFixLine ctermfg=black ctermbg=magenta cterm=NONE
@@ -313,17 +329,19 @@ if s:t_Co >= 8
hi TitleBar ctermfg=white ctermbg=black cterm=NONE
hi TitleBarNC ctermfg=darkgray ctermbg=black cterm=NONE
hi Todo ctermfg=white ctermbg=NONE cterm=bold
hi ToolbarButton ctermfg=gray ctermbg=black cterm=reverse
hi ToolbarButton ctermfg=NONE ctermbg=NONE cterm=reverse
hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=NONE
hi Type ctermfg=darkblue ctermbg=NONE cterm=NONE
hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
hi VertSplit ctermfg=gray ctermbg=gray cterm=NONE
hi VertSplitNC ctermfg=gray ctermbg=gray cterm=NONE
hi Visual ctermfg=darkcyan ctermbg=black cterm=reverse
hi VisualNOS ctermfg=NONE ctermbg=NONE cterm=reverse
hi WarningMsg ctermfg=darkred ctermbg=NONE cterm=NONE
hi WildMenu ctermfg=black ctermbg=darkyellow cterm=NONE
hi debugBreakpoint ctermfg=darkcyan ctermbg=NONE cterm=reverse
hi debugPC ctermfg=darkblue ctermbg=NONE cterm=reverse
hi htmlH1 ctermfg=white ctermbg=NONE cterm=bold
hi lCursor ctermfg=black ctermbg=green cterm=NONE
finish
endif
+7 -4
View File
@@ -4,9 +4,9 @@
" Maintainer: Original maintainer Shian Lee.
" URL: https://github.com/vim/colorschemes
" License: Same as Vim
" Last Change: 2025 Oct 08
" Last Change: 2026 Apr 24
" Generated by Colortemplate v3.0.0-beta10
" Generated by Colortemplate v3.0.0-rc1
set background=dark
@@ -92,7 +92,8 @@ hi Todo guifg=#005fff guibg=#ffff00 guisp=NONE gui=NONE ctermfg=27 ctermbg=226 c
hi ToolbarLine guifg=NONE guibg=#303030 guisp=NONE gui=NONE ctermfg=NONE ctermbg=236 cterm=NONE term=reverse
hi Type guifg=#00ff00 guibg=NONE guisp=NONE gui=bold ctermfg=46 ctermbg=NONE cterm=bold term=NONE
hi Underlined guifg=#87afff guibg=NONE guisp=NONE gui=underline ctermfg=111 ctermbg=NONE cterm=underline term=underline
hi VertSplit guifg=#000000 guibg=#6c6c6c guisp=NONE gui=NONE ctermfg=16 ctermbg=242 cterm=NONE term=NONE
hi VertSplit guifg=#000000 guibg=#dadada guisp=NONE gui=NONE ctermfg=16 ctermbg=253 cterm=NONE term=NONE
hi VertSplitNC guifg=#000000 guibg=#6c6c6c guisp=NONE gui=NONE ctermfg=16 ctermbg=242 cterm=NONE term=NONE
hi Visual guifg=#dadada guibg=#6c6c6c guisp=NONE gui=NONE ctermfg=253 ctermbg=242 cterm=NONE term=reverse
hi VisualNOS guifg=#dadada guibg=#6c6c6c guisp=NONE gui=NONE ctermfg=253 ctermbg=242 cterm=NONE term=NONE
hi WarningMsg guifg=#ff0000 guibg=NONE guisp=NONE gui=bold ctermfg=196 ctermbg=NONE cterm=bold term=standout
@@ -165,7 +166,8 @@ if s:t_Co >= 16
hi ToolbarLine ctermfg=white ctermbg=darkgrey cterm=NONE
hi Type ctermfg=green ctermbg=NONE cterm=bold
hi Underlined ctermfg=darkblue ctermbg=NONE cterm=underline
hi VertSplit ctermfg=black ctermbg=grey cterm=NONE
hi VertSplit ctermfg=black ctermbg=white cterm=NONE
hi VertSplitNC ctermfg=black ctermbg=grey cterm=NONE
hi Visual ctermfg=black ctermbg=grey cterm=NONE
hi VisualNOS ctermfg=white ctermbg=grey cterm=NONE
hi WarningMsg ctermfg=red ctermbg=NONE cterm=bold
@@ -238,6 +240,7 @@ if s:t_Co >= 8
hi Type ctermfg=darkgreen ctermbg=NONE cterm=bold
hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
hi VertSplit ctermfg=grey ctermbg=black cterm=reverse
hi VertSplitNC ctermfg=grey ctermbg=black cterm=reverse
hi Visual ctermfg=NONE ctermbg=NONE cterm=reverse
hi VisualNOS ctermfg=black ctermbg=grey cterm=NONE
hi WarningMsg ctermfg=darkred ctermbg=NONE cterm=NONE
+7 -4
View File
@@ -3,9 +3,9 @@
" Maintainer: original maintainer Ron Aaron <ron@ronware.org>
" URL: https://www.github.com/vim/colorschemes
" License: Same as Vim
" Last Change: 2025 Oct 08
" Last Change: 2026 Apr 27
" Generated by Colortemplate v3.0.0-beta10
" Generated by Colortemplate v3.0.0-rc1
set background=dark
@@ -114,7 +114,8 @@ hi ToolbarButton guifg=#000000 guibg=#e5e5e5 guisp=NONE gui=bold ctermfg=16 cter
hi ToolbarLine guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE term=reverse
hi Type guifg=#60ff60 guibg=NONE guisp=NONE gui=bold ctermfg=83 ctermbg=NONE cterm=bold term=NONE
hi Underlined guifg=#add8e6 guibg=NONE guisp=NONE gui=bold,underline ctermfg=153 ctermbg=NONE cterm=underline term=underline
hi VertSplit guifg=#0000ff guibg=#e5e5e5 guisp=NONE gui=NONE ctermfg=21 ctermbg=254 cterm=NONE term=NONE
hi VertSplit guifg=#0000ff guibg=#ffffff guisp=NONE gui=NONE ctermfg=21 ctermbg=231 cterm=NONE term=NONE
hi VertSplitNC guifg=#0000ff guibg=#e5e5e5 guisp=NONE gui=NONE ctermfg=21 ctermbg=254 cterm=NONE term=NONE
hi Visual guifg=NONE guibg=#666666 guisp=NONE gui=reverse ctermfg=NONE ctermbg=59 cterm=reverse term=reverse
hi VisualNOS guifg=NONE guibg=#000000 guisp=NONE gui=bold,underline ctermfg=NONE ctermbg=16 cterm=underline term=NONE
hi WarningMsg guifg=#ff0000 guibg=NONE guisp=NONE gui=NONE ctermfg=196 ctermbg=NONE cterm=NONE term=standout
@@ -183,7 +184,8 @@ if s:t_Co >= 16
hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=NONE
hi Type ctermfg=green ctermbg=NONE cterm=bold
hi Underlined ctermfg=blue ctermbg=NONE cterm=underline
hi VertSplit ctermfg=darkblue ctermbg=grey cterm=NONE
hi VertSplit ctermfg=darkblue ctermbg=white cterm=NONE
hi VertSplitNC ctermfg=darkblue ctermbg=grey cterm=NONE
hi Visual ctermfg=NONE ctermbg=darkgrey cterm=reverse
hi VisualNOS ctermfg=NONE ctermbg=black cterm=underline
hi WarningMsg ctermfg=red ctermbg=NONE cterm=NONE
@@ -251,6 +253,7 @@ if s:t_Co >= 8
hi Type ctermfg=darkgreen ctermbg=NONE cterm=bold
hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
hi VertSplit ctermfg=darkblue ctermbg=grey cterm=NONE
hi VertSplitNC ctermfg=darkblue ctermbg=grey cterm=NONE
hi Visual ctermfg=NONE ctermbg=NONE cterm=reverse
hi VisualNOS ctermfg=NONE ctermbg=black cterm=underline
hi WarningMsg ctermfg=darkred ctermbg=NONE cterm=NONE
+18 -12
View File
@@ -2,9 +2,9 @@
" Description: White(perchè il sole)/Black(la luna perchè?) background colorscheme.
" Author: Maxim Kim <habamax@gmail.com>
" URL: https://www.github.com/vim/colorschemes
" Last Change: 2025 Oct 22
" Last Change: 2026 Apr 30
" Generated by Colortemplate v3.0.0-beta10
" Generated by Colortemplate v3.0.0-rc1
hi clear
let g:colors_name = 'lunaperche'
@@ -138,8 +138,8 @@ if &background == 'dark'
hi PmenuExtraSel guifg=#767676 guibg=#4e4e4e guisp=NONE gui=NONE ctermfg=243 ctermbg=239 cterm=NONE term=NONE
hi PmenuKind guifg=#ff5f5f guibg=#303030 guisp=NONE gui=NONE ctermfg=203 ctermbg=236 cterm=NONE term=NONE
hi PmenuKindSel guifg=#ff5f5f guibg=#4e4e4e guisp=NONE gui=NONE ctermfg=203 ctermbg=239 cterm=NONE term=NONE
hi PmenuMatch guifg=#d787d7 guibg=#303030 guisp=NONE gui=NONE ctermfg=176 ctermbg=236 cterm=NONE term=NONE
hi PmenuMatchSel guifg=#d787d7 guibg=#4e4e4e guisp=NONE gui=NONE ctermfg=176 ctermbg=239 cterm=NONE term=NONE
hi PmenuMatch guifg=#d787d7 guibg=NONE guisp=NONE gui=NONE ctermfg=176 ctermbg=NONE cterm=NONE term=NONE
hi PmenuMatchSel guifg=#d787d7 guibg=NONE guisp=NONE gui=NONE ctermfg=176 ctermbg=NONE cterm=NONE term=NONE
hi PmenuSbar guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE term=reverse
hi PmenuSel guifg=NONE guibg=#4e4e4e guisp=NONE gui=NONE ctermfg=NONE ctermbg=239 cterm=NONE term=bold
hi PmenuShadow guifg=#767676 guibg=#121212 guisp=NONE gui=NONE ctermfg=243 ctermbg=233 cterm=NONE term=NONE
@@ -171,7 +171,8 @@ if &background == 'dark'
hi ToolbarLine guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE term=reverse
hi Type guifg=#5fd75f guibg=NONE guisp=NONE gui=NONE ctermfg=77 ctermbg=NONE cterm=NONE term=NONE
hi Underlined guifg=NONE guibg=NONE guisp=NONE gui=underline ctermfg=NONE ctermbg=NONE cterm=underline term=underline
hi VertSplit guifg=#767676 guibg=#767676 guisp=NONE gui=NONE ctermfg=243 ctermbg=243 cterm=NONE term=NONE
hi VertSplit guifg=#c6c6c6 guibg=#c6c6c6 guisp=NONE gui=NONE ctermfg=251 ctermbg=251 cterm=NONE term=NONE
hi VertSplitNC guifg=#767676 guibg=#767676 guisp=NONE gui=NONE ctermfg=243 ctermbg=243 cterm=NONE term=NONE
hi Visual guifg=NONE guibg=#104070 guisp=NONE gui=NONE ctermfg=32 ctermbg=16 cterm=reverse term=reverse
hi VisualNOS guifg=#000000 guibg=#5fafaf guisp=NONE gui=NONE ctermfg=16 ctermbg=73 cterm=NONE term=NONE
hi WarningMsg guifg=#ff5f5f guibg=NONE guisp=NONE gui=NONE ctermfg=203 ctermbg=NONE cterm=NONE term=standout
@@ -266,7 +267,8 @@ if &background == 'dark'
hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=NONE
hi Type ctermfg=green ctermbg=NONE cterm=NONE
hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
hi VertSplit ctermfg=darkgrey ctermbg=darkgrey cterm=NONE
hi VertSplit ctermfg=grey ctermbg=grey cterm=NONE
hi VertSplitNC ctermfg=darkgrey ctermbg=darkgrey cterm=NONE
hi Visual ctermfg=darkblue ctermbg=black cterm=reverse
hi VisualNOS ctermfg=black ctermbg=darkcyan cterm=NONE
hi WarningMsg ctermfg=red ctermbg=NONE cterm=NONE
@@ -354,6 +356,7 @@ if &background == 'dark'
hi Type ctermfg=darkgreen ctermbg=NONE cterm=NONE
hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
hi VertSplit ctermfg=grey ctermbg=grey cterm=NONE
hi VertSplitNC ctermfg=grey ctermbg=grey cterm=NONE
hi Visual ctermfg=NONE ctermbg=NONE cterm=reverse
hi VisualNOS ctermfg=black ctermbg=darkcyan cterm=NONE
hi WarningMsg ctermfg=darkred ctermbg=NONE cterm=NONE
@@ -426,8 +429,8 @@ if &background == 'light'
hi PmenuExtraSel guifg=#767676 guibg=#c6c6c6 guisp=NONE gui=NONE ctermfg=243 ctermbg=251 cterm=NONE term=NONE
hi PmenuKind guifg=#af0000 guibg=#e4e4e4 guisp=NONE gui=NONE ctermfg=124 ctermbg=254 cterm=NONE term=NONE
hi PmenuKindSel guifg=#af0000 guibg=#c6c6c6 guisp=NONE gui=NONE ctermfg=124 ctermbg=251 cterm=NONE term=NONE
hi PmenuMatch guifg=#af00af guibg=#e4e4e4 guisp=NONE gui=NONE ctermfg=127 ctermbg=254 cterm=NONE term=NONE
hi PmenuMatchSel guifg=#af00af guibg=#c6c6c6 guisp=NONE gui=NONE ctermfg=127 ctermbg=251 cterm=NONE term=NONE
hi PmenuMatch guifg=#af00af guibg=NONE guisp=NONE gui=NONE ctermfg=127 ctermbg=NONE cterm=NONE term=NONE
hi PmenuMatchSel guifg=#af00af guibg=NONE guisp=NONE gui=NONE ctermfg=127 ctermbg=NONE cterm=NONE term=NONE
hi PmenuSbar guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE term=reverse
hi PmenuSel guifg=NONE guibg=#c6c6c6 guisp=NONE gui=NONE ctermfg=NONE ctermbg=251 cterm=NONE term=bold
hi PmenuShadow guifg=#767676 guibg=#303030 guisp=NONE gui=NONE ctermfg=243 ctermbg=236 cterm=NONE term=NONE
@@ -459,7 +462,8 @@ if &background == 'light'
hi ToolbarLine guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE term=reverse
hi Type guifg=#008700 guibg=NONE guisp=NONE gui=NONE ctermfg=28 ctermbg=NONE cterm=NONE term=NONE
hi Underlined guifg=NONE guibg=NONE guisp=NONE gui=underline ctermfg=NONE ctermbg=NONE cterm=underline term=underline
hi VertSplit guifg=#767676 guibg=#767676 guisp=NONE gui=NONE ctermfg=243 ctermbg=243 cterm=NONE term=NONE
hi VertSplit guifg=#000000 guibg=#000000 guisp=NONE gui=NONE ctermfg=16 ctermbg=16 cterm=NONE term=NONE
hi VertSplitNC guifg=#767676 guibg=#767676 guisp=NONE gui=NONE ctermfg=243 ctermbg=243 cterm=NONE term=NONE
hi Visual guifg=NONE guibg=#bfdfff guisp=NONE gui=NONE ctermfg=67 ctermbg=231 cterm=reverse term=reverse
hi VisualNOS guifg=#ffffff guibg=#008787 guisp=NONE gui=NONE ctermfg=231 ctermbg=30 cterm=NONE term=NONE
hi WarningMsg guifg=#d70000 guibg=NONE guisp=NONE gui=bold ctermfg=160 ctermbg=NONE cterm=bold term=standout
@@ -524,8 +528,8 @@ if &background == 'light'
hi PmenuExtraSel ctermfg=black ctermbg=darkcyan cterm=NONE
hi PmenuKind ctermfg=darkred ctermbg=grey cterm=NONE
hi PmenuKindSel ctermfg=darkred ctermbg=darkcyan cterm=NONE
hi PmenuMatch ctermfg=darkmagenta ctermbg=grey cterm=NONE
hi PmenuMatchSel ctermfg=darkmagenta ctermbg=darkcyan cterm=NONE
hi PmenuMatch ctermfg=darkmagenta ctermbg=NONE cterm=NONE
hi PmenuMatchSel ctermfg=darkmagenta ctermbg=NONE cterm=NONE
hi PmenuSbar ctermfg=NONE ctermbg=NONE cterm=NONE
hi PmenuSel ctermfg=black ctermbg=darkcyan cterm=NONE
hi PmenuShadow ctermfg=NONE ctermbg=NONE cterm=NONE
@@ -557,7 +561,8 @@ if &background == 'light'
hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=NONE
hi Type ctermfg=darkgreen ctermbg=NONE cterm=NONE
hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
hi VertSplit ctermfg=darkgrey ctermbg=darkgrey cterm=NONE
hi VertSplit ctermfg=black ctermbg=black cterm=NONE
hi VertSplitNC ctermfg=darkgrey ctermbg=darkgrey cterm=NONE
hi Visual ctermfg=white ctermbg=darkblue cterm=NONE
hi VisualNOS ctermfg=black ctermbg=cyan cterm=NONE
hi WarningMsg ctermfg=red ctermbg=NONE cterm=bold
@@ -648,6 +653,7 @@ if &background == 'light'
hi Type ctermfg=darkgreen ctermbg=NONE cterm=NONE
hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
hi VertSplit ctermfg=black ctermbg=black cterm=NONE
hi VertSplitNC ctermfg=black ctermbg=black cterm=NONE
hi Visual ctermfg=NONE ctermbg=NONE cterm=reverse
hi VisualNOS ctermfg=black ctermbg=darkcyan cterm=NONE
hi WarningMsg ctermfg=darkred ctermbg=NONE cterm=NONE
+7 -4
View File
@@ -4,9 +4,9 @@
" Maintainer: Original maintainer Bram Moolenaar <Bram@vim.org>
" URL: https://github.com/vim/colorschemes
" License: Same as Vim
" Last Change: 2025 Oct 08
" Last Change: 2026 Apr 24
" Generated by Colortemplate v3.0.0-beta10
" Generated by Colortemplate v3.0.0-rc1
set background=light
@@ -92,7 +92,8 @@ hi ToolbarButton guifg=NONE guibg=#bcbcbc guisp=NONE gui=bold ctermfg=NONE cterm
hi ToolbarLine guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE term=reverse
hi Type guifg=#2e8b57 guibg=NONE guisp=NONE gui=bold ctermfg=29 ctermbg=NONE cterm=bold term=NONE
hi Underlined guifg=#6a5acd guibg=NONE guisp=NONE gui=underline ctermfg=62 ctermbg=NONE cterm=underline term=underline
hi VertSplit guifg=#bcbcbc guibg=#000000 guisp=NONE gui=NONE ctermfg=250 ctermbg=16 cterm=NONE term=NONE
hi VertSplit guifg=#eeeeee guibg=#000000 guisp=NONE gui=NONE ctermfg=255 ctermbg=16 cterm=NONE term=NONE
hi VertSplitNC guifg=#bcbcbc guibg=#000000 guisp=NONE gui=NONE ctermfg=250 ctermbg=16 cterm=NONE term=NONE
hi Visual guifg=NONE guibg=#d0d0d0 guisp=NONE gui=NONE ctermfg=NONE ctermbg=252 cterm=NONE term=reverse
hi VisualNOS guifg=NONE guibg=#0000ff guisp=NONE gui=NONE ctermfg=NONE ctermbg=21 cterm=NONE term=NONE
hi WarningMsg guifg=#6a0dad guibg=NONE guisp=NONE gui=bold ctermfg=55 ctermbg=NONE cterm=bold term=standout
@@ -162,7 +163,8 @@ if s:t_Co >= 16
hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=NONE
hi Type ctermfg=darkgreen ctermbg=NONE cterm=bold
hi Underlined ctermfg=darkblue ctermbg=NONE cterm=underline
hi VertSplit ctermfg=darkgrey ctermbg=black cterm=NONE
hi VertSplit ctermfg=white ctermbg=black cterm=NONE
hi VertSplitNC ctermfg=darkgrey ctermbg=black cterm=NONE
hi Visual ctermfg=NONE ctermbg=white cterm=NONE
hi VisualNOS ctermfg=NONE ctermbg=blue cterm=NONE
hi WarningMsg ctermfg=darkmagenta ctermbg=NONE cterm=bold
@@ -231,6 +233,7 @@ if s:t_Co >= 8
hi Type ctermfg=darkgreen ctermbg=NONE cterm=NONE
hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
hi VertSplit ctermfg=black ctermbg=gray cterm=reverse
hi VertSplitNC ctermfg=black ctermbg=gray cterm=reverse
hi Visual ctermfg=NONE ctermbg=NONE cterm=reverse
hi VisualNOS ctermfg=NONE ctermbg=NONE cterm=underline
hi WarningMsg ctermfg=darkmagenta ctermbg=NONE cterm=NONE
+8 -5
View File
@@ -4,9 +4,9 @@
" Maintainer: Original maintainer Ron Aaron <ron@ronware.org>.
" URL: https://github.com/vim/colorschemes
" License: Same as Vim
" Last Change: 2025 Oct 08
" Last Change: 2026 Apr 24
" Generated by Colortemplate v3.0.0-beta10
" Generated by Colortemplate v3.0.0-rc1
set background=dark
@@ -93,7 +93,8 @@ hi ToolbarButton guifg=#ffffff guibg=#444444 guisp=NONE gui=bold ctermfg=231 cte
hi ToolbarLine guifg=NONE guibg=#303030 guisp=NONE gui=NONE ctermfg=NONE ctermbg=236 cterm=NONE term=reverse
hi Type guifg=#bcbcbc guibg=NONE guisp=NONE gui=NONE ctermfg=250 ctermbg=NONE cterm=NONE term=NONE
hi Underlined guifg=#00afaf guibg=NONE guisp=NONE gui=underline ctermfg=37 ctermbg=NONE cterm=underline term=underline
hi VertSplit guifg=#ffffff guibg=#3a3a3a guisp=NONE gui=NONE ctermfg=231 ctermbg=237 cterm=NONE term=NONE
hi VertSplit guifg=#ffffff guibg=#00008b guisp=NONE gui=NONE ctermfg=231 ctermbg=18 cterm=NONE term=NONE
hi VertSplitNC guifg=#ffffff guibg=#3a3a3a guisp=NONE gui=NONE ctermfg=231 ctermbg=237 cterm=NONE term=NONE
hi Visual guifg=#ffffff guibg=#005f00 guisp=NONE gui=NONE ctermfg=231 ctermbg=22 cterm=NONE term=reverse
hi VisualNOS guifg=#ffffff guibg=#005f00 guisp=NONE gui=NONE ctermfg=231 ctermbg=22 cterm=NONE term=NONE
hi WarningMsg guifg=#ffa700 guibg=NONE guisp=NONE gui=bold ctermfg=214 ctermbg=NONE cterm=bold term=standout
@@ -163,7 +164,8 @@ if s:t_Co >= 16
hi ToolbarLine ctermfg=NONE ctermbg=black cterm=NONE
hi Type ctermfg=grey ctermbg=NONE cterm=NONE
hi Underlined ctermfg=darkcyan ctermbg=NONE cterm=underline
hi VertSplit ctermfg=white ctermbg=darkgrey cterm=NONE
hi VertSplit ctermfg=white ctermbg=darkblue cterm=NONE
hi VertSplitNC ctermfg=white ctermbg=darkgrey cterm=NONE
hi Visual ctermfg=white ctermbg=darkgreen cterm=NONE
hi VisualNOS ctermfg=white ctermbg=darkgreen cterm=NONE
hi WarningMsg ctermfg=darkred ctermbg=NONE cterm=bold
@@ -231,7 +233,8 @@ if s:t_Co >= 8
hi ToolbarLine ctermfg=NONE ctermbg=black cterm=NONE
hi Type ctermfg=grey ctermbg=NONE cterm=NONE
hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
hi VertSplit ctermfg=grey ctermbg=black cterm=reverse
hi VertSplit ctermfg=darkblue ctermbg=grey cterm=reverse
hi VertSplitNC ctermfg=grey ctermbg=black cterm=reverse
hi Visual ctermfg=NONE ctermbg=NONE cterm=reverse
hi VisualNOS ctermfg=NONE ctermbg=NONE cterm=reverse,underline
hi WarningMsg ctermfg=darkred ctermbg=NONE cterm=bold
+8 -5
View File
@@ -3,9 +3,9 @@
" Maintainer: Original maintainerRon Aaron <ron@ronware.org>
" URL: https://github.com/vim/colorschemes
" License: Same as Vim
" Last Change: 2025 Oct 08
" Last Change: 2026 Apr 24
" Generated by Colortemplate v3.0.0-beta10
" Generated by Colortemplate v3.0.0-rc1
set background=dark
@@ -92,7 +92,8 @@ hi ToolbarButton guifg=#000000 guibg=#e5e5e5 guisp=NONE gui=bold ctermfg=16 cter
hi ToolbarLine guifg=NONE guibg=#000000 guisp=NONE gui=NONE ctermfg=NONE ctermbg=16 cterm=NONE term=reverse
hi Type guifg=#00c000 guibg=NONE guisp=NONE gui=NONE ctermfg=34 ctermbg=NONE cterm=NONE term=NONE
hi Underlined guifg=#80a0ff guibg=NONE guisp=NONE gui=underline ctermfg=111 ctermbg=NONE cterm=underline term=underline
hi VertSplit guifg=#000000 guibg=#ffffff guisp=NONE gui=NONE ctermfg=16 ctermbg=231 cterm=NONE term=NONE
hi VertSplit guifg=#ffff00 guibg=#0000ee guisp=NONE gui=NONE ctermfg=226 ctermbg=20 cterm=NONE term=NONE
hi VertSplitNC guifg=#000000 guibg=#ffffff guisp=NONE gui=NONE ctermfg=16 ctermbg=231 cterm=NONE term=NONE
hi Visual guifg=#00008b guibg=#a9a9a9 guisp=NONE gui=NONE ctermfg=20 ctermbg=248 cterm=NONE term=reverse
hi VisualNOS guifg=NONE guibg=#000000 guisp=NONE gui=bold,underline ctermfg=NONE ctermbg=16 cterm=underline term=NONE
hi WarningMsg guifg=#ff0000 guibg=NONE guisp=NONE gui=NONE ctermfg=196 ctermbg=NONE cterm=NONE term=standout
@@ -163,7 +164,8 @@ if s:t_Co >= 16
hi ToolbarLine ctermfg=NONE ctermbg=black cterm=NONE
hi Type ctermfg=darkgreen ctermbg=NONE cterm=NONE
hi Underlined ctermfg=darkgreen ctermbg=NONE cterm=underline
hi VertSplit ctermfg=black ctermbg=white cterm=NONE
hi VertSplit ctermfg=yellow ctermbg=darkblue cterm=NONE
hi VertSplitNC ctermfg=black ctermbg=white cterm=NONE
hi Visual ctermfg=darkblue ctermbg=grey cterm=NONE
hi VisualNOS ctermfg=NONE ctermbg=black cterm=underline
hi WarningMsg ctermfg=red ctermbg=NONE cterm=NONE
@@ -234,7 +236,8 @@ if s:t_Co >= 8
hi ToolbarLine ctermfg=NONE ctermbg=black cterm=NONE
hi Type ctermfg=darkgreen ctermbg=NONE cterm=bold
hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
hi VertSplit ctermfg=grey ctermbg=black cterm=reverse
hi VertSplit ctermfg=darkblue ctermbg=grey cterm=reverse
hi VertSplitNC ctermfg=grey ctermbg=black cterm=reverse
hi Visual ctermfg=NONE ctermbg=NONE cterm=reverse
hi VisualNOS ctermfg=black ctermbg=grey cterm=NONE
hi WarningMsg ctermfg=darkred ctermbg=NONE cterm=NONE
+7 -4
View File
@@ -4,9 +4,9 @@
" Maintainer: Original maintainer David Ne\v{c}as (Yeti) <yeti@physics.muni.cz>
" URL: https://github.com/vim/colorschemes
" License: Same as Vim
" Last Change: 2025 Oct 14
" Last Change: 2026 Apr 24
" Generated by Colortemplate v3.0.0-beta10
" Generated by Colortemplate v3.0.0-rc1
set background=light
@@ -94,7 +94,8 @@ hi ToolbarButton guifg=#ffdab9 guibg=#737373 guisp=NONE gui=bold ctermfg=223 cte
hi ToolbarLine guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE term=reverse
hi Type guifg=#2e8b57 guibg=NONE guisp=NONE gui=bold ctermfg=29 ctermbg=NONE cterm=bold term=NONE
hi Underlined guifg=#6a5acd guibg=NONE guisp=NONE gui=underline ctermfg=62 ctermbg=NONE cterm=underline term=underline
hi VertSplit guifg=#ffdab9 guibg=#737373 guisp=NONE gui=NONE ctermfg=223 ctermbg=243 cterm=NONE term=NONE
hi VertSplit guifg=#ffdab9 guibg=#000000 guisp=NONE gui=NONE ctermfg=223 ctermbg=16 cterm=NONE term=NONE
hi VertSplitNC guifg=#ffdab9 guibg=#737373 guisp=NONE gui=NONE ctermfg=223 ctermbg=243 cterm=NONE term=NONE
hi Visual guifg=#000000 guibg=#cccccc guisp=NONE gui=NONE ctermfg=16 ctermbg=252 cterm=NONE term=reverse
hi VisualNOS guifg=NONE guibg=#406090 guisp=NONE gui=NONE ctermfg=NONE ctermbg=25 cterm=NONE term=NONE
hi WarningMsg guifg=#cd00cd guibg=#ffdab9 guisp=NONE gui=bold ctermfg=164 ctermbg=223 cterm=bold term=standout
@@ -168,7 +169,8 @@ if s:t_Co >= 16
hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=NONE
hi Type ctermfg=darkgreen ctermbg=NONE cterm=bold
hi Underlined ctermfg=darkblue ctermbg=NONE cterm=underline
hi VertSplit ctermfg=white ctermbg=darkgrey cterm=NONE
hi VertSplit ctermfg=white ctermbg=black cterm=NONE
hi VertSplitNC ctermfg=white ctermbg=darkgrey cterm=NONE
hi Visual ctermfg=black ctermbg=grey cterm=NONE
hi VisualNOS ctermfg=NONE ctermbg=darkgrey cterm=NONE
hi WarningMsg ctermfg=darkmagenta ctermbg=white cterm=bold
@@ -241,6 +243,7 @@ if s:t_Co >= 8
hi Type ctermfg=darkgreen ctermbg=NONE cterm=NONE
hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
hi VertSplit ctermfg=black ctermbg=gray cterm=reverse
hi VertSplitNC ctermfg=black ctermbg=gray cterm=reverse
hi Visual ctermfg=NONE ctermbg=NONE cterm=reverse
hi VisualNOS ctermfg=NONE ctermbg=NONE cterm=underline
hi WarningMsg ctermfg=darkmagenta ctermbg=NONE cterm=bold
+18 -12
View File
@@ -2,9 +2,9 @@
" Description: Retro groove color scheme similar to gruvbox originally designed by morhetz <morhetz@gmail.com>
" Author: Maxim Kim <habamax@gmail.com>, ported from gruvbox8 of Lifepillar <lifepillar@lifepillar.me>
" URL: https://www.github.com/vim/colorschemes
" Last Change: 2025 Oct 22
" Last Change: 2026 Apr 30
" Generated by Colortemplate v3.0.0-beta10
" Generated by Colortemplate v3.0.0-rc1
hi clear
let g:colors_name = 'retrobox'
@@ -79,8 +79,8 @@ if &background == 'dark'
hi PmenuExtraSel guifg=#a89984 guibg=#504945 guisp=NONE gui=NONE ctermfg=102 ctermbg=239 cterm=NONE term=NONE
hi PmenuKind guifg=#fb5944 guibg=#3c3836 guisp=NONE gui=NONE ctermfg=203 ctermbg=237 cterm=NONE term=NONE
hi PmenuKindSel guifg=#fb5944 guibg=#504945 guisp=NONE gui=NONE ctermfg=203 ctermbg=239 cterm=NONE term=NONE
hi PmenuMatch guifg=#d3869b guibg=#3c3836 guisp=NONE gui=NONE ctermfg=175 ctermbg=237 cterm=NONE term=NONE
hi PmenuMatchSel guifg=#d3869b guibg=#504945 guisp=NONE gui=NONE ctermfg=175 ctermbg=239 cterm=NONE term=NONE
hi PmenuMatch guifg=#d3869b guibg=NONE guisp=NONE gui=NONE ctermfg=175 ctermbg=NONE cterm=NONE term=NONE
hi PmenuMatchSel guifg=#d3869b guibg=NONE guisp=NONE gui=NONE ctermfg=175 ctermbg=NONE cterm=NONE term=NONE
hi PmenuSbar guifg=NONE guibg=#3c3836 guisp=NONE gui=NONE ctermfg=NONE ctermbg=237 cterm=NONE term=reverse
hi PmenuSel guifg=NONE guibg=#504945 guisp=NONE gui=NONE ctermfg=NONE ctermbg=239 cterm=NONE term=bold
hi PmenuShadow guifg=#a89984 guibg=#121212 guisp=NONE gui=NONE ctermfg=102 ctermbg=233 cterm=NONE term=NONE
@@ -118,7 +118,8 @@ if &background == 'dark'
hi Type guifg=#fabd2f guibg=NONE guisp=NONE gui=NONE ctermfg=214 ctermbg=NONE cterm=NONE term=NONE
hi Typedef guifg=#fabd2f guibg=NONE guisp=NONE gui=NONE ctermfg=214 ctermbg=NONE cterm=NONE term=NONE
hi Underlined guifg=#83a598 guibg=NONE guisp=NONE gui=underline ctermfg=109 ctermbg=NONE cterm=underline term=underline
hi VertSplit guifg=#303030 guibg=#1c1c1c guisp=NONE gui=NONE ctermfg=236 ctermbg=234 cterm=NONE term=NONE
hi VertSplit guifg=#504945 guibg=#1c1c1c guisp=NONE gui=NONE ctermfg=239 ctermbg=234 cterm=NONE term=NONE
hi VertSplitNC guifg=#303030 guibg=#1c1c1c guisp=NONE gui=NONE ctermfg=236 ctermbg=234 cterm=NONE term=NONE
hi Visual guifg=NONE guibg=#2a405a guisp=NONE gui=NONE ctermfg=109 ctermbg=234 cterm=reverse term=reverse
hi WarningMsg guifg=#fb5944 guibg=NONE guisp=NONE gui=bold ctermfg=203 ctermbg=NONE cterm=bold term=standout
hi WildMenu guifg=#83a598 guibg=#504945 guisp=NONE gui=bold ctermfg=109 ctermbg=239 cterm=bold term=bold
@@ -221,7 +222,8 @@ if &background == 'dark'
hi Type ctermfg=Yellow ctermbg=NONE cterm=NONE
hi Typedef ctermfg=Yellow ctermbg=NONE cterm=NONE
hi Underlined ctermfg=Blue ctermbg=NONE cterm=underline
hi VertSplit ctermfg=Black ctermbg=gray cterm=NONE
hi VertSplit ctermfg=gray ctermbg=Black cterm=NONE
hi VertSplitNC ctermfg=gray ctermbg=Black cterm=NONE
hi Visual ctermfg=Blue ctermbg=Black cterm=reverse
hi WarningMsg ctermfg=Red ctermbg=NONE cterm=bold
hi WildMenu ctermfg=White ctermbg=Black cterm=bold
@@ -316,7 +318,8 @@ if &background == 'dark'
hi Type ctermfg=Yellow ctermbg=NONE cterm=NONE
hi Typedef ctermfg=Yellow ctermbg=NONE cterm=NONE
hi Underlined ctermfg=Blue ctermbg=NONE cterm=underline
hi VertSplit ctermfg=Black ctermbg=gray cterm=NONE
hi VertSplit ctermfg=gray ctermbg=Black cterm=NONE
hi VertSplitNC ctermfg=gray ctermbg=Black cterm=NONE
hi Visual ctermfg=Black ctermbg=Blue cterm=NONE
hi WarningMsg ctermfg=Red ctermbg=NONE cterm=bold
hi WildMenu ctermfg=Blue ctermbg=DarkGray cterm=bold
@@ -389,8 +392,8 @@ if &background == 'light'
hi PmenuExtraSel guifg=#3c3836 guibg=#bdae93 guisp=NONE gui=NONE ctermfg=237 ctermbg=144 cterm=NONE term=NONE
hi PmenuKind guifg=#9d0006 guibg=#e5d4b1 guisp=NONE gui=NONE ctermfg=124 ctermbg=187 cterm=NONE term=NONE
hi PmenuKindSel guifg=#9d0006 guibg=#bdae93 guisp=NONE gui=NONE ctermfg=124 ctermbg=144 cterm=NONE term=NONE
hi PmenuMatch guifg=#8f3f71 guibg=#e5d4b1 guisp=NONE gui=NONE ctermfg=126 ctermbg=187 cterm=NONE term=NONE
hi PmenuMatchSel guifg=#8f3f71 guibg=#bdae93 guisp=NONE gui=NONE ctermfg=126 ctermbg=144 cterm=NONE term=NONE
hi PmenuMatch guifg=#8f3f71 guibg=NONE guisp=NONE gui=NONE ctermfg=126 ctermbg=NONE cterm=NONE term=NONE
hi PmenuMatchSel guifg=#8f3f71 guibg=NONE guisp=NONE gui=NONE ctermfg=126 ctermbg=NONE cterm=NONE term=NONE
hi PmenuSbar guifg=NONE guibg=#e5d4b1 guisp=NONE gui=NONE ctermfg=NONE ctermbg=187 cterm=NONE term=reverse
hi PmenuSel guifg=NONE guibg=#bdae93 guisp=NONE gui=NONE ctermfg=NONE ctermbg=144 cterm=NONE term=bold
hi PmenuShadow guifg=#7c6f64 guibg=#303030 guisp=NONE gui=NONE ctermfg=243 ctermbg=236 cterm=NONE term=NONE
@@ -428,7 +431,8 @@ if &background == 'light'
hi Type guifg=#b57614 guibg=NONE guisp=NONE gui=NONE ctermfg=172 ctermbg=NONE cterm=NONE term=NONE
hi Typedef guifg=#b57614 guibg=NONE guisp=NONE gui=NONE ctermfg=172 ctermbg=NONE cterm=NONE term=NONE
hi Underlined guifg=#076678 guibg=NONE guisp=NONE gui=underline ctermfg=23 ctermbg=NONE cterm=underline term=underline
hi VertSplit guifg=#bdae93 guibg=#fbf1c7 guisp=NONE gui=NONE ctermfg=144 ctermbg=230 cterm=NONE term=NONE
hi VertSplit guifg=#7c6f64 guibg=#fbf1c7 guisp=NONE gui=NONE ctermfg=243 ctermbg=230 cterm=NONE term=NONE
hi VertSplitNC guifg=#bdae93 guibg=#fbf1c7 guisp=NONE gui=NONE ctermfg=144 ctermbg=230 cterm=NONE term=NONE
hi Visual guifg=NONE guibg=#b0d0d0 guisp=NONE gui=NONE ctermfg=23 ctermbg=230 cterm=reverse term=reverse
hi WarningMsg guifg=#9d0006 guibg=NONE guisp=NONE gui=bold ctermfg=124 ctermbg=NONE cterm=bold term=standout
hi WildMenu guifg=#076678 guibg=#e5d4b1 guisp=NONE gui=bold ctermfg=23 ctermbg=187 cterm=bold term=bold
@@ -531,7 +535,8 @@ if &background == 'light'
hi Type ctermfg=Yellow ctermbg=NONE cterm=NONE
hi Typedef ctermfg=Yellow ctermbg=NONE cterm=NONE
hi Underlined ctermfg=Blue ctermbg=NONE cterm=underline
hi VertSplit ctermfg=DarkGray ctermbg=Grey cterm=NONE
hi VertSplit ctermfg=DarkGray ctermbg=White cterm=NONE
hi VertSplitNC ctermfg=DarkGray ctermbg=White cterm=NONE
hi Visual ctermfg=Blue ctermbg=White cterm=reverse
hi WarningMsg ctermfg=Red ctermbg=NONE cterm=bold
hi WildMenu ctermfg=Black ctermbg=White cterm=bold
@@ -626,7 +631,8 @@ if &background == 'light'
hi Type ctermfg=Yellow ctermbg=NONE cterm=NONE
hi Typedef ctermfg=Yellow ctermbg=NONE cterm=NONE
hi Underlined ctermfg=Blue ctermbg=NONE cterm=underline
hi VertSplit ctermfg=White ctermbg=Black cterm=NONE
hi VertSplit ctermfg=Black ctermbg=White cterm=NONE
hi VertSplitNC ctermfg=Black ctermbg=White cterm=NONE
hi Visual ctermfg=White ctermbg=Blue cterm=NONE
hi WarningMsg ctermfg=Red ctermbg=NONE cterm=bold
hi WildMenu ctermfg=Blue ctermbg=Grey cterm=bold
+7 -4
View File
@@ -4,9 +4,9 @@
" Maintainer: Original maintainer is Yasuhiro Matsumoto <mattn@mail.goo.ne.jp>
" URL: https://github.com/vim/colorschemes
" License: Same as Vim
" Last Change: 2025 Oct 08
" Last Change: 2026 Apr 27
" Generated by Colortemplate v3.0.0-beta10
" Generated by Colortemplate v3.0.0-rc1
set background=light
@@ -96,7 +96,8 @@ hi ToolbarButton guifg=NONE guibg=#a8a8a8 guisp=NONE gui=bold ctermfg=NONE cterm
hi ToolbarLine guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE term=reverse
hi Type guifg=#2e8b57 guibg=NONE guisp=NONE gui=bold ctermfg=29 ctermbg=NONE cterm=bold term=NONE
hi Underlined guifg=#6a0dad guibg=NONE guisp=NONE gui=underline ctermfg=55 ctermbg=NONE cterm=underline term=underline
hi VertSplit guifg=#a8a8a8 guibg=#a8a8a8 guisp=NONE gui=NONE ctermfg=248 ctermbg=248 cterm=NONE term=NONE
hi VertSplit guifg=#000000 guibg=#000000 guisp=NONE gui=NONE ctermfg=16 ctermbg=16 cterm=NONE term=NONE
hi VertSplitNC guifg=#a8a8a8 guibg=#a8a8a8 guisp=NONE gui=NONE ctermfg=248 ctermbg=248 cterm=NONE term=NONE
hi Visual guifg=#000000 guibg=#a8a8a8 guisp=NONE gui=NONE ctermfg=16 ctermbg=248 cterm=NONE term=reverse
hi VisualNOS guifg=NONE guibg=NONE guisp=NONE gui=bold ctermfg=NONE ctermbg=NONE cterm=underline term=NONE
hi WarningMsg guifg=#6a0dad guibg=#ffffff guisp=NONE gui=NONE ctermfg=55 ctermbg=231 cterm=NONE term=standout
@@ -170,7 +171,8 @@ if s:t_Co >= 16
hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=NONE
hi Type ctermfg=darkgreen ctermbg=NONE cterm=bold
hi Underlined ctermfg=darkmagenta ctermbg=NONE cterm=underline
hi VertSplit ctermfg=darkgrey ctermbg=darkgrey cterm=NONE
hi VertSplit ctermfg=black ctermbg=black cterm=NONE
hi VertSplitNC ctermfg=darkgrey ctermbg=darkgrey cterm=NONE
hi Visual ctermfg=black ctermbg=darkgrey cterm=NONE
hi VisualNOS ctermfg=NONE ctermbg=NONE cterm=underline
hi WarningMsg ctermfg=darkmagenta ctermbg=white cterm=NONE
@@ -243,6 +245,7 @@ if s:t_Co >= 8
hi Type ctermfg=darkgreen ctermbg=NONE cterm=NONE
hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
hi VertSplit ctermfg=black ctermbg=grey cterm=reverse
hi VertSplitNC ctermfg=black ctermbg=grey cterm=reverse
hi Visual ctermfg=NONE ctermbg=NONE cterm=reverse
hi VisualNOS ctermfg=NONE ctermbg=NONE cterm=underline
hi WarningMsg ctermfg=darkmagenta ctermbg=NONE cterm=NONE
+7 -4
View File
@@ -4,9 +4,9 @@
" Maintainer: Original maintainer Ralph Amissah <ralph@amissah.com>
" URL: https://github.com/vim/colorschemes
" License: Same as Vim
" Last Change: 2025 Oct 08
" Last Change: 2026 Apr 27
" Generated by Colortemplate v3.0.0-beta10
" Generated by Colortemplate v3.0.0-rc1
set background=dark
@@ -93,7 +93,8 @@ hi ToolbarButton guifg=#262626 guibg=#d7d787 guisp=NONE gui=NONE ctermfg=235 cte
hi ToolbarLine guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE term=reverse
hi Type guifg=#5f87d7 guibg=NONE guisp=NONE gui=bold ctermfg=68 ctermbg=NONE cterm=bold term=NONE
hi Underlined guifg=#5f87d7 guibg=NONE guisp=NONE gui=underline ctermfg=68 ctermbg=NONE cterm=underline term=underline
hi VertSplit guifg=#666666 guibg=#afaf87 guisp=NONE gui=NONE ctermfg=241 ctermbg=144 cterm=NONE term=NONE
hi VertSplit guifg=#000000 guibg=#afaf87 guisp=NONE gui=NONE ctermfg=16 ctermbg=144 cterm=NONE term=NONE
hi VertSplitNC guifg=#666666 guibg=#afaf87 guisp=NONE gui=NONE ctermfg=241 ctermbg=144 cterm=NONE term=NONE
hi Visual guifg=#d7d787 guibg=#5f8700 guisp=NONE gui=NONE ctermfg=186 ctermbg=64 cterm=NONE term=reverse
hi VisualNOS guifg=#d7d787 guibg=#5f8700 guisp=NONE gui=NONE ctermfg=186 ctermbg=64 cterm=NONE term=NONE
hi WarningMsg guifg=#ff8787 guibg=NONE guisp=NONE gui=NONE ctermfg=210 ctermbg=NONE cterm=NONE term=standout
@@ -173,7 +174,8 @@ if s:t_Co >= 16
hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=NONE
hi Type ctermfg=blue ctermbg=NONE cterm=bold
hi Underlined ctermfg=blue ctermbg=NONE cterm=underline
hi VertSplit ctermfg=darkgrey ctermbg=grey cterm=NONE
hi VertSplit ctermfg=white ctermbg=black cterm=reverse
hi VertSplitNC ctermfg=darkgrey ctermbg=grey cterm=NONE
hi Visual ctermfg=yellow ctermbg=darkgreen cterm=NONE
hi VisualNOS ctermfg=darkmagenta ctermbg=darkgreen cterm=NONE
hi WarningMsg ctermfg=cyan ctermbg=NONE cterm=NONE
@@ -247,6 +249,7 @@ if s:t_Co >= 8
hi Type ctermfg=darkblue ctermbg=NONE cterm=bold
hi Underlined ctermfg=blue ctermbg=NONE cterm=underline
hi VertSplit ctermfg=grey ctermbg=black cterm=reverse
hi VertSplitNC ctermfg=grey ctermbg=black cterm=reverse
hi Visual ctermfg=NONE ctermbg=NONE cterm=reverse
hi VisualNOS ctermfg=darkmagenta ctermbg=darkgreen cterm=underline
hi WarningMsg ctermfg=darkcyan ctermbg=NONE cterm=NONE
+8 -5
View File
@@ -4,9 +4,9 @@
" Maintainer: Original maintainer Thorsten Maerz <info@netztorte.de>
" URL: https://github.com/vim/colorschemes
" License: Same as Vim
" Last Change: 2025 Oct 08
" Last Change: 2026 Apr 24
" Generated by Colortemplate v3.0.0-beta10
" Generated by Colortemplate v3.0.0-rc1
set background=dark
@@ -93,7 +93,8 @@ hi ToolbarButton guifg=#000000 guibg=#e5e5e5 guisp=NONE gui=bold ctermfg=16 cter
hi ToolbarLine guifg=NONE guibg=#000000 guisp=NONE gui=NONE ctermfg=NONE ctermbg=16 cterm=NONE term=reverse
hi Type guifg=#60ff60 guibg=NONE guisp=NONE gui=NONE ctermfg=83 ctermbg=NONE cterm=NONE term=NONE
hi Underlined guifg=#80a0ff guibg=NONE guisp=NONE gui=underline ctermfg=111 ctermbg=NONE cterm=underline term=underline
hi VertSplit guifg=#000000 guibg=#e5e5e5 guisp=NONE gui=NONE ctermfg=16 ctermbg=254 cterm=NONE term=NONE
hi VertSplit guifg=#000000 guibg=#0000ee guisp=NONE gui=NONE ctermfg=16 ctermbg=20 cterm=NONE term=NONE
hi VertSplitNC guifg=#000000 guibg=#e5e5e5 guisp=NONE gui=NONE ctermfg=16 ctermbg=254 cterm=NONE term=NONE
hi Visual guifg=#000000 guibg=#a9a9a9 guisp=NONE gui=bold ctermfg=16 ctermbg=248 cterm=NONE term=reverse
hi VisualNOS guifg=NONE guibg=#000000 guisp=NONE gui=bold,underline ctermfg=NONE ctermbg=16 cterm=underline term=NONE
hi WarningMsg guifg=#ff0000 guibg=NONE guisp=NONE gui=NONE ctermfg=196 ctermbg=NONE cterm=NONE term=standout
@@ -164,7 +165,8 @@ if s:t_Co >= 16
hi ToolbarLine ctermfg=NONE ctermbg=black cterm=NONE
hi Type ctermfg=green ctermbg=NONE cterm=NONE
hi Underlined ctermfg=blue ctermbg=NONE cterm=underline
hi VertSplit ctermfg=black ctermbg=grey cterm=NONE
hi VertSplit ctermfg=black ctermbg=darkblue cterm=NONE
hi VertSplitNC ctermfg=black ctermbg=grey cterm=NONE
hi Visual ctermfg=black ctermbg=grey cterm=NONE
hi VisualNOS ctermfg=NONE ctermbg=black cterm=underline
hi WarningMsg ctermfg=red ctermbg=NONE cterm=NONE
@@ -233,7 +235,8 @@ if s:t_Co >= 8
hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=NONE
hi Type ctermfg=darkgreen ctermbg=NONE cterm=NONE
hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
hi VertSplit ctermfg=black ctermbg=grey cterm=NONE
hi VertSplit ctermfg=grey ctermbg=darkblue cterm=NONE
hi VertSplitNC ctermfg=black ctermbg=grey cterm=NONE
hi Visual ctermfg=NONE ctermbg=NONE cterm=reverse
hi VisualNOS ctermfg=NONE ctermbg=black cterm=underline
hi WarningMsg ctermfg=darkred ctermbg=NONE cterm=NONE
+7 -4
View File
@@ -2,9 +2,9 @@
" Description: Color scheme similar to Monokai originally created by Wimer Hazenberg for TextMate
" Author: k-37 <60838818+k-37@users.noreply.github.com>
" URL: https://github.com/vim/colorschemes
" Last Change: 2025 Oct 08
" Last Change: 2026 May 07
" Generated by Colortemplate v3.0.0-beta10
" Generated by Colortemplate v3.0.0-rc1
set background=dark
@@ -108,7 +108,8 @@ hi ToolbarButton guifg=#74705d guibg=#f8f8f2 guisp=NONE gui=bold,reverse ctermfg
hi ToolbarLine guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE term=reverse
hi Type guifg=#fd971f guibg=NONE guisp=NONE gui=bold ctermfg=208 ctermbg=NONE cterm=bold term=NONE
hi Underlined guifg=#66d9ef guibg=NONE guisp=NONE gui=underline ctermfg=81 ctermbg=NONE cterm=underline term=underline
hi VertSplit guifg=#74705d guibg=#74705d guisp=NONE gui=NONE ctermfg=244 ctermbg=244 cterm=NONE term=NONE
hi VertSplit guifg=#bababa guibg=#bababa guisp=NONE gui=NONE ctermfg=250 ctermbg=250 cterm=NONE term=NONE
hi VertSplitNC guifg=#74705d guibg=#74705d guisp=NONE gui=NONE ctermfg=244 ctermbg=244 cterm=NONE term=NONE
hi Visual guifg=#a1efe4 guibg=#282923 guisp=NONE gui=reverse ctermfg=116 ctermbg=235 cterm=reverse term=reverse
hi VisualNOS guifg=#282923 guibg=#80beb5 guisp=NONE gui=NONE ctermfg=235 ctermbg=73 cterm=NONE term=NONE
hi WarningMsg guifg=#f92672 guibg=NONE guisp=NONE gui=NONE ctermfg=197 ctermbg=NONE cterm=NONE term=standout
@@ -206,7 +207,8 @@ if s:t_Co >= 16
hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=NONE
hi Type ctermfg=darkyellow ctermbg=NONE cterm=bold
hi Underlined ctermfg=blue ctermbg=NONE cterm=underline
hi VertSplit ctermfg=darkgray ctermbg=darkgray cterm=NONE
hi VertSplit ctermfg=gray ctermbg=gray cterm=NONE
hi VertSplitNC ctermfg=darkgray ctermbg=darkgray cterm=NONE
hi Visual ctermfg=cyan ctermbg=black cterm=reverse
hi VisualNOS ctermfg=black ctermbg=darkcyan cterm=NONE
hi WarningMsg ctermfg=red ctermbg=NONE cterm=NONE
@@ -298,6 +300,7 @@ if s:t_Co >= 8
hi Type ctermfg=darkyellow ctermbg=NONE cterm=bold
hi Underlined ctermfg=darkblue ctermbg=NONE cterm=underline
hi VertSplit ctermfg=gray ctermbg=gray cterm=NONE
hi VertSplitNC ctermfg=gray ctermbg=gray cterm=NONE
hi Visual ctermfg=black ctermbg=darkcyan cterm=NONE
hi VisualNOS ctermfg=black ctermbg=darkcyan cterm=NONE
hi WarningMsg ctermfg=darkred ctermbg=NONE cterm=NONE
+19 -13
View File
@@ -3,9 +3,9 @@
" Author: Maxim Kim <habamax@gmail.com>
" URL: https://github.com/vim/colorschemes
" License: Same as Vim
" Last Change: 2025 Oct 22
" Last Change: 2026 Apr 30
" Generated by Colortemplate v3.0.0-beta10
" Generated by Colortemplate v3.0.0-rc1
hi clear
let g:colors_name = 'wildcharm'
@@ -67,8 +67,8 @@ if &background == 'dark'
hi PmenuExtraSel guifg=#767676 guibg=#585858 guisp=NONE gui=NONE ctermfg=243 ctermbg=240 cterm=NONE term=NONE
hi PmenuKind guifg=#ff5f87 guibg=#303030 guisp=NONE gui=NONE ctermfg=204 ctermbg=236 cterm=NONE term=NONE
hi PmenuKindSel guifg=#ff5f87 guibg=#585858 guisp=NONE gui=NONE ctermfg=204 ctermbg=240 cterm=NONE term=NONE
hi PmenuMatch guifg=#d787d7 guibg=#303030 guisp=NONE gui=NONE ctermfg=176 ctermbg=236 cterm=NONE term=NONE
hi PmenuMatchSel guifg=#d787d7 guibg=#585858 guisp=NONE gui=NONE ctermfg=176 ctermbg=240 cterm=NONE term=NONE
hi PmenuMatch guifg=#d787d7 guibg=NONE guisp=NONE gui=NONE ctermfg=176 ctermbg=NONE cterm=NONE term=NONE
hi PmenuMatchSel guifg=#d787d7 guibg=NONE guisp=NONE gui=NONE ctermfg=176 ctermbg=NONE cterm=NONE term=NONE
hi PmenuSbar guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE term=reverse
hi PmenuSel guifg=NONE guibg=#585858 guisp=NONE gui=NONE ctermfg=NONE ctermbg=240 cterm=NONE term=bold
hi PmenuShadow guifg=#767676 guibg=#121212 guisp=NONE gui=NONE ctermfg=243 ctermbg=233 cterm=NONE term=NONE
@@ -100,7 +100,8 @@ if &background == 'dark'
hi ToolbarLine guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE term=reverse
hi Type guifg=#ffaf00 guibg=NONE guisp=NONE gui=NONE ctermfg=214 ctermbg=NONE cterm=NONE term=NONE
hi Underlined guifg=NONE guibg=NONE guisp=NONE gui=underline ctermfg=NONE ctermbg=NONE cterm=underline term=underline
hi VertSplit guifg=#767676 guibg=#767676 guisp=NONE gui=NONE ctermfg=243 ctermbg=243 cterm=NONE term=NONE
hi VertSplit guifg=#9e9e9e guibg=#9e9e9e guisp=NONE gui=NONE ctermfg=247 ctermbg=247 cterm=NONE term=NONE
hi VertSplitNC guifg=#767676 guibg=#767676 guisp=NONE gui=NONE ctermfg=243 ctermbg=243 cterm=NONE term=NONE
hi Visual guifg=NONE guibg=#204060 guisp=NONE gui=NONE ctermfg=81 ctermbg=16 cterm=reverse term=reverse
hi VisualNOS guifg=#000000 guibg=#00afff guisp=NONE gui=NONE ctermfg=16 ctermbg=39 cterm=NONE term=NONE
hi WarningMsg guifg=#ffaf00 guibg=NONE guisp=NONE gui=NONE ctermfg=214 ctermbg=NONE cterm=NONE term=standout
@@ -191,7 +192,8 @@ if &background == 'dark'
hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=NONE
hi Type ctermfg=yellow ctermbg=NONE cterm=NONE
hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
hi VertSplit ctermfg=darkgrey ctermbg=darkgrey cterm=NONE
hi VertSplit ctermfg=grey ctermbg=grey cterm=NONE
hi VertSplitNC ctermfg=darkgrey ctermbg=darkgrey cterm=NONE
hi Visual ctermfg=cyan ctermbg=black cterm=reverse
hi VisualNOS ctermfg=black ctermbg=blue cterm=NONE
hi WarningMsg ctermfg=yellow ctermbg=NONE cterm=NONE
@@ -270,6 +272,7 @@ if &background == 'dark'
hi Type ctermfg=darkyellow ctermbg=NONE cterm=NONE
hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
hi VertSplit ctermfg=grey ctermbg=grey cterm=NONE
hi VertSplitNC ctermfg=grey ctermbg=grey cterm=NONE
hi Visual ctermfg=darkblue ctermbg=black cterm=reverse
hi VisualNOS ctermfg=black ctermbg=darkblue cterm=NONE
hi WarningMsg ctermfg=darkyellow ctermbg=NONE cterm=NONE
@@ -331,13 +334,13 @@ if &background == 'light'
hi Pmenu guifg=NONE guibg=#e4e4e4 guisp=NONE gui=NONE ctermfg=NONE ctermbg=254 cterm=NONE term=reverse
hi PmenuBorder guifg=#808080 guibg=#e4e4e4 guisp=NONE gui=NONE ctermfg=240 ctermbg=254 cterm=NONE term=NONE
hi PmenuExtra guifg=#808080 guibg=#e4e4e4 guisp=NONE gui=NONE ctermfg=240 ctermbg=254 cterm=NONE term=NONE
hi PmenuExtraSel guifg=#808080 guibg=#d0d0d0 guisp=NONE gui=NONE ctermfg=240 ctermbg=252 cterm=NONE term=NONE
hi PmenuExtraSel guifg=#808080 guibg=#c6c6c6 guisp=NONE gui=NONE ctermfg=240 ctermbg=251 cterm=NONE term=NONE
hi PmenuKind guifg=#d70000 guibg=#e4e4e4 guisp=NONE gui=NONE ctermfg=160 ctermbg=254 cterm=NONE term=NONE
hi PmenuKindSel guifg=#d70000 guibg=#d0d0d0 guisp=NONE gui=NONE ctermfg=160 ctermbg=252 cterm=NONE term=NONE
hi PmenuMatch guifg=#870087 guibg=#e4e4e4 guisp=NONE gui=NONE ctermfg=90 ctermbg=254 cterm=NONE term=NONE
hi PmenuMatchSel guifg=#870087 guibg=#d0d0d0 guisp=NONE gui=NONE ctermfg=90 ctermbg=252 cterm=NONE term=NONE
hi PmenuKindSel guifg=#d70000 guibg=#c6c6c6 guisp=NONE gui=NONE ctermfg=160 ctermbg=251 cterm=NONE term=NONE
hi PmenuMatch guifg=#870087 guibg=NONE guisp=NONE gui=NONE ctermfg=90 ctermbg=NONE cterm=NONE term=NONE
hi PmenuMatchSel guifg=#870087 guibg=NONE guisp=NONE gui=NONE ctermfg=90 ctermbg=NONE cterm=NONE term=NONE
hi PmenuSbar guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE term=reverse
hi PmenuSel guifg=NONE guibg=#d0d0d0 guisp=NONE gui=NONE ctermfg=NONE ctermbg=252 cterm=NONE term=bold
hi PmenuSel guifg=NONE guibg=#c6c6c6 guisp=NONE gui=NONE ctermfg=NONE ctermbg=251 cterm=NONE term=bold
hi PmenuShadow guifg=#808080 guibg=#303030 guisp=NONE gui=NONE ctermfg=240 ctermbg=236 cterm=NONE term=NONE
hi PmenuThumb guifg=NONE guibg=#808080 guisp=NONE gui=NONE ctermfg=NONE ctermbg=240 cterm=NONE term=NONE
hi PreProc guifg=#008787 guibg=NONE guisp=NONE gui=NONE ctermfg=30 ctermbg=NONE cterm=NONE term=NONE
@@ -367,7 +370,8 @@ if &background == 'light'
hi ToolbarLine guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE term=reverse
hi Type guifg=#af5f00 guibg=NONE guisp=NONE gui=NONE ctermfg=130 ctermbg=NONE cterm=NONE term=NONE
hi Underlined guifg=NONE guibg=NONE guisp=NONE gui=underline ctermfg=NONE ctermbg=NONE cterm=underline term=underline
hi VertSplit guifg=#d0d0d0 guibg=#d0d0d0 guisp=NONE gui=NONE ctermfg=252 ctermbg=252 cterm=NONE term=NONE
hi VertSplit guifg=#5f5f5f guibg=#5f5f5f guisp=NONE gui=NONE ctermfg=59 ctermbg=59 cterm=NONE term=NONE
hi VertSplitNC guifg=#d0d0d0 guibg=#d0d0d0 guisp=NONE gui=NONE ctermfg=252 ctermbg=252 cterm=NONE term=NONE
hi Visual guifg=NONE guibg=#bfdfff guisp=NONE gui=NONE ctermfg=32 ctermbg=231 cterm=reverse term=reverse
hi VisualNOS guifg=#ffffff guibg=#005faf guisp=NONE gui=NONE ctermfg=231 ctermbg=25 cterm=NONE term=NONE
hi WarningMsg guifg=#af5f00 guibg=NONE guisp=NONE gui=NONE ctermfg=130 ctermbg=NONE cterm=NONE term=standout
@@ -458,7 +462,8 @@ if &background == 'light'
hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=NONE
hi Type ctermfg=darkyellow ctermbg=NONE cterm=NONE
hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
hi VertSplit ctermfg=lightgrey ctermbg=lightgrey cterm=NONE
hi VertSplit ctermfg=darkgrey ctermbg=darkgrey cterm=NONE
hi VertSplitNC ctermfg=lightgrey ctermbg=lightgrey cterm=NONE
hi Visual ctermfg=blue ctermbg=white cterm=reverse
hi VisualNOS ctermfg=white ctermbg=darkblue cterm=NONE
hi WarningMsg ctermfg=darkyellow ctermbg=NONE cterm=NONE
@@ -537,6 +542,7 @@ if &background == 'light'
hi Type ctermfg=darkyellow ctermbg=NONE cterm=NONE
hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
hi VertSplit ctermfg=black ctermbg=black cterm=NONE
hi VertSplitNC ctermfg=black ctermbg=black cterm=NONE
hi Visual ctermfg=darkblue ctermbg=grey cterm=reverse
hi VisualNOS ctermfg=black ctermbg=darkblue cterm=NONE
hi WarningMsg ctermfg=darkyellow ctermbg=NONE cterm=NONE
+7 -4
View File
@@ -4,9 +4,9 @@
" Maintainer: Original maintainer Ron Aaron <ron@ronware.org>
" URL: https://github.com/vim/colorschemes
" License: Same as Vim
" Last Change: 2025 Oct 08
" Last Change: 2026 Apr 27
" Generated by Colortemplate v3.0.0-beta10
" Generated by Colortemplate v3.0.0-rc1
set background=light
@@ -93,7 +93,8 @@ hi ToolbarButton guifg=NONE guibg=#a9a9a9 guisp=NONE gui=bold ctermfg=NONE cterm
hi ToolbarLine guifg=NONE guibg=#d3d3d3 guisp=NONE gui=NONE ctermfg=NONE ctermbg=252 cterm=NONE term=reverse
hi Type guifg=#0000ff guibg=NONE guisp=NONE gui=NONE ctermfg=21 ctermbg=NONE cterm=NONE term=NONE
hi Underlined guifg=#6a5acd guibg=NONE guisp=NONE gui=underline ctermfg=62 ctermbg=NONE cterm=underline term=underline
hi VertSplit guifg=#ffffff guibg=#000000 guisp=NONE gui=NONE ctermfg=231 ctermbg=16 cterm=NONE term=NONE
hi VertSplit guifg=#ffff00 guibg=#a9a9a9 guisp=NONE gui=NONE ctermfg=226 ctermbg=248 cterm=NONE term=NONE
hi VertSplitNC guifg=#ffffff guibg=#000000 guisp=NONE gui=NONE ctermfg=231 ctermbg=16 cterm=NONE term=NONE
hi Visual guifg=#000000 guibg=#ffff00 guisp=NONE gui=NONE ctermfg=16 ctermbg=226 cterm=NONE term=reverse
hi VisualNOS guifg=NONE guibg=#ff0000 guisp=NONE gui=NONE ctermfg=NONE ctermbg=196 cterm=NONE term=NONE
hi WarningMsg guifg=#a020f0 guibg=#ffffff guisp=NONE gui=NONE ctermfg=129 ctermbg=231 cterm=NONE term=standout
@@ -166,7 +167,8 @@ if s:t_Co >= 16
hi ToolbarLine ctermfg=NONE ctermbg=black cterm=NONE
hi Type ctermfg=blue ctermbg=NONE cterm=NONE
hi Underlined ctermfg=blue ctermbg=NONE cterm=underline
hi VertSplit ctermfg=white ctermbg=black cterm=NONE
hi VertSplit ctermfg=yellow ctermbg=darkgrey cterm=NONE
hi VertSplitNC ctermfg=white ctermbg=black cterm=NONE
hi Visual ctermfg=black ctermbg=yellow cterm=NONE
hi VisualNOS ctermfg=NONE ctermbg=red cterm=NONE
hi WarningMsg ctermfg=darkmagenta ctermbg=white cterm=NONE
@@ -238,6 +240,7 @@ if s:t_Co >= 8
hi Type ctermfg=darkblue ctermbg=NONE cterm=bold
hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
hi VertSplit ctermfg=black ctermbg=gray cterm=reverse
hi VertSplitNC ctermfg=black ctermbg=gray cterm=reverse
hi Visual ctermfg=NONE ctermbg=NONE cterm=reverse
hi VisualNOS ctermfg=NONE ctermbg=NONE cterm=underline
hi WarningMsg ctermfg=darkmagenta ctermbg=black cterm=NONE
+4 -3
View File
@@ -7,6 +7,7 @@
" added line suggested by Anton Lindqvist 2016 Mar 31
" 2024 Apr 03 by The Vim Project (removed :CompilerSet definition)
" 2025 Dec 17 by The Vim Project (correctly parse: 'make: *** [Makefile:2: all] Error 1')
" 2026 May 28 by The Vim Project (Use %v to parse column number)
if exists("current_compiler")
finish
@@ -24,9 +25,9 @@ CompilerSet errorformat=
\\"%f\"%*\\D%l:\ %m,
\%-G%f:%l:\ %trror:\ (Each\ undeclared\ identifier\ is\ reported\ only\ once,
\%-G%f:%l:\ %trror:\ for\ each\ function\ it\ appears\ in.),
\%f:%l:%c:\ %trror:\ %m,
\%f:%l:%c:\ %tarning:\ %m,
\%f:%l:%c:\ %m,
\%f:%l:%v:\ %trror:\ %m,
\%f:%l:%v:\ %tarning:\ %m,
\%f:%l:%v:\ %m,
\%f:%l:\ %trror:\ %m,
\%f:%l:\ %tarning:\ %m,
\%f:%l:\ %m,
+26 -7
View File
@@ -1,6 +1,9 @@
" Vim compiler file
" Compiler: Zig Compiler
" Upstream: https://github.com/ziglang/zig.vim
" Upstream: https://codeberg.org/ziglang/zig.vim
" Last Change:
" 2026 May 12 by the Vim project (set errormformat)
" 2026 May 24 by the Vim project (do not escape vars for makeprg)
if exists("current_compiler")
finish
@@ -11,13 +14,29 @@ let s:save_cpo = &cpo
set cpo&vim
" a subcommand must be provided for the this compiler (test, build-exe, etc)
if has('patch-7.4.191')
CompilerSet makeprg=zig\ \$*\ \%:S
else
CompilerSet makeprg=zig\ \$*\ \"%\"
endif
CompilerSet makeprg=zig\ $*\ %:S
" TODO: improve errorformat as needed.
CompilerSet errorformat=
\%-G,
\%-G\ %#+-\ %.%#,
\%-Ginstall,
\%-Ginstall\ transitive\ failure,
\%-Grun,
\%-Grun\ transitive\ failure,
\%-Gtest,
\%-Gtest\ transitive\ failure,
\%-Gfailed\ command:\ %.%#,
\%-Gerror:\ %*\\d\ compilation\ errors,
\%-GBuild\ Summary:\ %.%#,
\%-Gerror:\ the\ following\ build\ command\ failed\ with\ exit\ code\ %*\\d:,
\%-G.zig-cache%.%#,
\%E%f:%l:%c:\ error:\ %m,
\%I%f:%l:%c:\ note:\ %m
" zig has no warnings, but zig cc and zig c++ do
CompilerSet errorformat+=
\%W%f:%l:%c:\ warning:\ %m,
\%-G%*\\d\ warnings\ generated.
let &cpo = s:save_cpo
unlet s:save_cpo
+6 -7
View File
@@ -1,7 +1,8 @@
" Vim compiler file
" Compiler: Zig Compiler (zig build)
" Upstream: https://github.com/ziglang/zig.vim
" Last Change: 2024 Apr 05 by The Vim Project (removed :CompilerSet definition)
" Upstream: https://codeberg.org/ziglang/zig.vim
" Last Change: 2024 Apr 05 by the Vim Project (removed :CompilerSet definition)
" 2026 May 12 by the Vim Project (removed comment)
if exists('current_compiler')
finish
@@ -13,13 +14,11 @@ let s:save_cpo = &cpo
set cpo&vim
if exists('g:zig_build_makeprg_params')
execute 'CompilerSet makeprg=zig\ build\ '.escape(g:zig_build_makeprg_params, ' \|"').'\ $*'
execute 'CompilerSet makeprg=zig\ build\ '.escape(g:zig_build_makeprg_params, ' \|"').'\ $*'
else
CompilerSet makeprg=zig\ build\ $*
CompilerSet makeprg=zig\ build\ $*
endif
" TODO: anything to add to errorformat for zig build specifically?
let &cpo = s:save_cpo
unlet s:save_cpo
" vim: tabstop=8 shiftwidth=4 softtabstop=4 expandtab
" vim: tabstop=8 shiftwidth=2 softtabstop=2 expandtab
+6 -6
View File
@@ -1,7 +1,9 @@
" Vim compiler file
" Compiler: Zig Compiler (zig build-exe)
" Upstream: https://github.com/ziglang/zig.vim
" Last Change: 2025 Nov 16 by The Vim Project (set errorformat)
" Upstream: https://codeberg.org/ziglang/zig.vim
" Last Change: 2025 Nov 16 by the Vim Project (set errorformat)
" 2026 May 12 by the Vim project (remove errorformat)
" 2026 May 24 by the Vim project (do not escape vars for makeprg)
if exists('current_compiler')
finish
@@ -12,10 +14,8 @@ let current_compiler = 'zig_build_exe'
let s:save_cpo = &cpo
set cpo&vim
CompilerSet makeprg=zig\ build-exe\ \%:S\ \$*
" CompilerSet errorformat=%f:%l:%c: %t%*[^:]: %m, %f:%l:%c: %m, %f:%l: %m
CompilerSet errorformat&
CompilerSet makeprg=zig\ build-exe\ %:S\ $*
let &cpo = s:save_cpo
unlet s:save_cpo
" vim: tabstop=8 shiftwidth=4 softtabstop=4 expandtab
" vim: tabstop=8 shiftwidth=2 softtabstop=2 expandtab
+19
View File
@@ -0,0 +1,19 @@
" Vim compiler file
" Compiler: Zig Compiler (zig cc)
" Last Change: 2026 May 12
" 2026 May 24 by the Vim project (do not escape vars for makeprg)
if exists('current_compiler')
finish
endif
runtime compiler/zig.vim
let current_compiler = 'zig_cc'
let s:save_cpo = &cpo
set cpo&vim
CompilerSet makeprg=zig\ cc\ %:S\ $*
let &cpo = s:save_cpo
unlet s:save_cpo
" vim: tabstop=8 shiftwidth=2 softtabstop=2 expandtab
+6 -6
View File
@@ -1,7 +1,9 @@
" Vim compiler file
" Compiler: Zig Compiler (zig test)
" Upstream: https://github.com/ziglang/zig.vim
" Last Change: 2025 Nov 16 by The Vim Project (set errorformat)
" Upstream: https://codeberg.org/ziglang/zig.vim
" Last Change: 2025 Nov 16 by the Vim Project (set errorformat)
" 2026 May 12 by the Vim Project (remove error format)
" 2026 May 24 by the Vim project (do not escape vars for makeprg)
if exists('current_compiler')
finish
@@ -12,10 +14,8 @@ let current_compiler = 'zig_test'
let s:save_cpo = &cpo
set cpo&vim
CompilerSet makeprg=zig\ test\ \%:S\ \$*
" CompilerSet errorformat=%f:%l:%c: %t%*[^:]: %m, %f:%l:%c: %m, %f:%l: %m
CompilerSet errorformat&
CompilerSet makeprg=zig\ test\ %:S\ $*
let &cpo = s:save_cpo
unlet s:save_cpo
" vim: tabstop=8 shiftwidth=4 softtabstop=4 expandtab
" vim: tabstop=8 shiftwidth=2 softtabstop=2 expandtab
+43 -1
View File
@@ -1,4 +1,4 @@
*autocmd.txt* For Vim version 9.2. Last change: 2026 Feb 25
*autocmd.txt* For Vim version 9.2. Last change: 2026 May 23
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -423,6 +423,8 @@ Name triggered by ~
|TextChangedP| after a change was made to the text in Insert mode
when popup menu visible
|TextChangedT| after a change was made to the text in Terminal mode
|TextPutPost| after text has been put
|TextPutPre| before text is put
|TextYankPost| after text has been yanked or deleted
|SafeState| nothing pending, going to wait for the user to type a
@@ -1367,6 +1369,46 @@ TextChangedP After a change was made to the text in the
TextChangedT After a change was made to the text in the
current buffer in Terminal mode.
Otherwise the same as TextChanged.
*TextPutPost*
TextPutPost After text has been put in the current buffer.
The following values in |v:event| are mostly
the same as |TextYankPost|:
operator The operation performed,
either 'p' or 'P'.
regcontents Text that was put. For
|quote_=|, this is the result
of the expression.
regname Name of the register or empty
string for the unnamed
register.
regtype Type of the register, see
|getregtype()|.
visual True if the operation is
performed in |Visual| mode.
Not triggered when |quote_| is used nor when
called recursively.
It is not allowed to change the buffer text,
see |textlock|.
Note that for the |quote_.| register, since
the last inserted text is buffered into the
input buffer (buffer isn't modified directly),
this autocommand is called directly after
|TextPutPre|.
{only when compiled with the +eval feature}
*TextPutPre*
TextPutPre Before text has been put in the current buffer.
Same values as |TextPutPost| in |v:event|. It
is valid to call |setreg()| in this
autocommand, allowing you to process and
modify the text in "regcontents" before it is
put. However this does not apply to
|quote_#|, |quote_=|, |quote_%|, |quote_:|,
|quote_/| or |quote_.|.
Not triggered when |quote_| is used nor when
called recursively.
It is not allowed to change the buffer text,
see |textlock|.
{only when compiled with the +eval feature}
*TextYankPost*
TextYankPost After text has been yanked or deleted in the
current buffer. The following values of
+71 -12
View File
@@ -1,4 +1,4 @@
*builtin.txt* For Vim version 9.2. Last change: 2026 Apr 06
*builtin.txt* For Vim version 9.2. Last change: 2026 May 31
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -107,7 +107,8 @@ ch_getbufnr({handle}, {what}) Number get buffer number for {handle}/{what}
ch_getjob({channel}) Job get the Job of {channel}
ch_info({handle}) Dict info about channel {handle}
ch_listen({address} [, {options}])
Channel listen on {address}
Channel listen on {address} - port on loopback
or UNIX domain socket
ch_log({msg} [, {handle}]) none write {msg} in the channel log file
ch_logfile({fname} [, {mode}]) none start logging channel activity
ch_open({address} [, {options}])
@@ -706,6 +707,8 @@ tabpagebuflist([{arg}]) List list of buffer numbers in tab page
tabpagenr([{arg}]) Number number of current or last tab page
tabpagewinnr({tabarg} [, {arg}])
Number number of current window in tab page
tabpanel_getinfo() Dict get current state of the tabpanel
tabpanel_scroll({n} [, {opts}]) Bool scroll the tabpanel
tagfiles() List tags files used
taglist({expr} [, {filename}]) List list of tags matching {expr}
tan({expr}) Float tangent of {expr}
@@ -3671,14 +3674,22 @@ fullcommand({name} [, {vim9}]) *fullcommand()*
ambiguous (for user-defined commands) or cannot be shortened
this way. |vim9-no-shorten|
Without the {vim9} argument uses the current script version.
If {vim9} is present and FALSE then legacy script rules are
used. When {vim9} is present and TRUE then Vim9 rules are
used, e.g. "en" is not a short form of "endif".
For example `fullcommand('s')`, `fullcommand('sub')`,
`fullcommand(':%substitute')` all return "substitute".
Without the {vim9} argument, the current script version is
used. When {vim9} is present and FALSE, legacy script rules
are used. When {vim9} is present and TRUE, Vim9 rules are
used (e.g., "en" is not a short form of "endif").
Note: Command validation is not performed. Results depend on
Vim's internal command-specific identification rules.
Examples:
>vim
echo [fullcommand('s')] |" ['substitute']
echo [fullcommand('sub')] |" ['substitute']
echo [fullcommand(': mark word')] |" ['mark']
echo [fullcommand(': markword')] |" ['']
echo [fullcommand('en')] |" ['endif']
echo [fullcommand('en', v:true)] |" ['']
<
Can also be used as a |method|: >
GetName()->fullcommand()
<
@@ -6260,7 +6271,7 @@ insert({object}, {item} [, {idx}]) *insert()*
Return type: |Number|
instanceof({object}, {class}) *instanceof()* *E614* *E616* *E693*
instanceof({object}, {class}) *instanceof()* *E616* *E693*
The result is a Number, which is |TRUE| when the {object}
argument is a direct or indirect instance of a |Class|,
|Interface|, or class |:type| alias specified by {class}.
@@ -6866,6 +6877,8 @@ listener_add({callback} [, {buf} [, {unbuffered}]]) *listener_add()*
second argument: >
GetBuffer()->listener_add(callback)
<
This function is not available in the |sandbox|.
Return type: |Number|
@@ -6880,6 +6893,8 @@ listener_flush([{buf}]) *listener_flush()*
Can also be used as a |method|: >
GetBuffer()->listener_flush()
<
This function is not available in the |sandbox|.
Return type: void
@@ -6891,6 +6906,8 @@ listener_remove({id}) *listener_remove()*
Can also be used as a |method|: >
GetListenerId()->listener_remove()
<
This function is not available in the |sandbox|.
Return type: |Number|
@@ -8870,6 +8887,8 @@ redraw_listener_add({opts}) *redraw_listener_add()*
Can also be used as a |method|: >
GetOpts()->redraw_listener_add()
<
This function is not available in the |sandbox|.
Return type: |Number|
@@ -11342,7 +11361,12 @@ strptime({format}, {timestring}) *strptime()*
can try different {format} values until you get a non-zero
result.
Note: On MS-Windows, where the C runtime does not provide
strptime(), Vim uses a built-in fallback that always uses
English locale names regardless of the active locale.
See also |strftime()|.
Examples: >
:echo strptime("%Y %b %d %X", "1997 Apr 27 11:49:23")
< 862156163 >
@@ -11896,6 +11920,38 @@ tabpagewinnr({tabarg} [, {arg}]) *tabpagewinnr()*
Return type: |Number|
tabpanel_getinfo() *tabpanel_getinfo()*
Return a |Dictionary| describing the current state of the
tabpanel (see |tabpanel|). The dictionary has these keys:
align "left" or "right"
columns width in screen columns
scrollbar |TRUE| if a scrollbar is shown
offset current scroll offset in rows
total total number of rows rendered
max_offset largest valid value for "offset"
The "total" and "max_offset" values are only accurate after
the tabpanel has been drawn at least once.
Return type: dict<any>
tabpanel_scroll({n} [, {opts}]) *tabpanel_scroll()*
Scroll the tabpanel by {n} rows. Positive values scroll down
(later tab pages become visible), negative values scroll up.
The new offset is clamped to the valid range.
When {opts} is a |Dictionary| and its "absolute" entry is
|TRUE|, {n} is used as the new absolute scroll offset instead
of a delta.
Returns |TRUE| if the scroll offset changed, |FALSE| otherwise
(for example when the tabpanel is not shown, or the offset is
already at the requested value).
Return type: |vim9-boolean|
tagfiles() *tagfiles()*
Returns a |List| with the file names used to search for tags
for the current buffer. This is the 'tags' option expanded.
@@ -12015,6 +12071,7 @@ terminalprops() *terminalprops()*
underline_rgb whether |t_8u| works **
mouse mouse type supported
kitty whether Kitty terminal was detected
decrqm whether sending DECRQM sequences work
** value 'u' for unknown, 'y' for yes, 'n' for no
@@ -12034,6 +12091,9 @@ terminalprops() *terminalprops()*
For "mouse" the value 'u' is unknown
If "decrqm" is 'y', then Vim will query support for the
'termsync' and 'termresize' ("inband") options.
Also see:
- 'ambiwidth' - detected by using |t_u7|.
- |v:termstyleresp| and |v:termblinkresp| for the response to
@@ -13326,6 +13386,7 @@ spell Compiled with spell checking support |spell|.
startuptime Compiled with |--startuptime| support.
statusline Compiled with support for 'statusline', 'rulerformat'
and special formats of 'titlestring' and 'iconstring'.
statusline_click Click handlers in 'statusline' |stl-%[FuncName]|
sun SunOS version of Vim.
sun_workshop Support for Sun |workshop| has been removed.
syntax Compiled with syntax highlighting support |syntax|.
@@ -13378,8 +13439,6 @@ vtp Compiled for vcon support |+vtp| (check vcon to find
out if it works in the current console).
wayland Compiled with Wayland protocol support.
wayland_clipboard Compiled with support for Wayland clipboard.
wayland_focus_steal Compiled with support for Wayland clipboard focus
stealing.
wildignore Compiled with 'wildignore' option.
wildmenu Compiled with 'wildmenu' option.
win16 old version for MS-Windows 3.1 (always false)
+18 -14
View File
@@ -1,4 +1,4 @@
*change.txt* For Vim version 9.2. Last change: 2026 Mar 31
*change.txt* For Vim version 9.2. Last change: 2026 May 31
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -75,18 +75,21 @@ For inserting text see |insert.txt|.
*:d* *:de* *:del* *:delete* *:dl* *:dp*
:[range]d[elete] [x] Delete [range] lines (default: current line) [into
register x].
Note these weird abbreviations:
:dl delete and list
:dell idem
:delel idem
:deletl idem
:deletel idem
:dp delete and print
:dep idem
:delp idem
:delep idem
:deletp idem
:deletep idem
Note these weird abbreviations applicable only to
legacy Vim script:
:dl delete and list
:dell idem
:delel idem
:deletl idem
:deletel idem
:dp delete and print
:dep idem
:delp idem
:delep idem
:deletp idem
:deletep idem
Warning: These give |E492| in |Vim9| script and `:dl`
executes as `:dlist`.
:[range]d[elete] [x] {count}
Delete {count} lines, starting with [range]
@@ -798,7 +801,8 @@ out then. Example: >
:%s/TESTING
This deletes "TESTING" from all lines, but only one per line.
*E1270*
For compatibility with Vi these two exceptions are allowed in legacy script:
For compatibility with Vi these two exceptions are allowed in legacy Vim
script:
"\/{string}/" and "\?{string}?" do the same as "//{string}/r".
"\&{string}&" does the same as "//{string}/".
*pattern-delimiter* *E146* *E1241* *E1242*
+16 -13
View File
@@ -1,4 +1,4 @@
*channel.txt* For Vim version 9.2. Last change: 2026 Apr 06
*channel.txt* For Vim version 9.2. Last change: 2026 Apr 29
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -132,7 +132,7 @@ Start Vim and create a listening channel: >
endfunc
" Start listening on port 8765
let server = ch_listen('localhost:8765', {"callback": "OnAccept"})
let server = ch_listen('8765', {"callback": "OnAccept"})
From another Vim instance (or any program) you can connect to it: >
let channel = ch_open('localhost:8765')
@@ -170,6 +170,7 @@ unreachable on the network.
"js" - Use JS (JavaScript) encoding, more efficient than JSON.
"nl" - Use messages that end in a NL character
"raw" - Use raw messages
"blob" - Use raw messages and pass callback data as a |Blob|
"lsp" - Use language server protocol encoding
"dap" - Use debug adapter protocol encoding
*channel-callback* *E921*
@@ -189,6 +190,8 @@ unreachable on the network.
excluding the NL.
When "mode" is "raw" the "msg" argument is the whole message
as a string.
When "mode" is "blob" the "msg" argument is the whole message
as a |Blob|.
For all callbacks: Use |function()| to bind it to arguments
and/or a Dictionary. Or use the form "dict.function" to bind
@@ -637,8 +640,7 @@ ch_info({handle}) *ch_info()*
"status" "open", "buffered" or "closed", like
ch_status()
When opened with ch_open():
"hostname" the hostname of the address
"port" the port of the address
"port" the port on loopback
"path" the path of the Unix-domain socket
"sock_status" "open" or "closed"
"sock_mode" "NL", "RAW", "JSON" or "JS"
@@ -668,22 +670,23 @@ ch_info({handle}) *ch_info()*
Return type: dict<any>
ch_listen({address} [, {options}]) *E1573* *E1574* *ch_listen()*
Listen on {address} for incoming channel connections.
This creates a server-side channel, unlike |ch_open()|
which connects to an existing server.
Listen on {address} - port on loopback or UNIX domain socket
for incoming channel connections. This creates a server-side
channel, unlike |ch_open()| which connects to an existing
server.
Returns a Channel. Use |ch_status()| to check for failure.
{address} is a String, see |channel-address| for the possible
accepted forms, however binding to all interfaces is not
allowed for security reasons.
accepted forms, however in case of TCP sockets it allows to
set only a port and binds to loopback address for security
reasons.
Note: IPv6 is not yet supported.
If {options} is given it must be a |Dictionary|.
See |channel-open-options|.
The "callback" in {options} is invoked when a new
connection is accepted. It receives two arguments: the
new Channel and the client address as a String (e.g.
"127.0.0.1:12345").
The "callback" in {options} is invoked when a new connection
is accepted. It receives two arguments: the new Channel and
the client address as a String (e.g. "127.0.0.1:12345").
Use |ch_open()| to connect to an existing server instead.
+6 -5
View File
@@ -1,4 +1,4 @@
*cmdline.txt* For Vim version 9.2. Last change: 2026 Mar 17
*cmdline.txt* For Vim version 9.2. Last change: 2026 May 20
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -56,7 +56,7 @@ history tables:
These are completely separate. Each history can only be accessed when
entering the same type of line.
Use the 'history' option to set the number of lines that are remembered
(default: 50).
(default: 200).
Notes:
- When you enter a command-line that is exactly the same as an older one, the
old one is removed (to avoid repeated commands moving older commands out of
@@ -466,14 +466,15 @@ CTRL-L A match is done on the pattern in front of the cursor. If
*c_CTRL-G* */_CTRL-G*
CTRL-G When 'incsearch' is set, entering a search pattern for "/" or
"?" and the current match is displayed then CTRL-G will move
to the next match (does not take |search-offset| into account)
to the next match. The |search-offset| is applied when <CR>
is pressed, but does not affect the match highlighting.
Use CTRL-T to move to the previous match. Hint: on a regular
keyboard G is below T.
*c_CTRL-T* */_CTRL-T*
CTRL-T When 'incsearch' is set, entering a search pattern for "/" or
"?" and the current match is displayed then CTRL-T will move
to the previous match (does not take |search-offset| into
account).
to the previous match. The |search-offset| is applied when
<CR> is pressed, but does not affect the match highlighting.
Use CTRL-G to move to the next match. Hint: on a regular
keyboard T is above G.
+11 -5
View File
@@ -1,4 +1,4 @@
*eval.txt* For Vim version 9.2. Last change: 2026 Feb 14
*eval.txt* For Vim version 9.2. Last change: 2026 May 31
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -170,8 +170,8 @@ Note that " " and "0" are also non-empty strings, thus considered to be TRUE.
A List, Dictionary or Float is not a Number or String, thus evaluate to FALSE.
*E611* *E745* *E728* *E703* *E729* *E730* *E731* *E908* *E910*
*E913* *E974* *E975* *E976* *E1319* *E1320* *E1321* *E1322*
*E1323* *E1324* *E1520* *E1522*
*E913* *E974* *E975* *E976* *E1320* *E1322* *E1324* *E1520*
*E1522*
|List|, |Tuple|, |Dictionary|, |Funcref|, |Job|, |Channel|, |Blob|, |Class|
and |object| types are not automatically converted.
@@ -3399,7 +3399,7 @@ text...
s: script-local variables
l: local function variables
v: Vim variables.
This does not work in Vim9 script. |vim9-declaration|
This does not work in Vim9 script. |vim9-declaration|
:let List the values of all variables. The type of the
variable is indicated before the value:
@@ -3675,7 +3675,7 @@ text...
all nested `:try`s inside the loop. The outermost
`:endtry` then jumps back to the start of the loop.
In |Vim9| script `:cont` is the shortest form, to
In |Vim9| script `:continue` cannot be shortened, to
improve script readability.
*:break* *:brea* *E587*
:brea[k] When used inside a `:while` or `:for` loop, skips to
@@ -5361,6 +5361,9 @@ a |lambda| expression.
With the exception of the "available" callback if a callback is not provided,
Vim will not invoke anything, and this is not an error.
If the "paste" or "copy" callbacks are triggered recursively, then they will
not be called.
*clipboard-providers-textlock*
In both the "paste" and "copy" callbacks, it is not allowed to change the
buffer text, see |textlock|.
@@ -5382,6 +5385,9 @@ order:
is an empty string, then the type is automatically chosen.
2. A |list| of strings to return to Vim, each representing a line.
If an invalid value is returned, then this is not an error. Instead the
register will be left unchanged (not cleared).
*clipboard-providers-copy*
The "copy" callback returns nothing and takes the following arguments in the
following order:
+16 -2
View File
@@ -1,4 +1,4 @@
*filetype.txt* For Vim version 9.2. Last change: 2026 Apr 07
*filetype.txt* For Vim version 9.2. Last change: 2026 May 29
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -139,6 +139,7 @@ variables can be used to overrule the filetype used for certain extensions:
file name variable ~
*.app g:filetype_app
*.as g:filetype_as
*.asa g:filetype_asa |ft-aspperl-syntax|
|ft-aspvbs-syntax|
*.asm g:asmsyntax |ft-asm-syntax|
@@ -164,6 +165,7 @@ variables can be used to overrule the filetype used for certain extensions:
*.int g:filetype_int
*.lsl g:filetype_lsl
*.m g:filetype_m |ft-mathematica-syntax|
*.mm g:filetype_mm
*.mac g:filetype_mac
*[mM]makefile,*.mk,*.mak,[mM]akefile*
g:make_flavor |ft-make-syntax|
@@ -652,7 +654,6 @@ One command, :DiffGitCached, is provided to show a diff of the current commit
in the preview window. It is equivalent to calling "git diff --cached" plus
any arguments given to the command.
The length of the first line of the commit message used for
syntax highlighting can be configured via `g:gitcommit_summary_length`.
The default is 50. Example: >
@@ -975,7 +976,20 @@ By default the following options are set, in accordance with PEP8: >
To disable this behavior, set the following variable in your vimrc: >
let g:python_recommended_style = 0
<
Python omni-completion |compl-omni| is provided by python3complete.vim (or
pythoncomplete.vim) for Vim builds with the |+python|/|+python3| interpreter.
By default it does not inspect the import / from statements found in the
buffer. This means completion of names defined in the buffer itself (classes,
functions, variables) works, but completion of members of imported modules is
not offered.
To enable completion of imported module members, set: >
let g:pythoncomplete_allow_import = 1
<
WARNING: enabling this causes omni-completion to execute the import statements
found in the buffer through Python's import machinery, which runs the imported
modules' top-level code. Only enable this for code you trust.
QF QUICKFIX *qf.vim* *ft-qf-plugin*
+2 -2
View File
@@ -1,4 +1,4 @@
*ft_mp.txt* For Vim version 9.2. Last change: 2026 Feb 14
*ft_mp.txt* For Vim version 9.2. Last change: 2026 May 04
This is the documentation for the METAFONT and MetaPost filetype plugins.
Unless otherwise specified, the commands, settings and mappings defined below
@@ -25,7 +25,7 @@ MetaPost documents, including syntax coloring, indentation, and completion.
Defining indentation rules for METAFONT and MetaPost code is tricky and
somewhat subjective, because the syntax is quite liberal. The plugin uses some
heuristics that work well most of the time, but in particular cases you may
want to to override the automatic rules, so that the manually defined
want to override the automatic rules, so that the manually defined
indentation is preserved by commands like `gg=G`.
This can be achieved by appending `%>`, `%<`, `%=` or `%!` to a line to
+27 -1
View File
@@ -1,4 +1,4 @@
*gui.txt* For Vim version 9.2. Last change: 2026 Apr 07
*gui.txt* For Vim version 9.2. Last change: 2026 Jun 02
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -1296,6 +1296,32 @@ A recommended Japanese font is MS Mincho. You can find info here:
https://learn.microsoft.com/en-us/typography/font-list/ms-mincho
It should be distributed with Windows.
Full Screen *gui-fullscreen*
Fullscreen mode is currently only supported in the Windows and GTK GUI
versions of Vim.
To enable fullscreen mode in the GUI version of Vim, add the "s" flag to the
'guioptions' setting.
For convenience, you can define a command or mapping to toggle fullscreen
mode:
>
command ToggleFullscreen {
if &guioptions =~# 's'
set guioptions-=s
else
set guioptions+=s
endif
}
map <expr> <F11> &go =~# 's' ? ":se go-=s<CR>" : ":se go+=s<CR>"
The fullscreen mode will occupy the entire screen area while hiding window
decorations such as the title bar and borders.
==============================================================================
8. Shell Commands *gui-shell*
+1 -22
View File
@@ -1,4 +1,4 @@
*gui_w32.txt* For Vim version 9.2. Last change: 2026 Feb 14
*gui_w32.txt* For Vim version 9.2. Last change: 2026 May 25
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -505,25 +505,4 @@ To use the system's default title bar colors, set highlighting groups to
hi TitleBarNC guibg=NONE guifg=NONE
<
Full Screen *gui-w32-fullscreen*
To enable fullscreen mode in the Windows GUI version of Vim, add the 's' flag
to the 'guioptions' setting.
For convenience, you can define a command or mapping to toggle fullscreen
mode:
>
command ToggleFullscreen {
if &guioptions =~# 's'
set guioptions-=s
else
set guioptions+=s
endif
}
map <expr> <F11> &go =~# 's' ? ":se go-=s<CR>" : ":se go+=s<CR>"
The fullscreen mode will occupy the entire screen area while hiding window
decorations such as the title bar and borders.
vim:tw=78:sw=4:ts=8:noet:ft=help:norl:
+14 -13
View File
@@ -1,4 +1,4 @@
*insert.txt* For Vim version 9.2. Last change: 2026 Feb 14
*insert.txt* For Vim version 9.2. Last change: 2026 Jun 02
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -1813,14 +1813,15 @@ for the syntax items. For example, in the Scheme language completion should
include the "-", call-with-output-file. Depending on your filetype, this may
not provide the words you are expecting. Setting the
g:omni_syntax_use_iskeyword option to 0 will force the syntax plugin to break
on word characters. This can be controlled adding the following to your
on word characters. This can be controlled adding the following to your
vimrc: >
let g:omni_syntax_use_iskeyword = 0
For plugin developers, the plugin exposes a public function OmniSyntaxList.
This function can be used to request a List of syntax items. When editing a
SQL file (:e syntax.sql) you can use the ":syntax list" command to see the
various groups and syntax items. For example: >
For plugin developers, the plugin exposes a public function
syntaxcomplete#OmniSyntaxList. This function can be used to request a List of
syntax items. When editing a SQL file (:e syntax.sql) you can use the
":syntax list" command to see the various groups and syntax items. For
example: >
syntax list
Yields data similar to this:
@@ -1834,22 +1835,22 @@ Yields data similar to this:
image float integer timestamp real decimal ~
There are two syntax groups listed here: sqlOperator and sqlType. To retrieve
a List of syntax items you can call OmniSyntaxList a number of different
ways. To retrieve all syntax items regardless of syntax group: >
echo OmniSyntaxList( [] )
a List of syntax items you can call syntaxcomplete#OmniSyntaxList a number of
different ways. To retrieve all syntax items regardless of syntax group: >
echo syntaxcomplete#OmniSyntaxList( [] )
To retrieve only the syntax items for the sqlOperator syntax group: >
echo OmniSyntaxList( ['sqlOperator'] )
echo syntaxcomplete#OmniSyntaxList( ['sqlOperator'] )
To retrieve all syntax items for both the sqlOperator and sqlType groups: >
echo OmniSyntaxList( ['sqlOperator', 'sqlType'] )
echo syntaxcomplete#OmniSyntaxList( ['sqlOperator', 'sqlType'] )
A regular expression can also be used: >
echo OmniSyntaxList( ['sql\w\+'] )
echo syntaxcomplete#OmniSyntaxList( ['sql\w\+'] )
From within a plugin, you would typically assign the output to a List: >
let myKeywords = []
let myKeywords = OmniSyntaxList( ['sqlKeyword'] )
let myKeywords = syntaxcomplete#OmniSyntaxList( ['sqlKeyword'] )
SQL *ft-sql-omni*
+38 -6
View File
@@ -1,4 +1,4 @@
*map.txt* For Vim version 9.2. Last change: 2026 Feb 14
*map.txt* For Vim version 9.2. Last change: 2026 May 23
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -208,8 +208,7 @@ be effective in the current buffer only. Example: >
Then you can map ",w" to something else in another buffer: >
:map <buffer> ,w /[#&!]<CR>
The local buffer mappings are used before the global ones. See <nowait> below
to make a short local mapping not taking effect when a longer global one
exists.
to make a short local mapping take effect when a longer global one exists.
The "<buffer>" argument can also be used to clear mappings: >
:unmap <buffer> ,w
:mapclear <buffer>
@@ -1593,7 +1592,10 @@ reported if any are supplied). However, it is possible to specify that the
command can take arguments, using the -nargs attribute. Valid cases are:
-nargs=0 No arguments are allowed (the default)
-nargs=1 Exactly one argument is required, it includes spaces
-nargs=1 Exactly one argument is required, it includes spaces;
completion treats white spaces as argument separation
-nargs=_ Exactly one argument is required, it includes spaces;
completion treats white spaces as part of the argument
-nargs=* Any number of arguments are allowed (0, 1, or many),
separated by white space
-nargs=? 0 or 1 arguments are allowed
@@ -1601,7 +1603,23 @@ command can take arguments, using the -nargs attribute. Valid cases are:
Arguments are considered to be separated by (unescaped) spaces or tabs in this
context, except when there is one argument, then the white space is part of
the argument.
the argument. The difference between the "-nargs=1" and "-nargs=_": >
func MyComplete(ArgLead, CmdLine, CursorPos)
return ["one value", "two values", "three values"]
\->matchfuzzy(a:ArgLead)
endfunc
:command -nargs=1 -complete=customlist,MyComplete MyCmd1 echo <q-args>
:command -nargs=_ -complete=customlist,MyComplete MyCmd2 echo <q-args>
Completing ":MyCmd1 two va<tab>" will complete with: >
:MyCmd1 two one value
Completing ":MyCmd2 two va<tab>" will complete with: >
:MyCmd2 two values
Note that arguments are used as text, not as expressions. Specifically,
"s:var" will use the script-local variable in the script where the command was
@@ -1693,7 +1711,21 @@ For the "custom" argument, the function should return the completion
candidates one per line in a newline separated string.
*E1303*
For the "customlist" argument, the function should return the completion
candidates as a Vim List. Non-string items in the list are ignored.
candidates as a Vim List. Each item may be either a string or a |Dictionary|.
A Dictionary item may have the following keys:
word (required) the text inserted into the command line when the
item is selected
abbr alternative text shown in the popup menu in place of "word",
when 'wildoptions' contains "pum"; useful when the inserted
text and the displayed text should differ
kind short kind text (one or two characters), shown in the popup
menu when 'wildoptions' contains "pum"
menu extra text shown after the match in the popup menu
info long description shown in the info popup; the |+popupwin|
feature is required to display it
Items that are neither a string nor a Dictionary, and Dictionary items without
a "word" key, are ignored. When 'wildoptions' does not contain "pum", only
"word" is shown.
The function arguments are:
ArgLead the leading portion of the argument currently being
+1 -1
View File
@@ -1,4 +1,4 @@
*netbeans.txt* For Vim version 9.2. Last change: 2026 Mar 07
*netbeans.txt* For Vim version 9.2. Last change: 2026 Apr 09
VIM REFERENCE MANUAL by Gordon Prieur et al.
+219 -54
View File
@@ -1,4 +1,4 @@
*options.txt* For Vim version 9.2. Last change: 2026 Apr 07
*options.txt* For Vim version 9.2. Last change: 2026 May 25
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -324,12 +324,12 @@ that was last closed are used again. If this buffer has been edited in this
window, the values from back then are used. Otherwise the values from the
last closed window where the buffer was edited last are used.
It's possible to set a local window option specifically for a type of buffer.
When you edit another buffer in the same window, you don't want to keep
using these local window options. Therefore Vim keeps a global value of the
local window options, which is used when editing another buffer. Each window
has its own copy of these values. Thus these are local to the window, but
global to all buffers in the window. With this you can do: >
":setlocal" can be used to set a local window option specifically for a type
of buffer. When you edit another buffer in the same window, you don't want to
keep using these local window options. Meanwhile ":set" also sets a global
value of a local window option, which is used when editing another buffer.
Each window has its own copy of these global values, making them local to the
window, but global to all buffers in the window. With this you can do: >
:e one
:set list
:e two
@@ -2408,6 +2408,9 @@ A jump table for the options with a short description can be found at |Q_op|.
close show close button: "on" (default) or "off"
height maximum height of the popup
highlight popup highlight group (default: PmenuSel)
opacity opacity percentage 0-100 (default 100, fully
opaque). When less than 100, content beneath
the popup shows through.
resize show resize handle: "on" (default) or "off"
shadow "off" (default) or "on" using |hl-PmenuShadow|
width maximum width of the popup
@@ -2415,6 +2418,7 @@ A jump table for the options with a short description can be found at |Q_op|.
Example: >
:set completepopup=height:10,border:single,highlight:InfoPopup
:set completepopup=width:60,border:custom:─;│;─;│;┌;┐;┘;└
:set completepopup=border:round,opacity:80
<
When "align" is set to "item", the popup is positioned near the
selected item and moves as the selection changes.
@@ -3994,7 +3998,8 @@ A jump table for the options with a short description can be found at |Q_op|.
|String| and is the |:find| command argument. The second argument is
a |Boolean| and is set to |v:true| when the function is called to get
a List of command-line completion matches for the |:find| command.
The function should return a List of strings.
The function should return a List, which is handled similarly to the
return value of a |:command-completion-customlist| function.
The function is called only once per |:find| command invocation.
The function can process all the directories specified in 'path'.
@@ -4707,10 +4712,10 @@ A jump table for the options with a short description can be found at |Q_op|.
Photon and MacVim GUIs.
*'go-s'*
's' Enable fullscreen mode. Currently only supported in the
MS-Windows GUI version. When set, the window will occupy the
entire screen and remove window decorations. Define custom
mappings to toggle this mode conveniently. For detailed usage
instructions, see |gui-w32-fullscreen|.
MS-Windows and GTK GUI version. When set, the window will
occupy the entire screen and remove window decorations.
Define custom mappings to toggle this mode conveniently.
For detailed usage instructions, see |gui-fullscreen|.
*'go-r'*
'r' Right-hand scrollbar is always present.
*'go-R'*
@@ -4856,7 +4861,8 @@ A jump table for the options with a short description can be found at |Q_op|.
l:Search,m:MoreMsg,M:ModeMsg,n:LineNr,
a:LineNrAbove,b:LineNrBelow,
N:CursorLineNr,r:Question,s:StatusLine,
S:StatusLineNC,c:VertSplit,t:Title,
S:StatusLineNC,c:VertSplit,
|:VertSplitNC,t:Title,
v:Visual,V:VisualNOS,w:WarningMsg,
W:WildMenu,f:Folded,F:FoldColumn,
A:DiffAdd,C:DiffChange,D:DiffDelete,
@@ -4867,7 +4873,8 @@ A jump table for the options with a short description can be found at |Q_op|.
[:PmenuKind,]:PmenuKindSel,
{:PmenuExtra,}:PmenuExtraSel,
x:PmenuSbar,X:PmenuThumb,j:PmenuBorder,
H:PmenuShadow,*:TabLine,
H:PmenuShadow,p:Popup,J:PopupBorder,
Q:PopupTitle,*:TabLine,
#:TabLineSel,_:TabLineFill,!:CursorColumn,
.:CursorLine,o:ColorColumn,q:QuickFixLine,
z:StatusLineTerm,Z:StatusLineTermNC,
@@ -4904,6 +4911,8 @@ A jump table for the options with a short description can be found at |Q_op|.
|hl-StatusLineNC| S status lines of not-current windows
|hl-Title| t Titles for output from ":set all", ":autocmd" etc.
|hl-VertSplit| c column used to separate vertically split windows
|hl-VertSplitNC| | column separating non-current vertically split
windows
|hl-Visual| v Visual mode
|hl-VisualNOS| V Visual mode when Vim is "Not Owning the
Selection" Only X11 Gui's |gui-x11|,
@@ -4936,6 +4945,9 @@ A jump table for the options with a short description can be found at |Q_op|.
|hl-PmenuMatchSel| < popup menu matched text in selected line
|hl-PmenuBorder| j popup menu border characters
|hl-PmenuShadow| H popup menu shadow
|hl-Popup| p popup window body
|hl-PopupBorder| J popup window border characters
|hl-PopupTitle| Q popup window title
|hl-PreInsert| I text inserted when "preinsert" is in 'completeopt'
|hl-Normal| ( Window color (supersedes 'wincolor' option)
@@ -6332,6 +6344,54 @@ A jump table for the options with a short description can be found at |Q_op|.
NOTE: 'modeline' is set to the Vi default value when 'compatible' is
set and to the Vim default value when 'compatible' is reset.
*'modelinestrict'* *'mlst'* *'nomodelinestrict'* *'nomlst'*
'modelinestrict' 'mlst' boolean (default: on)
global
When on, only a safe subset of options can be set from a |modeline|.
The following options are allowed:
'autoindent'
'cindent'
'commentstring'
'expandtab'
'filetype'
'foldcolumn'
'foldenable'
'foldmarker'
'foldmethod'
'modifiable'
'readonly'
'rightleft'
'shiftwidth'
'smartindent'
'softtabstop'
'spell'
'spelllang'
'tabstop'
'textwidth'
'varsofttabstop'
'vartabstop'
Any other option set from a modeline will be silently ignored.
This option cannot be set from a |modeline| or in the |sandbox|, for
security reasons.
As an exception, `set nomodeline` is honored from within a modeline
even when 'modelinestrict' is on. Other forms (`set modeline=0`,
`set modeline!`, `set invmodeline`) are still silently ignored.
This lets a file disable further modeline processing for itself.
The behaviour of 'modeline', 'modelinestrict' and 'modelineexpr' is
as follows:
'modeline'| 'modelinestrict'| 'modelineexpr' | Meaning
----------+-----------------+-------------------+--------~
on | off | on | All options can be set
on | on | any | Only whitelisted
| | | options can be set
on | off | off | All options except for
| | | expr options can be set
off | any | any | No options can be set
*'modifiable'* *'ma'* *'nomodifiable'* *'noma'*
*E21*
'modifiable' 'ma' boolean (default on)
@@ -6445,7 +6505,10 @@ A jump table for the options with a short description can be found at |Q_op|.
be acted upon, i.e. no cursor move. This implies of
course, that right clicking outside a selection will
end Visual mode.
Overview of what button does what for each model:
For a detailed description of 'mousemodel' behaviour see
|mouse-mode-table|. Overview of what button does what for each model:
mouse extend popup(_setpos) ~
left click place cursor place cursor
left drag start selection start selection
@@ -7022,7 +7085,7 @@ A jump table for the options with a short description can be found at |Q_op|.
global
Defines a border and optional decorations for the popup menu in
completion. The value is a comma-separated list of keywords.
See |'pumopt'| for a consolidated alternative.
See 'pumopt' for a consolidated alternative.
Border styles (at most one):
"single" use thin box-drawing characters
@@ -7058,7 +7121,7 @@ A jump table for the options with a short description can be found at |Q_op|.
Determines the maximum number of items to show in the popup menu for
Insert mode completion. When zero as much space as available is used.
|ins-completion-menu|.
See |'pumopt'| for a consolidated alternative.
See 'pumopt' for a consolidated alternative.
*'pummaxwidth'* *'pmw'*
'pummaxwidth' 'pmw' number (default 0)
@@ -7070,13 +7133,13 @@ A jump table for the options with a short description can be found at |Q_op|.
This option takes precedence over 'pumwidth'.
|ins-completion-menu|.
See |'pumopt'| for a consolidated alternative.
See 'pumopt' for a consolidated alternative.
*'pumopt'*
'pumopt' string (default "")
global
Configures the popup menu used for Insert mode completion.
The value is a comma-separated list of key:value pairs and flags.
The value is a comma-separated list of "key:value" pairs and flags.
Keys with values:
border:{style} set a border style (at most one):
@@ -7098,7 +7161,8 @@ A jump table for the options with a short description can be found at |Q_op|.
of 'fillchars' option.
opacity:{n} opacity percentage 0-100 (default 100).
When less than 100, background content shows
through the popup menu.
through the popup menu. Requires the GUI,
'termguicolors', or a 256-color terminal.
Flags (no value):
margin adds one-cell spacing inside the left and
@@ -7106,8 +7170,8 @@ A jump table for the options with a short description can be found at |Q_op|.
shadow draws a shadow at the right and bottom edges.
Border styles using box-drawing characters ("single", "double",
"round") are only available when 'encoding' is "utf-8" and
'ambiwidth' is "single".
"round") are only available when 'encoding' is "utf-8" and 'ambiwidth'
is "single".
Highlight groups:
|hl-PmenuBorder| used for the border characters
@@ -7130,7 +7194,7 @@ A jump table for the options with a short description can be found at |Q_op|.
global
Determines the minimum width to use for the popup menu for Insert mode
completion. |ins-completion-menu|.
See |'pumopt'| for a consolidated alternative.
See 'pumopt' for a consolidated alternative.
*'pythondll'*
'pythondll' string (default depends on the build)
@@ -7668,8 +7732,8 @@ A jump table for the options with a short description can be found at |Q_op|.
Minimal number of screen lines to keep above and below the cursor.
This will make some context visible around where you are working. If
you set it to a very large value (999) the cursor line will always be
in the middle of the window (except at the start or end of the file or
when long lines wrap).
in the middle of the window (except at the start or end of the file,
see 'scrolloffpad', or when long lines wrap).
After using the local value, go back the global value with one of
these two: >
setlocal scrolloff<
@@ -7677,7 +7741,24 @@ A jump table for the options with a short description can be found at |Q_op|.
< For scrolling horizontally see 'sidescrolloff'.
NOTE: This option is set to 0 when 'compatible' is set.
*'scrollopt'* *'sbo'*
*'scrolloffpad'* *'sop'*
'scrolloffpad' 'sop' number (default 0)
global or local to window |global-local|
When 'scrolloff' and 'scrolloffpad' are greater than zero, allow
the cursor to remain centered when at the end of the file.
Normally, 'scrolloff' will not keep the cursor centered at the
end of the file.
A value of 0 disables this feature. Any value above 0 enables it.
For a window-local value, -1 means to use the global value.
Values below -1 are invalid.
After using the local value, go back the global value with one of
these two: >
setlocal scrolloffpad<
setlocal scrolloffpad=-1
< *'scrollopt'* *'sbo'*
'scrollopt' 'sbo' string (default "ver,jump")
global
This is a comma-separated list of words that specifies how
@@ -7914,6 +7995,7 @@ A jump table for the options with a short description can be found at |Q_op|.
Note: When using a pipe like "| tee", you'll lose the exit code of the
shell command. This might be configurable by your shell, look for
the pipefail option (for bash and zsh, use ":set -o pipefail").
Only a single "%s" value is allowed.
This option cannot be set from a |modeline| or in the |sandbox|, for
security reasons.
@@ -7957,6 +8039,9 @@ A jump table for the options with a short description can be found at |Q_op|.
become obsolete (at least for Unix).
This option cannot be set from a |modeline| or in the |sandbox|, for
security reasons.
*E1577*
Only a single "%s" item is allowed in the option value.
*'shellslash'* *'ssl'* *'noshellslash'* *'nossl'*
'shellslash' 'ssl' boolean (default off)
@@ -8118,6 +8203,9 @@ A jump table for the options with a short description can be found at |Q_op|.
search count statistics. The maximum limit can be set with
the 'maxsearchcount' option, see also |searchcount()|
function.
u don't give undo and redo messages like *shm-u*
"1 line less; before #1 1 second ago", "Already at oldest
change" or "Already at newest change"
This gives you the opportunity to avoid that a change between buffers
requires you to hit <Enter>, but still gives as useful a message as
@@ -8718,7 +8806,8 @@ A jump table for the options with a short description can be found at |Q_op|.
{ NF Evaluate expression between '%{' and '}' and substitute result.
Note that there is no '%' before the closing '}'. The
expression cannot contain a '}' character, call a function to
work around that. See |stl-%{| below.
work around that. See |stl-%{| below. Use '%0{' to insert the
result verbatim.
{% - This is almost same as { except the result of the expression is
re-evaluated as a statusline format string. Thus if the
return value of expr contains % items they will get expanded.
@@ -8756,10 +8845,62 @@ A jump table for the options with a short description can be found at |Q_op|.
applied to StatusLineNC for the statusline of non-current
windows.
The number N must be between 1 and 9. See |hl-User1..9|
*stl-%@*
*stl-%@*
@ - Inserts a newline. This only takes effect when the "maxheight"
value of 'statuslineopt' is greater than 1, or for |tabpanel|.
*stl-%[FuncName]*
%[ defines clickable regions in the statusline. When the user clicks
on a region with the mouse, the specified function is called. The
same syntax can also be used in 'tabline' and 'tabpanel'.
%[FuncName] Start of a clickable region. "FuncName" is the name
of a Vim function to call when the region is clicked.
%[] End of the clickable region. If omitted, the region
extends to the end of the statusline or to the start
of the next clickable region.
A {minwid} value can be used to pass an identifier to the callback:
%3[FuncName] Starts a clickable region with minwid 3.
The function receives a single |Dictionary| argument with these
entries:
"minwid" The minwid value from %N[Func] (0 if not specified).
"nclicks" Number of clicks: 1, 2, or 3.
"button" Mouse button: "l" (left), "m" (middle), "r" (right).
"mods" Modifier keys: combination of "s" (shift), "c" (ctrl),
"a" (alt). Empty string if no modifiers.
"winid" |window-ID| of the window whose statusline was clicked,
or 0 when the click was in 'tabline' or 'tabpanel'.
"area" "statusline", "tabline", or "tabpanel". Indicates
which option the clicked region belongs to.
"tabnr" (tabpanel only) Tab page number of the clicked label.
If the function returns non-zero, the statusline is redrawn.
Dragging the statusline to resize the window still works even when
click handlers are defined. When used in 'tabline' or 'tabpanel',
clicks in %[FuncName] regions are dispatched to the callback
instead of the default tab-selection behavior.
Example: >
func! ClickFile(info)
if a:info.button ==# 'l' && a:info.nclicks == 2
browse edit
endif
return 0
endfunc
set statusline=%[ClickFile]%f%[]\ %l:%c
< This makes the filename in the statusline clickable. Double-clicking
it opens the file browser.
Use `has('statusline_click')` to check if this feature is available.
This is useful for backward compatibility: >
if has('statusline_click')
set statusline=%[ClickFile]%f%[]\ %l:%c
else
set statusline=%f\ %l:%c
endif
<
When displaying a flag, Vim removes the leading comma, if any, when
that flag comes right after plaintext. This will make a nice display
when flags are used like in the examples below.
@@ -8793,6 +8934,8 @@ A jump table for the options with a short description can be found at |Q_op|.
A result of all digits is regarded a number for display purposes.
Otherwise the result is taken as flag text and applied to the rules
described above.
*stl-%0{*
With %0{ neither applies: the result is inserted as a literal string.
Watch out for errors in expressions. They may render Vim unusable!
If you are stuck, hold down ':' or 'Q' to get a prompt, then quit and
@@ -9074,24 +9217,22 @@ A jump table for the options with a short description can be found at |Q_op|.
Optional settings for the |tabpanel|, It can consist of the following
items. Items must be separated by a comma.
align:{text} Specifies the position of the tabpanel.
Currently supported positions are:
left left-side
align:{text} Specifies the position of the tabpanel.
Currently supported positions are:
left left-side (default)
right right-side
(default "left")
columns:{n} Number of columns of the tabpanel.
If this value is 0 or less than 'columns', the
tab panel will not be displayed.
(default 20)
vert Use a vertical separator for tabpanel.
The vertical separator character is taken from
"tpl_vert" in 'fillchars'.
(default off)
columns:{n} Number of columns of the tabpanel. (default 20)
If this value is 0 or less than 'columns', the
tabpanel will not be displayed.
scrollbar A one-column scrollbar is always displayed at the
right edge of the tabpanel, regardless of the
"align:" setting. (default off)
See |tabpanel-scroll|.
vert The vertical separator is drawn at the boundary
between the tabpanel and the buffer area.
(default off)
The character to be drawn uses "tpl_vert" from
'fillchars'.
Examples: >
:set tabpanelopt=columns:16,align:right
:set tabpanelopt=
@@ -9229,6 +9370,22 @@ A jump table for the options with a short description can be found at |Q_op|.
file names from the list. This avoids problems when a future version
uses another default.
*'tagsecure'* *'tsc'* *'notagsecure'* *'notsc'*
'tagsecure' 'tsc' boolean (default on)
global
When on, Vim refuses to follow tag entries whose file field looks like
a URL ("scheme://..."), aborting the jump with error |E1576|. This
prevents tag files from causing Vim to open URLs through |netrw|, which
would trigger a network request and expose netrw's URL-handling code to
attacker-controlled input or lead to environment exfiltration.
Tag files might be distributed alongside source code (e.g. via Git
repositories) and may therefore be untrustworthy. Only disable
this option if you fully control the tag files Vim will read.
This option cannot be set from a |modeline| or in the |sandbox|, for
security reasons.
*'tagstack'* *'tgst'* *'notagstack'* *'notgst'*
'tagstack' 'tgst' boolean (default on)
global
@@ -10078,6 +10235,14 @@ A jump table for the options with a short description can be found at |Q_op|.
letter. Thus "KEEPTHIS and "K_L_M" are stored, but "KeepThis"
and "_K_L_M" are not. Nested List and Dict items may not be
read back correctly, you end up with an empty item.
Restoring |List|, |Dictionary| and |Tuple| variables is done by
parsing their textual form with the Vim expression evaluator.
Reading a viminfo file with "!" enabled is therefore only safe
when the file is trusted. In particular, do not enable "!"
before reading a viminfo file you obtained from another user,
downloaded, or that is writable by another account. See
also |viminfo-security|.
*viminfo-quote*
" Maximum number of lines saved for each register. Old name of
the '<' item, with the disadvantage that you need to put a
@@ -10435,8 +10600,12 @@ A jump table for the options with a short description can be found at |Q_op|.
applies to buffer name completion.
"noselect" If 'wildmenu' is enabled, show the menu but do not
preselect the first item.
If only one match exists, it is completed fully, unless "noselect" is
specified.
"noinsert" If 'wildmenu' is enabled, show the menu and preselect
the first match, but do not insert it in the command
line. If both "noinsert" and "noselect" are present,
"noselect" takes precedence.
If only one match exists, it is completed fully, unless "noselect" or
"noinsert" is specified.
Some useful combinations of colon-separated values:
"longest:full" Start with the longest common string and show
@@ -10704,11 +10873,10 @@ A jump table for the options with a short description can be found at |Q_op|.
*'wlsteal'* *'wst'* *'nowlsteal'* *'nowst'*
'wlsteal' 'wst' boolean (default off)
global
{only when the |+wayland_focus_steal| feature is
included}
DEPRECATED: This option is no longer used; changing it has no effect.
When enabled, then allow Vim to steal focus by creating a temporary
surface, in order to access the clipboard. For more information see
|wayland-focus-steal|.
surface, in order to access the clipboard.
*'wltimeoutlen'* *'wtm'*
'wltimeoutlen' 'wtm' number (default 500)
@@ -10721,9 +10889,6 @@ A jump table for the options with a short description can be found at |Q_op|.
some cases. On the other hand, it may also mean you receive errors
when the compositor takes more time to respond than usual.
Additionally, this option is also used as the maximum timeout when
waiting for a surface to gain focus, see |wayland-focus-steal|.
*'wrap'* *'nowrap'*
'wrap' boolean (default on)
local to window
+19 -13
View File
@@ -1047,7 +1047,7 @@ QUICK REFERENCE: MAPS *netrw-browse-maps* {{{2
C Setting the editing window |netrw-C|
d Make a directory |netrw-d|
D Attempt to remove the file(s)/directory(ies) |netrw-D|
gb Go to previous bookmarked directory |netrw-gb|
gb Go to bookmark |netrw-gb|
gd Force treatment as directory |netrw-gd|
gf Force treatment as file |netrw-gf|
gh Quick hide/unhide of dot-files |netrw-gh|
@@ -1056,11 +1056,12 @@ QUICK REFERENCE: MAPS *netrw-browse-maps* {{{2
i Cycle between thin, long, wide, and tree listings |netrw-i|
I Toggle the displaying of the banner |netrw-I|
mb Bookmark current directory |netrw-mb|
mB Delete bookmark |netrw-mB|
mc Copy marked files to marked-file target directory |netrw-mc|
md Apply diff to marked files (up to 3) |netrw-md|
me Place marked files on arg list and edit them |netrw-me|
mf Mark a file |netrw-mf|
mF Unmark files |netrw-mF|
mF Unmark buffer-local files |netrw-mF|
mg Apply vimgrep to marked files |netrw-mg|
mh Toggle marked file suffices' presence on hiding list |netrw-mh|
mm Move marked files to marked-file target directory |netrw-mm|
@@ -1142,6 +1143,8 @@ One may easily "bookmark" the currently browsed directory by using >
mb
<
Note: Bookmarked paths are normalized and stored as absolute paths.
*.netrwbook*
Bookmarks are retained in between sessions of vim in a file called .netrwbook
as a |List|, which is typically stored in the first directory on the user's
@@ -1363,13 +1366,16 @@ Currently, this only works for local files.
Associated setting variables: |g:netrw_chgperm|
CHANGING TO A BOOKMARKED DIRECTORY *netrw-gb* {{{2
CHANGING TO A BOOKMARKED PATH *netrw-gb* {{{2
To change directory back to a bookmarked directory, use
To change to a bookmarked path, use >
{cnt}gb
[{cnt}]gb
Any count may be used to reference any of the bookmarks.
If {cnt} is omitted, it shows a list of the current bookmarks
and prompts for a bookmark number to go to.
Note that |netrw-qb| shows both bookmarks and history; to go
to a location stored in the history see |netrw-u| and |netrw-U|.
@@ -1432,10 +1438,13 @@ DELETING BOOKMARKS *netrw-mB* {{{2
To delete a bookmark, use >
{cnt}mB
[{cnt}]mB
If there are marked files, then mB will remove them from the
bookmark list.
If no files are marked and {cnt} is omitted, it shows a list
of the current bookmarks and prompts for a bookmark number
to delete.
Alternatively, one may use :NetrwMB! (see |netrw-:NetrwMB|). >
@@ -2275,9 +2284,10 @@ Set the marked file copy/move-to target (see |netrw-mc| and |netrw-mm|):
displayed directory is used for the copy/move-to target.
* Also, if the cursor is in the banner, then the netrw window's currently
displayed directory is used for the copy/move-to target.
Unless the target already is the current directory. In which case,
typing "mf" clears the target.
displayed directory is used for the copy/move-to target - unless that
directory is already the target, in which case typing "mt" again clears
it. Repeating "mt" in the banner thus toggles the current directory as
the target.
* However, if the cursor is atop a directory name, then that directory is
used for the copy/move-to target
@@ -2854,10 +2864,6 @@ your browsing preferences. (see also: |netrw-settings|)
such as listing, file removal, etc.
default: ssh
*g:netrw_tmpfile_escape* =' &;'
escape() is applied to all temporary files
to escape these characters.
*g:netrw_timefmt* specify format string to vim's strftime().
The default, "%c", is "the preferred date
and time representation for the current
+9 -2
View File
@@ -1,4 +1,4 @@
*pi_tar.txt* For Vim version 9.2. Last change: 2026 Feb 14
*pi_tar.txt* For Vim version 9.2. Last change: 2026 Apr 16
+====================+
| Tar File Interface |
@@ -101,10 +101,17 @@ Copyright 2005-2017: *tar-copyright*
4. History *tar-history*
unreleased:
Apr 16, 2026 * add missing g:tar_secure into tar#Extract
Apr 15, 2026 * add path traversal checks in tar#Extract()
Apr 09, 2026 * fix zstd support and dotted filename support
Apr 06, 2026 * fix lz4 support
Feb 07, 2026 * make path traversal detection more robust
Feb 06, 2026 * fix bug with nowrapscan
Jul 16, 2025 * update minimum required Vim version
Jul 13, 2025 * drop leading /
May 19, 2025 * restore working directory after read/write
Apr 16, 2025 * decouple from netrw by adding s:WinPath()
instead of shelling out to file(1)
instead of shelling out to file(1)
Mar 02, 2025 * determine the compression using readblob()
Mar 02, 2025 * escape the filename before using :read
Mar 01, 2025 * fix syntax error in tar#Read()
+6 -1
View File
@@ -1,4 +1,4 @@
*pi_vimball.txt* For Vim version 9.2. Last change: 2026 Apr 05
*pi_vimball.txt* For Vim version 9.2. Last change: 2026 Apr 16
----------------
Vimball Archiver
@@ -166,6 +166,11 @@ WINDOWS *vimball-windows*
==============================================================================
4. Vimball History *vimball-history* {{{1
unreleased:
Feb 28, 2025 * add support for bzip3 (#16755)
Apr 05, 2026 * Detect path traversal attacks
Apr 09, 2026 * Detect more path traversal attacks
Apr 16, 2026 * Block Windows drive letter paths
37 : Jul 18, 2014 * (by request of T. Miedema) added augroup around
the autocmds in vimballPlugin.vim
Jul 06, 2015 * there are two uses of tabc; changed to tabc!
+3 -3
View File
@@ -1,4 +1,4 @@
*pi_zip.txt* For Vim version 9.2. Last change: 2026 Apr 05
*pi_zip.txt* For Vim version 9.2. Last change: 2026 May 16
+====================+
| Zip File Interface |
@@ -114,9 +114,9 @@ Copyright: Copyright (C) 2005-2015 Charles E Campbell *zip-copyright*
should be treated as zip files.
Alternatively, one may change *g:zipPlugin_ext* in one's .vimrc.
Currently (as of October 2025) it holds: >
Currently (as of May 2026) it holds: >
let g:zipPlugin_ext='*.aar,*.apk,*.celzip,*.crtx,*.docm,*.docx,
let g:zipPlugin_ext='*.aar,*.apk,*.cbz,*.celzip,*.crtx,*.docm,*.docx,
\ *.dotm,*.dotx,*.ear,*.epub,*.gcsx,*.glox,*.gqsx,*.ja,*.jar,*.kmz,
\ *.odb,*.odc,*.odf,*.odg,*.odi,*.odm,*.odp,*.ods,*.odt,*.otc,*.otf,
\ *.otg,*.oth,*.oti,*.otp,*.ots,*.ott,*.oxt,*.pkpass,*.potm,*.potx,
+49 -5
View File
@@ -1,4 +1,4 @@
*popup.txt* For Vim version 9.2. Last change: 2026 Apr 06
*popup.txt* For Vim version 9.2. Last change: 2026 May 17
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -44,8 +44,11 @@ A popup window can be used for such things as:
The text in the popup window can be colored with |text-properties|. It is
also possible to use syntax highlighting.
The default color used is "Pmenu". If you prefer something else use the
"highlight" argument or the 'wincolor' option, e.g.: >
The default colors are taken from |hl-Popup| (body), |hl-PopupBorder|
(border) and |hl-PopupTitle| (title), which all link to |hl-Pmenu| by
default for backward compatibility. Override them to give general popup
windows a different look than the popup completion menu, or use the
"highlight" argument or the 'wincolor' option for a per-popup override: >
hi MyPopupColor ctermbg=lightblue guibg=lightblue
call setwinvar(winid, '&wincolor', 'MyPopupColor')
@@ -712,6 +715,15 @@ The second argument of |popup_create()| is a dictionary with options:
when "textprop" is present.
textpropid Used to identify the text property when "textprop" is
present. Use zero to reset.
clipwindow Only used when "textprop" is set. When TRUE the popup
is kept within the window containing the text
property: if the text property scrolls past that
window's top, bottom, left or right edge, the popup
is clipped at that edge instead of being drawn
outside it. Once the text property has scrolled out
of the window the popup is hidden.
Default FALSE.
See |popup-clipwindow|.
fixed When FALSE (the default), and:
- "pos" is "botleft" or "topleft", and
- the popup would be truncated at the right edge of
@@ -751,6 +763,10 @@ The second argument of |popup_create()| is a dictionary with options:
border one line of padding is added to put the title
on. You might want to add one or more spaces at the
start and end as padding.
The title uses |hl-PopupTitle| by default; if
"borderhighlight" is set the top border highlight is
used instead, and if "highlight"/'wincolor' is set
that is used.
wrap TRUE to make the lines wrap (default TRUE).
drag TRUE to allow the popup to be dragged with the mouse
by grabbing at the border. Has no effect if the
@@ -799,6 +815,8 @@ The second argument of |popup_create()| is a dictionary with options:
the highlight for the top/right/bottom/left border.
Example: ['TopColor', 'RightColor', 'BottomColor,
'LeftColor']
When not given and "highlight"/'wincolor' is also not
set, |hl-PopupBorder| is used.
borderchars List with characters, defining the character to use
for the top/right/bottom/left border. Optionally
followed by the character to use for the
@@ -949,6 +967,31 @@ If the window for which the popup was defined is closed, the popup is closed.
If the popup cannot fit in the desired position, it may show at a nearby
position.
CLIP TEXTPROP POPUP TO HOST WINDOW *popup-clipwindow*
When the popup is anchored to a text property in a split window, the popup is
by default drawn relative to the whole screen and may extend past the edges of
the window that contains the text property (the "host window"). Setting
"clipwindow" to TRUE keeps the popup within window's content area:
parts of the popup that fall outside the window are clipped, and the popup is
hidden once the text property has scrolled entirely past one of the edges.
Example: a tall popup anchored above the cursor that should never spill into
the window below the split: >
call popup_create(body, #{
\ textprop: 'marker',
\ textpropid: id,
\ pos: 'topleft',
\ line: -1, col: 0,
\ posinvert: v:false,
\ clipwindow: v:true,
\ })
<
With "posinvert" left at its default (TRUE) the popup may be flipped to the
opposite side of the text property when there is no room; set it to FALSE to
keep the requested side and rely on "clipwindow" to clip the overflow.
Some hints:
- To avoid collision with other plugins the text property type name has to be
unique. You can also use the "bufnr" item to make it local to a buffer.
@@ -1067,8 +1110,9 @@ The opacity value ranges from 0 to 100:
1-99 Partially transparent - the popup background is blended with
the underlying text, making both partially visible.
The transparency effect requires using the GUI or having 'termguicolors'
enabled in the terminal. Without it, the opacity setting has no effect.
The transparency effect requires using the GUI, having 'termguicolors'
enabled, or running in a 256-color terminal. On terminals with fewer
than 256 colors the opacity setting has no effect.
When a popup is transparent:
- The popup's background color is blended with the background text
+4 -4
View File
@@ -1,4 +1,4 @@
*quickfix.txt* For Vim version 9.2. Last change: 2026 Feb 14
*quickfix.txt* For Vim version 9.2. Last change: 2026 May 28
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -1821,9 +1821,9 @@ Basic items
%c column number (finds a number representing character
column of the error, byte index, a <tab> is 1
character column)
%v virtual column number (finds a number representing
screen column of the error (1 <tab> == 8 screen
columns))
%v virtual column number (finds a number representing the
screen column of the error, where a <tab> is always 8
screen columns regardless of 'tabstop')
%k end column number (finds a number representing
the character column of the error, byte index, or a
number representing screen end column of the error if
+4 -1
View File
@@ -1,4 +1,4 @@
*quickref.txt* For Vim version 9.2. Last change: 2026 Apr 07
*quickref.txt* For Vim version 9.2. Last change: 2026 May 17
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -830,6 +830,7 @@ Short explanation of each option: *option-list*
'modeline' 'ml' recognize modelines at start or end of file
'modelineexpr' 'mle' allow setting expression options from a modeline
'modelines' 'mls' number of lines checked for modelines
'modelinestrict' 'mlst' only allow safe options in modelines
'modifiable' 'ma' changes to the text are not possible
'modified' 'mod' buffer has been modified
'more' pause listings when the whole screen is filled
@@ -901,6 +902,7 @@ Short explanation of each option: *option-list*
'scrollfocus' 'scf' scroll wheel applies to window under pointer
'scrolljump' 'sj' minimum number of lines to scroll
'scrolloff' 'so' minimum nr. of lines above and below cursor
'scrolloffpad' 'sop' vertically center cursor at end of file
'scrollopt' 'sbo' how 'scrollbind' should behave
'sections' 'sect' nroff macros that separate sections
'secure' secure mode for reading .vimrc in current dir
@@ -965,6 +967,7 @@ Short explanation of each option: *option-list*
'taglength' 'tl' number of significant characters for a tag
'tagrelative' 'tr' file names in tag file are relative
'tags' 'tag' list of file names used by the tag command
'tagsecure' 'tsc' do not open remote files using tag commands
'tagstack' 'tgst' push tags onto the tag stack
'tcldll' name of the Tcl dynamic library
'term' name of the terminal
+4
View File
@@ -195,6 +195,10 @@ recovered file. Or use |:DiffOrig|.
Once you are sure the recovery is ok delete the swap file. Otherwise, you
will continue to get warning messages that the ".swp" file already exists.
Note: Recovering swap files is best-effort. Vim attempts to validate fields
and skip corrupted sections, but the swap file format is intended for files
you trust. A crafted swap file may trigger parser bugs; such reports are
treated as robustness issues rather than security vulnerabilities.
ENCRYPTION AND THE SWAP FILE *:recover-crypt*
+47 -32
View File
@@ -80,9 +80,10 @@ The following command line arguments are available:
*--clientserver*
--clientserver {method} Use the specified method {method} as the
backend for clientserver functionality. Can
either be "socket" or "x11".
either be "socket", "x11", or "mswin".
{only available when compiled with both |+X11|
and |+socketserver| features}
and |+socketserver| features, or
|+socketserver| on MS-Windows}
Examples ~
@@ -221,12 +222,16 @@ When using gvim, the --remote-wait only works properly this way: >
<
==============================================================================
4. Socket server specific items *socketserver-clientserver*
*E1563* *E1564* *E1565* *E1566* *E1567*
*E1564* *E1565* *E1566*
The communication between client and server is done using Unix domain sockets.
These sockets are either placed in these directories in the following order of
NOTE: Vim version before patch 9.2.511 use a different socketserver backend
which is incompatible with the new one, which is based on channels and JSON.
The communication between client and server is done using channels internally.
When using the traditional/generic clientserver naming (only available on
Unix), sockets are placed in these directories in the following order of
availability:
1. "$XDG_RUTIME_DIR/vim" if $XDG_RUNTIME_DIR is set in the environment.
1. "$XDG_RUNTIME_DIR/vim" if $XDG_RUNTIME_DIR is set in the environment.
2. "$TMPDIR/vim-[uid]", where "[uid]" is the uid of the user. This
directory will have the access permissions set to 700 so only the user
can read or write from/to it. If $TMPDIR is not set, "/tmp" is used.
@@ -238,46 +243,56 @@ absolute or relative path. If the server id starts with either a "/"
Otherwise the server id will be the filename of the socket which will be
placed in the above common directories. Note that a server id/name can only
contain slashes "/" if it is taken as a path, so names such as "abc/dir" will
be invalid.
be invalid. This feature is only available on Unix.
Socket server functionality is available in both GTK GUI and terminal versions
of Vim. Unless Vim is compiled with |+autoservername| feature, the socket
server will have to started explicitly, just like X11, even in the GUI.
*socketserver-address*
In addition, the socketserver can also be created as a |channel-address|. To
do this, prefix the address with "channel:" (which will be ignored). This is
available on both Unix and MS-Windows, and is the only available naming for the
socketserver backend on Windows. However, note that |ch_listen()|
restrictions apply, meaning only port numbers can be used for TCP sockets.
If the name is prefixed with "name:", then the legacy servername behaviour is
used, so "name:VIM" is the same as "VIM".
Unless Vim is compiled with |+autoservername| feature, the socket server will
have to started explicitly, similar to X11. This is unless a X11 GUI Vim is
being used.
If Vim crashes or does not exit cleanly, the socket server will not remove the
socket file and it will be left around. This is generally not a problem,
because if a socket name is taken, Vim checks if the socket in its place is
dead (not attached to any process), and can replace it instead of finding a
new name.
To send commands to a Vim socket server from another application, read the
source file src/os_unix.c, there is detailed description of the protocol used.
new name. This is only relevant for Unix.
*socketserver-differences*
Most of the functionality is the same as X11, however unlike X11, where the
client does not need to be a server in order to communicate with another
server, the socket server requires the server to be running even as a client.
The exception is |serverlist()| or the |--serverlist| argument, which does not
require the server to be running.
Most of the functionality is the same as the other clientserver backends.
Additionally, the server id or client id will not be a number like X11 or
However, the server id or client id will not be a number like X11 or
MS-Windows (shown in hex representation), instead it is the absolute path to
the socket. This can be seen via the |v:servername| variable.
the socket. This can be seen via the |v:servername| variable. If the name is
a channel address, then it will be the address with the "a/" prefix as well.
The |--serverlist| argument will act just like X11, however it only checks the
given common directories above. If a custom path is used for a socket, it
will not be detected, such as a path either not in $XDG_RUNTIME_DIR or
<$TMPDIR or /tmp>/vim of the |--serverlist| Vim process.
Note when using |--remote-wait|, the client id will look like "t/<some
number>". This naming is specifically for this command, and attempting to use
it as an address will fail.
If you have both |+socketserver| and |+X11| compiled, you will need to add
|--clientserver| set to "socket" in combination with |--serverlist| to list
the available servers. You cannot list both types of backends in one command.
If on Unix, the |--serverlist| argument will act just like X11, however it
only checks the given common directories above. If a custom path is used for
a socket, it will not be detected, such as a path either not in
$XDG_RUNTIME_DIR or <$TMPDIR or /tmp>/vim of the |--serverlist| Vim process.
If on MS-Windows, then the |--serverlist| argument will output nothing.
The |+socketserver| feature is automatically enabled when on Unix or
MS-Windows, and the |+channel| feature is enabled
*socketserver-x11*
If Vim is compiled with both |+X11| and |+socketserver|, then deciding which
backend to use is done at startup time, via the |--clientserver| argument. By
default if it is not specified, then X11 will be used. A Vim instance using a
socket server cannot communicate with one using X11.
If Vim is compiled with |+socketserver| and another clientserver backend, then
deciding which backend to use is done at startup time, via the
|--clientserver| argument. By default if it is not specified, then the native
backend (X11 or MS-Window messages) will be used, if available. A Vim
instance using a socket server cannot communicate with one using another
clientserver backend.
==============================================================================
5. MacVim specific items *macvim-clientserver*
+4 -1
View File
@@ -1,4 +1,4 @@
*repeat.txt* For Vim version 9.2. Last change: 2026 Feb 14
*repeat.txt* For Vim version 9.2. Last change: 2026 May 31
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -454,6 +454,9 @@ For writing a Vim script, see chapter 41 of the user manual |usr_41.txt|.
nested ":try"s in the script. The outermost ":endtry"
then stops sourcing the script.
In |Vim9| script `:finish` cannot be shortened, to
improve script readability.
All commands and command sequences can be repeated by putting them in a named
register and then executing it. There are two ways to get the commands in the
register:
+6 -1
View File
@@ -1,4 +1,4 @@
*spell.txt* For Vim version 9.2. Last change: 2026 Feb 14
*spell.txt* For Vim version 9.2. Last change: 2026 May 23
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -562,6 +562,11 @@ then Vim will try to guess.
avoid running out of memory compression will be done
now and then. This can be tuned with the 'mkspellmem'
option.
*E1578*
There is a limit on how many postponed prefix and
compound flags can be stored for one word. Reduce the
number of affix/compound flags on a word in the .dic
file that exceeds it.
After the spell file was written and it was being used
in a buffer it will be reloaded automatically.
+25 -1
View File
@@ -1,4 +1,4 @@
*starting.txt* For Vim version 9.2. Last change: 2026 Mar 17
*starting.txt* For Vim version 9.2. Last change: 2026 Jun 02
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -642,6 +642,12 @@ a slash. Thus "-R" means recovery and "-/R" readonly.
of the output is: >
WID: 12345\n
--display {display} *--display*
Run Vim on {display}, connecting to that X server instead of
the one in $DISPLAY. The "--display" long form is accepted
only by the GTK+ 2 or GTK+ 3 GUI, see also |-display|.
{only available with the |+xterm_clipboard| feature}
--role {role} *--role*
GTK+ 2 GUI only. Set the role of the main window to {role}.
The window role can be used by a window manager to uniquely
@@ -1574,6 +1580,24 @@ Session. You could have several Session files, one for each project you are
working on. Viminfo and Session files together can be used to effectively
enter Vim and directly start working in your desired setup. |session-file|
*viminfo-security*
A viminfo file written by Vim is plain text and contains Vim expressions for
|List|, |Dictionary| and |Tuple| values. When "!" is in 'viminfo' at the time
Vim processes the file as a viminfo file, those expressions are evaluated.
The default value of 'viminfo' does not include "!", so by default no
expression evaluation happens.
Opening a viminfo file in a buffer (e.g. with |:edit|) is harmless; Vim only
displays the file contents. The risk is letting Vim process an untrusted file
through the viminfo machinery, which happens when:
- |:rviminfo| is used on the file, or
- 'viminfofile' is set to point at it, or
- the file is placed at the path Vim already reads as viminfo
|viminfo-file-name|
In any of those cases, do not have "!" in 'viminfo' if you do not trust it.
*viminfo-read*
When Vim is started and the 'viminfo' option is non-empty, the contents of
the viminfo file are read and the info can be used in the appropriate places.
+58 -20
View File
@@ -1,4 +1,4 @@
*syntax.txt* For Vim version 9.2. Last change: 2026 Mar 22
*syntax.txt* For Vim version 9.2. Last change: 2026 Jun 01
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -402,9 +402,8 @@ the desired value, or restored to their default by removing the variable using
Remarks:
- Some truly ancient browsers may not show the background colors.
- From most browsers you can also print the file (in color)!
- The latest TOhtml may actually work with older versions of Vim, but some
features such as conceal support will not function, and the colors may be
incorrect for an old Vim without GUI support compiled in.
- Colors may be incorrect for Vim without GUI support compiled in.
- The latest TOhtml requires Vim 9.1 or later.
Here is an example how to run the script over all .c and .h files from a
Unix shell: >
@@ -849,6 +848,19 @@ ADA
See |ft-ada-syntax|
ALGOL 68 *algol68* *ft-algol68-syntax*
This syntax file currently targets the Algol 68 Genie project using the
default UPPER stropping regime. It should also be usable in other
environments using the UPPER stropping regime, though somewhat less complete.
Highlighting can be further configured with the following variables.
Variable Highlight ~
*algol68_no_preludes* no prelude identifiers, procedures or
operators
ANT *ant.vim* *ft-ant-syntax*
The ant syntax file provides syntax highlighting for javascript and python
@@ -1248,6 +1260,7 @@ cpp_no_cpp11 don't highlight C++11 standard items
cpp_no_cpp14 don't highlight C++14 standard items
cpp_no_cpp17 don't highlight C++17 standard items
cpp_no_cpp20 don't highlight C++20 standard items
cpp_no_cpp23 don't highlight C++23 standard items
CSH *csh.vim* *ft-csh-syntax*
@@ -5978,7 +5991,14 @@ EndOfBuffer Filler lines (~) after the last line in the buffer.
*hl-ErrorMsg*
ErrorMsg Error messages on the command line.
*hl-VertSplit*
VertSplit Column separating vertically split windows.
VertSplit Column separating vertically split windows that is adjacent
to the current window. Drawn with the "vert" item of
'fillchars'.
*hl-VertSplitNC*
VertSplitNC Column separating vertically split windows where neither
adjacent window is the current window. Drawn with the
"vert" item of 'fillchars'.
By default, highlighted like |hl-VertSplit|.
*hl-Folded*
Folded Line used for closed folds.
*hl-FoldColumn*
@@ -6056,6 +6076,18 @@ PmenuShadow Popup menu: Used for shadow.
ComplMatchIns Matched text of the currently inserted completion.
*hl-PreInsert*
PreInsert Text inserted when "preinsert" is in 'completeopt'.
*hl-Popup*
Popup Popup window body, used when neither the popup's 'wincolor'
nor explicit "highlight" argument is set. Linked to |hl-Pmenu|
by default.
*hl-PopupBorder*
PopupBorder Popup window border characters, used when "borderhighlight" is
not set and the popup's 'wincolor' is also not set.
Linked to |hl-Pmenu| by default.
*hl-PopupTitle*
PopupTitle Popup window title, used when "borderhighlight" is not set and
the popup's 'wincolor' is also not set. Linked to
|hl-Pmenu| by default.
*hl-PopupSelected*
PopupSelected Popup window created with |popup_menu()|. Linked to
|hl-PmenuSel| by default.
@@ -6094,16 +6126,23 @@ SpellRare Word that is recognized by the spellchecker as one that is
hardly ever used. |spell|
This will be combined with the highlighting used otherwise.
*hl-StatusLine*
StatusLine Status line of current window.
StatusLine Status line of current window. The highlight at the status
line's edge (StatusLine, or any %#... / %N* in 'statusline')
also extends into the adjacent vertical separator cell when
the status lines are connected (The "vert" in 'fillchars' is
not being drawn).
*hl-StatusLineNC*
StatusLineNC status lines of not-current windows
StatusLineNC status lines of not-current windows. Like |hl-StatusLine|,
the edge highlight also extends into the adjacent vertical
separator cell.
Note: If this is equal to "StatusLine", Vim will use "^^^" in
the status line of the current window.
*hl-StatusLineTerm*
StatusLineTerm Status line of current window, if it is a |terminal| window.
*hl-StatusLineTermNC*
StatusLineTermNC Status lines of not-current windows that is a
|terminal| window.
StatusLineTermNC
Status lines of not-current windows that is a |terminal|
window.
*hl-TabLine*
TabLine Tab pages line, not active tab page label.
*hl-TabLineFill*
@@ -6123,18 +6162,19 @@ Title Titles for output from ":set all", ":autocmd" etc.
*hl-TitleBar*
TitleBar Title bar for the active Gui's window.
This feature is supported only in the MS-Windows GUI.
See |gui-w32-title-bar| for details
See |gui-w32-title-bar| for details.
Only the `guibg` and `guifg` highlight arguments are effective.
*hl-TitleBarNC*
TitleBarNC Title bar for inactive Gui's window.
This feature is supported only in the MS-Windows GUI.
See |gui-w32-title-bar| for details
See |gui-w32-title-bar| for details.
Only the `guibg` and `guifg` highlight arguments are effective.
*hl-Visual*
Visual Visual mode selection.
*hl-VisualNOS*
VisualNOS Visual mode selection when vim is "Not Owning the Selection".
Only X11 Gui's |gui-x11| and |xterm-clipboard| supports this.
Only X11 Gui's |gui-x11|, |xterm-clipboard| and
|wayland-selections| supports this.
*hl-WarningMsg*
WarningMsg Warning messages.
*hl-WildMenu*
@@ -6154,10 +6194,9 @@ Menu Current font, background and foreground colors of the menus.
Also used for the toolbar.
Applicable highlight arguments: font, guibg, guifg.
NOTE: For Motif the font argument actually
specifies a fontset at all times, no matter if 'guifontset' is
empty, and as such it is tied to the current |:language| when
set.
NOTE: For Motif the font argument actually specifies a fontset
at all times, no matter if 'guifontset' is empty, and as such
it is tied to the current |:language| when set.
*hl-Scrollbar*
Scrollbar Current background and foreground of the main window's
@@ -6168,10 +6207,9 @@ Scrollbar Current background and foreground of the main window's
Tooltip Current font, background and foreground of the tooltips.
Applicable highlight arguments: font, guibg, guifg.
NOTE: For Motif the font argument actually
specifies a fontset at all times, no matter if 'guifontset' is
empty, and as such it is tied to the current |:language| when
set.
NOTE: For Motif the font argument actually specifies a fontset
at all times, no matter if 'guifontset' is empty, and as such
it is tied to the current |:language| when set.
==============================================================================
15. Linking groups *:hi-link* *:highlight-link* *E412* *E413*
+37 -1
View File
@@ -1,4 +1,4 @@
*tabpage.txt* For Vim version 9.2. Last change: 2026 Feb 14
*tabpage.txt* For Vim version 9.2. Last change: 2026 May 04
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -482,6 +482,42 @@ The vertical separator character is taken from "tpl_vert" in 'fillchars'.
You can customize the appearance of the tab page labels using the highlight
groups: |hl-TabPanel| |hl-TabPanelSel| |hl-TabPanelFill|
SCROLLING IN THE TABPANEL *tabpanel-scroll*
When the total height of the tab page list exceeds the visible screen height,
mouse wheel events over the tabpanel area scroll the tab page list up or down.
The scroll step follows the 'mousescroll' setting. Wheel events inside the
tabpanel area are consumed by the tabpanel and do not trigger
|<ScrollWheelUp>| or |<ScrollWheelDown>| mappings.
The current tab page is always brought into view: when the selected tab page
changes (by |gt|, |gT|, |:tabnext| etc.), the panel scrolls so the current
entry is visible.
To show a vertical scrollbar indicating the current scroll position, add
"scrollbar" to 'tabpanelopt': >
:set tabpanelopt+=scrollbar
A one-column scrollbar is always displayed at the right edge of the tabpanel,
regardless of the "align:" setting in 'tabpanelopt'. Clicking on the
scrollbar column moves the thumb to the click position, and the thumb can be
dragged to scroll continuously.
The scrollbar uses the |hl-PmenuSbar| highlight group for the track and
|hl-PmenuThumb| for the thumb.
The scroll offset is remembered across redraws.
MOUSE CLICKS IN THE TABPANEL *tabpanel-mouse*
A left click on a row in the tabpanel selects the tab page that the row
belongs to. Unlike the tabline, a double click in the tabpanel does not open
a new, empty tab page; it is treated the same as a single click.
For finer-grained control, the 'tabpanel' value may contain |stl-%[FuncName]|
click regions. Clicks on those regions are dispatched to the callback
function instead of falling through to tab page selection.
==============================================================================
6. Setting 'guitablabel' *setting-guitablabel*
+36 -15
View File
@@ -542,6 +542,7 @@ $quote eval.txt /*$quote*
'ml' options.txt /*'ml'*
'mle' options.txt /*'mle'*
'mls' options.txt /*'mls'*
'mlst' options.txt /*'mlst'*
'mm' options.txt /*'mm'*
'mmd' options.txt /*'mmd'*
'mmp' options.txt /*'mmp'*
@@ -551,6 +552,7 @@ $quote eval.txt /*$quote*
'modeline' options.txt /*'modeline'*
'modelineexpr' options.txt /*'modelineexpr'*
'modelines' options.txt /*'modelines'*
'modelinestrict' options.txt /*'modelinestrict'*
'modifiable' options.txt /*'modifiable'*
'modified' options.txt /*'modified'*
'mopt' options.txt /*'mopt'*
@@ -723,10 +725,12 @@ $quote eval.txt /*$quote*
'nomh' options.txt /*'nomh'*
'noml' options.txt /*'noml'*
'nomle' options.txt /*'nomle'*
'nomlst' options.txt /*'nomlst'*
'nommta' options.txt /*'nommta'*
'nomod' options.txt /*'nomod'*
'nomodeline' options.txt /*'nomodeline'*
'nomodelineexpr' options.txt /*'nomodelineexpr'*
'nomodelinestrict' options.txt /*'nomodelinestrict'*
'nomodifiable' options.txt /*'nomodifiable'*
'nomodified' options.txt /*'nomodified'*
'nomore' options.txt /*'nomore'*
@@ -799,6 +803,7 @@ $quote eval.txt /*$quote*
'nota' options.txt /*'nota'*
'notagbsearch' options.txt /*'notagbsearch'*
'notagrelative' options.txt /*'notagrelative'*
'notagsecure' options.txt /*'notagsecure'*
'notagstack' options.txt /*'notagstack'*
'notbi' options.txt /*'notbi'*
'notbidi' options.txt /*'notbidi'*
@@ -817,6 +822,7 @@ $quote eval.txt /*$quote*
'noto' options.txt /*'noto'*
'notop' options.txt /*'notop'*
'notr' options.txt /*'notr'*
'notsc' options.txt /*'notsc'*
'nottimeout' options.txt /*'nottimeout'*
'nottybuiltin' options.txt /*'nottybuiltin'*
'nottyfast' options.txt /*'nottyfast'*
@@ -967,6 +973,7 @@ $quote eval.txt /*$quote*
'scrollfocus' options.txt /*'scrollfocus'*
'scrolljump' options.txt /*'scrolljump'*
'scrolloff' options.txt /*'scrolloff'*
'scrolloffpad' options.txt /*'scrolloffpad'*
'scrollopt' options.txt /*'scrollopt'*
'scs' options.txt /*'scs'*
'sect' options.txt /*'sect'*
@@ -1025,6 +1032,7 @@ $quote eval.txt /*$quote*
'so' options.txt /*'so'*
'softtabstop' options.txt /*'softtabstop'*
'sol' options.txt /*'sol'*
'sop' options.txt /*'sop'*
'sourceany' vi_diff.txt /*'sourceany'*
'sp' options.txt /*'sp'*
'spc' options.txt /*'spc'*
@@ -1241,6 +1249,7 @@ $quote eval.txt /*$quote*
'taglength' options.txt /*'taglength'*
'tagrelative' options.txt /*'tagrelative'*
'tags' options.txt /*'tags'*
'tagsecure' options.txt /*'tagsecure'*
'tagstack' options.txt /*'tagstack'*
'tal' options.txt /*'tal'*
'tb' options.txt /*'tb'*
@@ -1293,6 +1302,7 @@ $quote eval.txt /*$quote*
'transparency' options.txt /*'transparency'*
'trz' options.txt /*'trz'*
'ts' options.txt /*'ts'*
'tsc' options.txt /*'tsc'*
'tsl' options.txt /*'tsl'*
'tsr' options.txt /*'tsr'*
'tsrfu' options.txt /*'tsrfu'*
@@ -1579,7 +1589,6 @@ $quote eval.txt /*$quote*
+vtp various.txt /*+vtp*
+wayland various.txt /*+wayland*
+wayland_clipboard various.txt /*+wayland_clipboard*
+wayland_focus_steal various.txt /*+wayland_focus_steal*
+wildignore various.txt /*+wildignore*
+wildmenu various.txt /*+wildmenu*
+windows various.txt /*+windows*
@@ -1605,6 +1614,7 @@ $quote eval.txt /*$quote*
--clean starting.txt /*--clean*
--clientserver remote.txt /*--clientserver*
--cmd starting.txt /*--cmd*
--display starting.txt /*--display*
--echo-wid starting.txt /*--echo-wid*
--gui-dialog-file starting.txt /*--gui-dialog-file*
--help starting.txt /*--help*
@@ -4606,12 +4616,9 @@ E1315 vim9class.txt /*E1315*
E1316 vim9class.txt /*E1316*
E1317 vim9class.txt /*E1317*
E1318 vim9class.txt /*E1318*
E1319 eval.txt /*E1319*
E132 userfunc.txt /*E132*
E1320 eval.txt /*E1320*
E1321 eval.txt /*E1321*
E1322 eval.txt /*E1322*
E1323 eval.txt /*E1323*
E1324 eval.txt /*E1324*
E1325 vim9class.txt /*E1325*
E1326 vim9class.txt /*E1326*
@@ -4688,15 +4695,12 @@ E1391 eval.txt /*E1391*
E1392 eval.txt /*E1392*
E1393 vim9class.txt /*E1393*
E1394 vim9class.txt /*E1394*
E1395 vim9class.txt /*E1395*
E1395 vim9.txt /*E1395*
E1396 vim9class.txt /*E1396*
E1397 vim9class.txt /*E1397*
E1398 vim9class.txt /*E1398*
E1399 vim9class.txt /*E1399*
E140 message.txt /*E140*
E1400 vim9class.txt /*E1400*
E1401 vim9class.txt /*E1401*
E1402 vim9class.txt /*E1402*
E1403 vim9class.txt /*E1403*
E1404 vim9class.txt /*E1404*
E1405 vim9class.txt /*E1405*
@@ -4812,11 +4816,9 @@ E156 sign.txt /*E156*
E1560 vim9.txt /*E1560*
E1561 vim9.txt /*E1561*
E1562 options.txt /*E1562*
E1563 remote.txt /*E1563*
E1564 remote.txt /*E1564*
E1565 remote.txt /*E1565*
E1566 remote.txt /*E1566*
E1567 remote.txt /*E1567*
E1568 options.txt /*E1568*
E1569 builtin.txt /*E1569*
E157 sign.txt /*E157*
@@ -4826,6 +4828,9 @@ E1572 options.txt /*E1572*
E1573 channel.txt /*E1573*
E1574 channel.txt /*E1574*
E1575 builtin.txt /*E1575*
E1576 tagsrch.txt /*E1576*
E1577 options.txt /*E1577*
E1578 spell.txt /*E1578*
E158 sign.txt /*E158*
E159 sign.txt /*E159*
E16 cmdline.txt /*E16*
@@ -5315,7 +5320,6 @@ E610 editing.txt /*E610*
E611 eval.txt /*E611*
E612 sign.txt /*E612*
E613 print.txt /*E613*
E614 builtin.txt /*E614*
E616 builtin.txt /*E616*
E617 options.txt /*E617*
E618 print.txt /*E618*
@@ -6062,6 +6066,8 @@ TextChanged autocmd.txt /*TextChanged*
TextChangedI autocmd.txt /*TextChangedI*
TextChangedP autocmd.txt /*TextChangedP*
TextChangedT autocmd.txt /*TextChangedT*
TextPutPost autocmd.txt /*TextPutPost*
TextPutPre autocmd.txt /*TextPutPre*
TextYankPost autocmd.txt /*TextYankPost*
Transact-SQL ft_sql.txt /*Transact-SQL*
Tuple eval.txt /*Tuple*
@@ -6328,6 +6334,8 @@ added-win32-GUI version5.txt /*added-win32-GUI*
aff-dic-format spell.txt /*aff-dic-format*
after-directory options.txt /*after-directory*
aleph options.txt /*aleph*
algol68 syntax.txt /*algol68*
algol68_no_preludes syntax.txt /*algol68_no_preludes*
alt intro.txt /*alt*
alt-input debugger.txt /*alt-input*
alt-movement gui_mac.txt /*alt-movement*
@@ -7619,6 +7627,7 @@ ft-ada-options ft_ada.txt /*ft-ada-options*
ft-ada-plugin ft_ada.txt /*ft-ada-plugin*
ft-ada-syntax ft_ada.txt /*ft-ada-syntax*
ft-ada-variables ft_ada.txt /*ft-ada-variables*
ft-algol68-syntax syntax.txt /*ft-algol68-syntax*
ft-ant-syntax syntax.txt /*ft-ant-syntax*
ft-apache-syntax syntax.txt /*ft-apache-syntax*
ft-arduino-plugin filetype.txt /*ft-arduino-plugin*
@@ -7841,6 +7850,7 @@ ft_hare.txt ft_hare.txt /*ft_hare.txt*
ft_mp.txt ft_mp.txt /*ft_mp.txt*
ft_ps1.txt ft_ps1.txt /*ft_ps1.txt*
ft_raku.txt ft_raku.txt /*ft_raku.txt*
ft_recommended_style usr_51.txt /*ft_recommended_style*
ft_rust.txt ft_rust.txt /*ft_rust.txt*
ft_sql.txt ft_sql.txt /*ft_sql.txt*
ftdetect filetype.txt /*ftdetect*
@@ -8072,7 +8082,6 @@ g:netrw_ssh_browse_reject pi_netrw.txt /*g:netrw_ssh_browse_reject*
g:netrw_ssh_cmd pi_netrw.txt /*g:netrw_ssh_cmd*
g:netrw_sshport pi_netrw.txt /*g:netrw_sshport*
g:netrw_timefmt pi_netrw.txt /*g:netrw_timefmt*
g:netrw_tmpfile_escape pi_netrw.txt /*g:netrw_tmpfile_escape*
g:netrw_uid pi_netrw.txt /*g:netrw_uid*
g:netrw_use_noswf pi_netrw.txt /*g:netrw_use_noswf*
g:netrw_use_nt_rcp pi_netrw.txt /*g:netrw_use_nt_rcp*
@@ -8356,6 +8365,7 @@ gui-font gui.txt /*gui-font*
gui-fontwide gui.txt /*gui-fontwide*
gui-footer debugger.txt /*gui-footer*
gui-fork gui_x11.txt /*gui-fork*
gui-fullscreen gui.txt /*gui-fullscreen*
gui-functions usr_41.txt /*gui-functions*
gui-gnome gui_x11.txt /*gui-gnome*
gui-gnome-session gui_x11.txt /*gui-gnome-session*
@@ -8386,7 +8396,6 @@ gui-vert-scroll gui.txt /*gui-vert-scroll*
gui-w32 gui_w32.txt /*gui-w32*
gui-w32-cmdargs gui_w32.txt /*gui-w32-cmdargs*
gui-w32-dialogs gui_w32.txt /*gui-w32-dialogs*
gui-w32-fullscreen gui_w32.txt /*gui-w32-fullscreen*
gui-w32-printing gui_w32.txt /*gui-w32-printing*
gui-w32-start gui_w32.txt /*gui-w32-start*
gui-w32-title-bar gui_w32.txt /*gui-w32-title-bar*
@@ -8562,8 +8571,11 @@ hl-PmenuSbar syntax.txt /*hl-PmenuSbar*
hl-PmenuSel syntax.txt /*hl-PmenuSel*
hl-PmenuShadow syntax.txt /*hl-PmenuShadow*
hl-PmenuThumb syntax.txt /*hl-PmenuThumb*
hl-Popup syntax.txt /*hl-Popup*
hl-PopupBorder syntax.txt /*hl-PopupBorder*
hl-PopupNotification syntax.txt /*hl-PopupNotification*
hl-PopupSelected syntax.txt /*hl-PopupSelected*
hl-PopupTitle syntax.txt /*hl-PopupTitle*
hl-PreInsert syntax.txt /*hl-PreInsert*
hl-Question syntax.txt /*hl-Question*
hl-QuickFixLine syntax.txt /*hl-QuickFixLine*
@@ -8597,6 +8609,7 @@ hl-User1 syntax.txt /*hl-User1*
hl-User1..9 syntax.txt /*hl-User1..9*
hl-User9 syntax.txt /*hl-User9*
hl-VertSplit syntax.txt /*hl-VertSplit*
hl-VertSplitNC syntax.txt /*hl-VertSplitNC*
hl-Visual syntax.txt /*hl-Visual*
hl-VisualNOS syntax.txt /*hl-VisualNOS*
hl-WarningMsg syntax.txt /*hl-WarningMsg*
@@ -9951,6 +9964,7 @@ popt-option print.txt /*popt-option*
popup popup.txt /*popup*
popup-buffer popup.txt /*popup-buffer*
popup-callback popup.txt /*popup-callback*
popup-clipwindow popup.txt /*popup-clipwindow*
popup-close popup.txt /*popup-close*
popup-examples popup.txt /*popup-examples*
popup-filter popup.txt /*popup-filter*
@@ -10492,6 +10506,7 @@ shm-q options.txt /*shm-q*
shm-r options.txt /*shm-r*
shm-s options.txt /*shm-s*
shm-t options.txt /*shm-t*
shm-u options.txt /*shm-u*
shm-w options.txt /*shm-w*
shm-x options.txt /*shm-x*
short-name-changed version4.txt /*short-name-changed*
@@ -10534,6 +10549,7 @@ slow-fast-terminal term.txt /*slow-fast-terminal*
slow-start starting.txt /*slow-start*
slow-terminal term.txt /*slow-terminal*
socket-interface channel.txt /*socket-interface*
socketserver-address remote.txt /*socketserver-address*
socketserver-clientserver remote.txt /*socketserver-clientserver*
socketserver-differences remote.txt /*socketserver-differences*
socketserver-name remote.txt /*socketserver-name*
@@ -10718,7 +10734,9 @@ static-tag tagsrch.txt /*static-tag*
status-line windows.txt /*status-line*
statusmsg-variable eval.txt /*statusmsg-variable*
stl-%! options.txt /*stl-%!*
stl-%0{ options.txt /*stl-%0{*
stl-%@ options.txt /*stl-%@*
stl-%[FuncName] options.txt /*stl-%[FuncName]*
stl-%{ options.txt /*stl-%{*
str2blob() builtin.txt /*str2blob()*
str2float() builtin.txt /*str2float()*
@@ -11055,6 +11073,10 @@ tabpagebuflist() builtin.txt /*tabpagebuflist()*
tabpagenr() builtin.txt /*tabpagenr()*
tabpagewinnr() builtin.txt /*tabpagewinnr()*
tabpanel tabpage.txt /*tabpanel*
tabpanel-mouse tabpage.txt /*tabpanel-mouse*
tabpanel-scroll tabpage.txt /*tabpanel-scroll*
tabpanel_getinfo() builtin.txt /*tabpanel_getinfo()*
tabpanel_scroll() builtin.txt /*tabpanel_scroll()*
tag tagsrch.txt /*tag*
tag-! tagsrch.txt /*tag-!*
tag-binary-search tagsrch.txt /*tag-binary-search*
@@ -11920,6 +11942,7 @@ viminfo-r options.txt /*viminfo-r*
viminfo-read starting.txt /*viminfo-read*
viminfo-read-write starting.txt /*viminfo-read-write*
viminfo-s options.txt /*viminfo-s*
viminfo-security starting.txt /*viminfo-security*
viminfo-timestamp starting.txt /*viminfo-timestamp*
viminfo-write starting.txt /*viminfo-write*
vimrc starting.txt /*vimrc*
@@ -11971,8 +11994,6 @@ waittime channel.txt /*waittime*
warningmsg-variable eval.txt /*warningmsg-variable*
wayland wayland.txt /*wayland*
wayland-and-x11 wayland.txt /*wayland-and-x11*
wayland-focus-steal wayland.txt /*wayland-focus-steal*
wayland-gnome wayland.txt /*wayland-gnome*
wayland-gui wayland.txt /*wayland-gui*
wayland-persist wayland.txt /*wayland-persist*
wayland-primary-selection wayland.txt /*wayland-primary-selection*
+8 -3
View File
@@ -1,4 +1,4 @@
*tagsrch.txt* For Vim version 9.2. Last change: 2026 Feb 14
*tagsrch.txt* For Vim version 9.2. Last change: 2026 May 31
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -579,6 +579,10 @@ ctags).
have an absolute or relative path. It may contain environment
variables and wildcards (although the use of wildcards is
doubtful). It cannot contain a <Tab>.
*E1576*
Using a remote file via network protocol (e.g. using
http://remote/file.txt) is not allowed unless 'tagsecure'
is unset.
{tagaddress} The Ex command that positions the cursor on the tag. It can
be any Ex command, although restrictions apply (see
|tag-security|). Posix only allows line numbers and search
@@ -829,8 +833,9 @@ CTRL-W i Open a new window, with the cursor on the first line
Like `[D` and `]D`, but search in [range] lines
(default: whole file).
See |:search-args| for [/] and [!].
Note that `:dl` works like `:delete` with the "l"
flag, not `:dlist`.
Note: In legacy Vim script, `:dl` works like
`:delete` with the "l" flag, not `:dlist`, whereas in
|Vim9| script `:dl` does work like `:dlist`.
*[_CTRL-D*
[ CTRL-D Jump to the first macro definition that contains the
+14
View File
@@ -965,6 +965,20 @@ term_start({cmd} [, {options}]) *term_start()*
input and one output handle, with no separate handle for
stderr.
Note: term_start() always uses RAW mode for its callbacks.
"out_cb" and "err_cb" receive the raw chunk of data as read
from the OS. A single callback invocation may contain
multiple lines separated by NL, and (for stdout via a pty)
each line may have a trailing CR from the line discipline
(ONLCR). If per-line handling is desired, the callback must
split "msg" on NL and strip the trailing CR itself.
Example: >
func Handle(ch, msg)
for line in split(a:msg, "\n")
echom substitute(line, '\r$', '', '')
endfor
endfunc
<
There are extra options:
"term_name" name to use for the buffer name, instead
of the command name.
+4 -2
View File
@@ -1,4 +1,4 @@
*textprop.txt* For Vim version 9.2. Last change: 2026 Apr 07
*textprop.txt* For Vim version 9.2. Last change: 2026 May 31
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -177,7 +177,9 @@ prop_add({lnum}, {col}, {props})
When omitted "truncate" is used.
Note that this applies to the individual text
property, the 'wrap' option sets the overall
behavior
behavior. "wrap" only takes effect when the
'wrap' option is set; with 'nowrap' the text
is truncated at the right edge of the window.
All fields except "type" are optional.
It is an error when both "length" and "end_lnum" or "end_col"
+1 -4
View File
@@ -1,4 +1,4 @@
*todo.txt* For Vim version 9.2. Last change: 2026 Feb 14
*todo.txt* For Vim version 9.2. Last change: 2026 Apr 29
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -421,8 +421,6 @@ more information.
Add an option to restrict 'incsearch' to not scroll the view. (Tavis Ormandy)
Remove SPACE_IN_FILENAME ? It is only used for completion.
When 'term' starts with "foot" then default t_TI and t_TE to the values used
for the builtin xterm termcap.
@@ -2115,7 +2113,6 @@ es_ES.utf-8" gives an error and doesn't switch messages. (Dominique Pelle,
When $HOME contains special characters, such as a comma, escape them when used
in an option. (Michael Hordijk, 2009 May 5)
Turn "esc" argument of expand_env_esc() into string of chars to be escaped.
Should make 'ignorecase' global-local, so that it makes sense setting it from
a modeline.
+16 -6
View File
@@ -1,4 +1,4 @@
*userfunc.txt* For Vim version 9.2. Last change: 2026 Feb 14
*userfunc.txt* For Vim version 9.2. Last change: 2026 May 31
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -27,13 +27,13 @@ make them script-local. If you do use a global function then avoid obvious,
short names. A good habit is to start the function name with the name of the
script, e.g., "HTMLcolor()".
In legacy script it is also possible to use curly braces, see
In legacy Vim script it is also possible to use curly braces, see
|curly-braces-names|.
The |autoload| facility is useful to define a function only when it's called.
*local-function*
A function local to a legacy script must start with "s:". A local script
A function local to a legacy Vim script must start with "s:". A local script
function can only be called from within the script and from functions, user
commands and autocommands defined in the script. It is also possible to call
the function from a mapping defined in the script, but then |<SID>| must be
@@ -195,9 +195,19 @@ See |:verbose-cmd| for more information.
When a function ends without an explicit ":return",
the number 0 is returned.
In a :def function *E1095* is given if unreachable
code follows after the `:return`.
In legacy script there is no check for unreachable
In |Vim9| script:
- `:return` cannot be shortened, and
- *E1095* is given if unreachable code follows after
the `:return`. For example:
>vim9
vim9script
var L: func = (): bool => {
return false
echo 'no' # E1095: Unreachable code after :return
}
echo L()
<
In legacy Vim script there is no check for unreachable
lines, thus there is no warning if commands follow
`:return`. Also, there is no check if the following
line contains a valid command. Forgetting the line
+11 -1
View File
@@ -1,4 +1,4 @@
*usr_05.txt* For Vim version 9.2. Last change: 2026 Feb 14
*usr_05.txt* For Vim version 9.2. Last change: 2026 May 11
VIM USER MANUAL by Bram Moolenaar
@@ -509,6 +509,16 @@ To highlight in visual mode, use: >
To disable the effect of the plugin after it has been loaded: >
au! hlyank
Additionally, the plugin can also highlight regions that are put using the
|TextPutPost| autocommand. This is by default disabled and can be enabled
using: >
:let g:hlput_enable = v:true
<
The following configuration variables can be used are "g:hlput_hlgroup" and
"g:hlput_duration", which have the same effect as their yank counterparts: >
:let g:hlput_hlgroup = 'IncSearch'
:let g:hlput_duration = 300
------------------------------------------------------------------------------
Adding the osc52 package *osc52-install* *package-osc52*
------------------------------------------------------------------------------

Some files were not shown because too many files have changed in this diff Show More