aboutsummaryrefslogtreecommitdiff
path: root/runtime/pack
Commit message (Collapse)AuthorAge
* fix(lua): enable param-type-mismatch diagnosticLewis Russell2026-09-28
| | | | | | | | | Problem: Argument type mismatches are excluded from EmmyLua checks. Solution: Correct runtime annotations and calls, document local checker workarounds, and enable the diagnostic. AI-assisted
* fix(lua): enable unnecessary-assert diagnosticLewis Russell2026-09-28
| | | | AI-assisted
* fix(lua): enable assignment type checking in runtime codeLewis Russell2026-09-25
| | | | | | | | | | | Enable EmmyLua's assign-type-mismatch diagnostic after correcting the runtime annotations and assignments it flags. Correct option, tuple, and return types, and use separate locals when a value changes representation. Add guards and narrow casts where needed so the runtime passes the stricter check. Regenerate the affected docs. AI-assisted
* fix(lua): enable nil-safety diagnostics in runtime codeLewis Russell2026-09-25
| | | | | | | | | | | | Enable EmmyLua's need-check-nil diagnostic and resolve nullable values through more precise types, explicit invariants, and guards for missing runtime state. Keep analyzer-specific workarounds local and update the affected API documentation. Exclude the bundled re.lua from analysis so its nil-check warnings do not fail CI. AI-assisted
* fix(lua): generate explicit overloads for vim.fnLewis Russell2026-09-25
| | | | | | | | | | | | | | | | The generated vim.fn stubs represent overloads as repeated function declarations. EmmyLua merges their return types, so getline(lnum) is inferred as string|string[] even though it always returns a string. Generate one declaration with @overload annotations from the existing __N entries, while keeping separate Vimdoc signatures. Parenthesize the overload return list so types such as (0|-1)[] remain arrays. Correct getline()'s single-line and range signatures, and add typed getqflist() signatures for its entry-list and property-query forms. This lets callers infer quickfix results without local type overrides. AI-assisted
* fix(lua): add missing param annotations (#41911)Lewis Russell2026-09-15
|
* vim-patch:71a0e7c: runtime(netrw): netrw#fs#Glob() cannot list a remote ↵zeertzjq2026-09-11
| | | | | | | | | | | | | | | | | directory Problem: netrw#fs#Glob() calls s:NetrwRemoteListing() and uses s:THINLIST, which are script-local to autoload/netrw.vim and not visible in autoload/netrw/fs.vim. Listing a remote directory in the tree view fails with E117 and E121. Solution: Use netrw#Call() and netrw#Expose(), which exist to reach the script-local functions and variables of netrw.vim. closes: vim/vim#21259 https://github.com/vim/vim/commit/71a0e7ca13b3c5a4c260bb43bbe602c26049f160 Co-authored-by: Hirohito Higashi <h.east.727@gmail.com>
* build: enable more EmmyLua checksLewis Russell2026-09-09
| | | | | | | | | | Enable checks for unused code, deprecated calls, return types, and annotations. Fix the warnings and replace the deprecated highlight function. Keep exceptions where old APIs are still needed or the checker gets it wrong. AI-assisted
* build: enable more EmmyLua checksLewis Russell2026-09-08
| | | | | | | | | | | | | | | | - call-non-callable - missing-fields - redefined-label - redefined-local - undefined-field - unreachable-code Promote redefined-local and unreachable-code to warnings. Fix DOS line-ending handling for multiline semantic tokens, and support intersection types in the help parser. AI-assisted
* vim-patch:9.2.1045: runtime(netrw): raises E46 when changing directory fails ↵zeertzjq2026-09-08
| | | | | | | | | | | | | | | | | | | | | | (#41783) Problem: Netrw raises E46 when changing directory fails. Solution: Remove unused assignments to the read-only directory argument and cover both error-handling branches with a regression test (Qiming zhao). When :lcd fails with E472, s:NetrwLcd() assigns to a:newdir instead of returning -1. The fallback assignment also refers to dirname, which is undefined on this path. Neither assignment can update the caller's directory variable. Keep the existing option restoration and failure return while removing the invalid assignments. Supported by AI. closes: vim/vim#21226 https://github.com/vim/vim/commit/2f72e4c72f98a5760e2c783ab07f9865e91217a8 Co-authored-by: Qiming zhao <chemzqm@gmail.com>
* build: replace LuaLS with EmmyLuaLewis Russell2026-09-07
| | | | | | | | | | | | | | | Problem: LuaLS struggles with the generics used in Nvim's runtime, requiring broad diagnostic suppressions. Indexing is also slow. Solution: Use EmmyLua for type checks in the build and CI. It offers more sophisticated type checking, substantially better support for generics, and much better flow analysis. Correct the affected annotations. Use `@internal`, supported directly by EmmyLua, instead of `@nodoc` for shared internal declarations, and support it in the help parser. AI-assisted
* fix(cmdwin): allow a user to switch to other buffers #41199Rob Pilling2026-08-28
|
* vim-patch:9.2.0993: runtime(netrw): error when parent dir of g:netrw_home ↵zeertzjq2026-08-23
| | | | | | | | | | | doesn't exist Problem: netrw: error when parent dir of g:netrw_home doesn't exist. Solution: Use 'p' flag of mkdir() (zeertzjq). closes: vim/vim#21113 https://github.com/vim/vim/commit/ffce1ce58dd3d08110c35c8af61ad2555b344569
* vim-patch:9.2.0980: runtime(netrw): prioritize g:netrw_home on Neovimzeertzjq2026-08-23
| | | | | | | | | | | | | Problem: runtime(netrw): g:netrw_home not respected on Neovim Solution: prioritize g:netrw_home for bookmarks and history directory setting, add tests (J. Paulo Seibt) related: neovim/neovim@5a78c5b closes: vim/vim#21091 https://github.com/vim/vim/commit/4be03620b305282270e41643e5e860f95efa8f07 Co-authored-by: J. Paulo Seibt <jpseibt@gmail.com>
* vim-patch:2c0318d: runtime(doc): fix typo in netrw help file (#41228)zeertzjq2026-08-08
| | | | | | | closes: vim/vim#20968 https://github.com/vim/vim/commit/2c0318d2854418d26032352ab1152b598642e38a Co-authored-by: Rochish Manda <28740792+Rochish-Manda@users.noreply.github.com>
* vim-patch:e241ac0: runtime(zip): fix failure on Windows CIzeertzjq2026-07-31
| | | | | | | | | | | | | | | Problem: The zip autoload script aborts loading when the "zip" command is not available, so even read-only browsing of an archive fails with E117 (zip#Browse undefined) on systems that have "unzip" but not "zip" (e.g. the Windows CI runner). Regressed in b0e0b22. Solution: Drop the load-time executable gate and check each command per operation instead, so a missing "zip" only affects writing. Update the test to match the reworded message. https://github.com/vim/vim/commit/e241ac0a62b774763733f2ccac4040dfe8aafac8 Co-authored-by: Christian Brabandt <cb@256bit.org>
* vim-patch:b0e0b22: runtime(zip): Improve Compatibility for powershell 5 and ↵zeertzjq2026-07-31
| | | | | | | | | | | pwsh 7 related: vim/vim#20832 https://github.com/vim/vim/commit/b0e0b22535079e478c3acfb47a61709c3c59ff2d Co-authored-by: curbe454 <asu454@outlook.com> Co-Authored-By: curbe454 <asu454@outlook.com>
* refactor(zip)!: builtin zip.lua plugin #40846Barrett Ruth2026-07-29
| | | | | | | | | | Problem: The bundled `zip` plugin is implemented in Vimscript, making it harder to maintain and build on with Nvim's Lua runtime infrastructure. Solution: Add an opt-out `zip.lua` browser backed by `nvim.dir`, and disable the legacy Vimscript implementation by moving it to `pack/dist/opt/zip/`. Load it with `:packadd zip`.
* vim-patch:9.2.0840: [security]: code injection in netrw via bookmarkszeertzjq2026-07-24
| | | | | | | | | | | | | | | | | | | | | | Problem: [security]: code injection in netrw via bookmarks and history (David Carliez) Solution: Escape the '|' explicitly (Yasuhiro Matsumoto) The bookmark and history menu builders interpolate paths into :execute'd :menu commands using g:netrw_menu_escape, which did not escape the Ex command separator '|'. A crafted path could break out of the :menu command and run arbitrary Ex/shell commands when the menu was built or triggered. Add '|' to g:netrw_menu_escape for the menu names, escape the :e right-hand side with fnameescape(), and quote the netrw#MakeTgt() argument with string() instead of raw single-quote interpolation. Github Security Advisory: https://github.com/vim/vim/security/advisories/GHSA-rcr7-f3wr-22r2 https://github.com/vim/vim/commit/29c6fd090d4520592f8be7d9ec81190edf25ef69 Co-authored-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
* vim-patch:6e46829: runtime(netrw): fix E471 in Neovim when g:netrw_chgwin is ↵zeertzjq2026-07-22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | one past the last window (#40911) Problem: Opening a file from a netrw listing throws "E471: Argument required: keepj keepalt 2wincmd 1" when g:netrw_chgwin equals winnr('$')+1, e.g. after opening :Lexplore (which sets g:netrw_chgwin=2) and closing the sidebar, then browsing with :Explore in the remaining window. s:NetrwBrowseChgDir builds the window jump as "g:netrw_chgwin wincmd curwin", passing the saved window NUMBER where wincmd expects its single-letter argument. Solution: Jump back to the saved window with "curwin wincmd w", as the surrounding comment intends; the following statement then performs the actual jump to g:netrw_chgwin. The faulty line dates back to at least Vim 9.0 (runtime/autoload/netrw.vim:4976 at v9.0.0000). Reported (against the since-archived netrw repo) in saccarosium/netrw.vim#98 and neovim/neovim#34169. Note: no test, because the error reproduces only in Neovim. closes: vim/vim#20741 https://github.com/vim/vim/commit/6e468299914a81b54dea7988fc2760df16691cbb Co-authored-by: erdivartanovich <erdivartanovich@gmail.com>
* vim-patch:9.2.0792: runtime(netrw): Explore without optional dir brokenzeertzjq2026-07-19
| | | | | | | | | | | | | | | Problem: runtime(netrw): Explore without optional [dir] argument should open directory of the current file Solution: Make it work as documented (Mark Woods) Broken by fix for vim/vim#20636 in PR vim/vim#20663 related: vim/vim#20663 closes: vim/vim#20761 https://github.com/vim/vim/commit/1eede2bf020035cf9617ade4b313a4cbef08b9ad Co-authored-by: Mark Woods <mwoods.online.ie@gmail.com>
* vim-patch:528adbd: runtime(netrw): Fix `reset_ssl` reference error on file ↵zeertzjq2026-07-18
| | | | | | | | | | | | rename (#40799) fixes: vim/vim#20710 closes: vim/vim#20777 closes: vim/vim#20698 https://github.com/vim/vim/commit/528adbd7579e37f685072460acdd00b0887acc49 Co-authored-by: yasuda <yasuda@kyoto-sr.co.jp> Co-authored-by: Doruk Özer <dorukozer@protonmail.com>
* vim-patch:9.2.0761: runtime(netrw): Unix: unable to open '\' file (#40533)zeertzjq2026-07-01
| | | | | | | | | | Problem: runtime(netrw): Unix: unable to open '\' file Solution: Adjust directory pattern (Manoj Panda) closes: vim/vim#20685 https://github.com/vim/vim/commit/86d8af37ba90ced2236afcb3572c6cb2a1594788 Co-authored-by: Manoj Panda <manojpandawork@gmail.com>
* vim-patch:48474e6: runtime(netrw): Use consistent forward slasheszeertzjq2026-06-29
| | | | | | | | | fixes: vim/vim#20636 closes: vim/vim#20663 https://github.com/vim/vim/commit/48474e63704b6d5ae2f491ef320d33ef74e87357 Co-authored-by: Christian Brabandt <cb@256bit.org>
* feat(runtime): replace netrw with a very small script #39723Barrett Ruth2026-06-25
| | | | | | | | | | | | | | Problem: `:edit <dir>` and `nvim <dir>` currently rely on netrw to show local directory contents. Solution: - Provide `filetype=directory`. - Introduce dir.lua, a small plugin that provides directory listing, opening items, parent navigation, and refresh. - `netrw` remains available for `:Explore`, remote paths, archives, and file operations. To continue Co-authored-by: Justin M. Keyes <justinkz@gmail.com>
* vim-patch:9.2.0663: [security]: runtime(netrw): code injection in local file ↵zeertzjq2026-06-17
| | | | | | | | | | | | | | | | | | | | deletion Problem: [security]: s:NetrwLocalRmFile() escapes only the backslash in the file name before passing it to :execute, so a name containing "|" injects arbitrary Ex commands when the file is deleted (cipher-creator) Solution: Use fnameescape() to correctly escape the file name (Yasuhiro Matsumoto). Github Security Advisory: https://github.com/vim/vim/security/advisories/GHSA-vhh8-v6wx-hjjh Supported by AI https://github.com/vim/vim/commit/55bc757a5d436e59d50fe43f7cda94b118f86cb2 Co-authored-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
* fix(startup): use `nvim.difftool` for `nvim -d` only for directories #40185Tomas Slusny2026-06-11
| | | | | | | | | | | | | | | | | | Problem: `nvim -u NONE -d <(xxd one) <(xxd two)` has weird behavior. Process substitution `<(...)` is a pipe and not a seekable file. Test case: cat /dev/random | head -c 10240 > one cp one two cat /dev/random | head -c 10240 >> two nvim -u NONE -d <(xxd one) <(xxd two) Solution: Workaround the issue by skipping `nvim.difftool` if the 2 args are not directories; fall-through to the builtin diff handling. Signed-off-by: Tomas Slusny <slusnucky@gmail.com>
* vim-patch:9.2.0620: runtime(netrw): fix 2match pattern rebuild (#40179)zeertzjq2026-06-11
| | | | | | | | | | | | Problem: unmarking a regular file when there are directories in the markings list also removes the 2match highlight from those directories. Solution: correctly rebuild the match pattern from the remaining markings, using the right regex trailer for each entry in the list. closes: vim/vim#20461 https://github.com/vim/vim/commit/affd4b5964f0ff10a4a39a93ddf46ad8bd537d1b Co-authored-by: J. Paulo Seibt <jpseibt@gmail.com>
* vim-patch:de18ef6: runtime(doc): Tweak documentation style (#40093)zeertzjq2026-06-02
| | | | | | | closes: vim/vim#20412 https://github.com/vim/vim/commit/de18ef628460b1cd3ae2aca9cd19b9b1c319e60c Co-authored-by: Hirohito Higashi <h.east.727@gmail.com>
* vim-patch:e9f8e0f: runtime(matchit): Update matchit plugin (#40085)zeertzjq2026-06-02
| | | | | https://github.com/vim/vim/commit/e9f8e0fcbe623ebf65bf1e8993d7ee6db57786d4 Co-authored-by: Christian Brabandt <cb@256bit.org>
* vim-patch:9.2.0553: runtime(netrw): netrw rejects hostnames containing _zeertzjq2026-05-29
| | | | | | | | | | | | Problem: runtime(netrw): netrw rejects hostnames containing _ (lilydjwg) Solution: Relax the restriction and allow the underscore fixes: vim/vim#20344 https://github.com/vim/vim/commit/93d177cd2b69bac58fc51a5a514d7bc71e264b11 Co-authored-by: Christian Brabandt <cb@256bit.org>
* vim-patch:e60d4b4: runtime(doc): update netrws "mt" command description (#39975)zeertzjq2026-05-24
| | | | | | | fixes: vim/vim#20302 https://github.com/vim/vim/commit/e60d4b4ff309cab96522f4ad565dd7dc9478b89c Co-authored-by: Christian Brabandt <cb@256bit.org>
* vim-patch:9.2.0502: runtime(netrw): bookmark handling can be improved (#39900)zeertzjq2026-05-20
| | | | | | | | | | | | | | | | | 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: vim/vim#20211 https://github.com/vim/vim/commit/35b767a090cc7b918dcafc9feb1a78cf0938d6bc Co-authored-by: J. Paulo Seibt <jpseibt@gmail.com>
* vim-patch:9.2.0495: [security]: runtime(netrw): code injection via ↵zeertzjq2026-05-18
| | | | | | | | | | | | | | | | 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 https://github.com/vim/vim/commit/f08ab2f4d7d2947c8dd6c179ae08ee6146a2694b Co-authored-by: Christian Brabandt <cb@256bit.org>
* fix(netrw): fix g:netrw_home not respectedzeertzjq2026-05-18
|
* vim-patch:9.2.0481: runtime(netrw): command injection possible via mapszeertzjq2026-05-15
| | | | | | | | | | | 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 https://github.com/vim/vim/commit/8e41c34aba0e775d2e3bf6f0e2da1b1c5317f3df Co-authored-by: Christian Brabandt <cb@256bit.org>
* vim-patch:9.2.0480: [security]: runtime(netrw): code injection via mf commandzeertzjq2026-05-15
| | | | | | | | | | | | | | 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 https://github.com/vim/vim/commit/8af0f098c3a42a28661d0295364e6e0fd7dbc92c Co-authored-by: Christian Brabandt <cb@256bit.org>
* fix(difftool): handle filenames containing spaces #39740Jackson Ludwig2026-05-14
| | | | | | | | | | | Problem: Using the `DiffTool` plugin (e.g. through `nvim -d ...` or `:DiffTool <file1> <file2>` fails if a space is in one of the paths. This occurs because the `diff` wraps the paths with quotes (`'`) if space characters are present, which the line diff regex fails to parse. Solution: Update regex to handle quoted paths by matching the string within the quotes, if it exists.
* vim-patch:9.2.0475: runtime(netrw): bookmark paths not normalized (#39748)zeertzjq2026-05-11
| | | | | | | | | | | | | | | | | 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: vim/vim#20194 https://github.com/vim/vim/commit/74019bea8c97077bfd66cd63dc0ffa279fd729ac Co-authored-by: J. Paulo Seibt <jpseibt@gmail.com>
* vim-patch:9.2.0464: runtime(netrw): bookmarking directory uses current dir ↵zeertzjq2026-05-11
| | | | | | | | | | | | | (#39729) Problem: runtime(netrw): bookmarking directory uses current dir Solution: Correctly handle netrw actual directory (J. Paulo Seibt) fixes: vim/vim#10481 closes: vim/vim#20169 https://github.com/vim/vim/commit/ec76ac620b870abb4ccc9298250691e88a2adb29 Co-authored-by: J. Paulo Seibt <jpseibt@gmail.com>
* vim-patch:9.2.0446: runtime(netrw): off-by-one bug in s:NetrwUnMarkFile() ↵zeertzjq2026-05-06
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | (#39620) 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: vim/vim#20129 https://github.com/vim/vim/commit/7ccc273a4cb6012e5afbdb94d0f2597bc01fe2fd Co-authored-by: J. Paulo Seibt <jpseibt@gmail.com>
* vim-patch:9.1.1756: termdebug: Need a few more user commandszeertzjq2026-05-05
| | | | | | | | | | | | Problem: termdebug: Need a few more user commands Solution: Add the :RunOrContinue and the :ToggleBreak user commands (bennyyip) closes: vim/vim#18283 https://github.com/vim/vim/commit/c975d62473327d7ca74666d41c99651c23f09498 Co-authored-by: bennyyip <yebenmy@gmail.com>
* refactor(tty): tty.request() #39489Justin M. Keyes2026-04-30
| | | | | | | | Problem: - Various `TermRequest` handlers which all do similar things. - `tty.query` is specific to `XTGETTCAP DCS`, can't be reused for other kinds of terminal queries. Solution: Provide `tty.request()`.
* fix(termdebug): evaluate display with gdb pretty print #39453Matthew Hughes2026-04-28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Calling `set print pretty on` in GDB will: > Cause GDB to print structures in an indented format with one member per line However, `termdebug` just renders the newlines as raw `\n` characters. This is a regression of[1]. Glancing through the history it looks to have been caused by cd1b14f027f375a9de17fdf106016470f52035f7 which removed the output splitting when displaying the eval results, so this changes adds that behaviour back. As a quick reproduction/test, compile the following C program: ```c struct Foo { char *name; }; int main(void) { struct Foo f = {"hello"}; printf("%s\n", f.name); return 0; } ``` Then launch `nvim` and run: :Termdebug main :Gdb (gdb) set print pretty on (gdb) break main (gdb) run :Source Place the cursor on the `f` variable and call `:Evaluate`. Before this change: ![](https://github.com/user-attachments/assets/51318e1e-9cdd-43ab-aa35-4aaad1d9f65f) With this change: ![](https://github.com/user-attachments/assets/33874679-21b4-4d07-98ef-c2c9e9d19dd6) Link: https://github.com/neovim/neovim/issues/10020 [1]
* feat(treesitter/extmark): support removing a conceal highlight #35087Peter Cardenas2026-04-25
| | | | | | | | | Problem: Cannot remove a `@conceal` highlight when defined in highlights.scm. Solution: Support a `@noconceal` highlight that works similarly to `@nospell` where it overrides the conceal set on the range to remove it. Additionally, can set the conceal metadata field to false for the same behavior.
* vim-patch:9.2.0383: [security]: runtime(netrw): shell-injection via sftp: ↵zeertzjq2026-04-23
| | | | | | | | | | | | | | | 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 https://github.com/vim/vim/commit/405e2fb6d54d5653523809e2853d99d1c000a5fc Co-authored-by: Christian Brabandt <cb@256bit.org>
* vim-patch:9.2.0367: runtime(netrw): ~ note expanded on MS Windowszeertzjq2026-04-23
| | | | | | | | | | | | | | | | | | | | | | | 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: vim/vim#20003 closes: vim/vim#20014 https://github.com/vim/vim/commit/723c0acf2535c87a5b7be0284e7379e071a1d610 Co-authored-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
* vim-patch:21c0cd2: runtime(netrw): add missing escape() callszeertzjq2026-04-23
| | | | | | https://github.com/vim/vim/commit/21c0cd29f808e32a7c159889c6dcf7a6fbf189f7 Co-authored-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
* vim-patch:9.2.0302: runtime(netrw): RFC2396 decoding double escaping spaceszeertzjq2026-04-23
| | |