fix(system): use native path for Windows executables #40885

Problem:
When 'shellslash' is set, exepath() returns forward-slashed paths.
Passing that path to vim.system() can prevent cmd.exe from launching.

Solution:
Convert the resolved executable path to native separators before spawning.
Add a Windows regression test for cmd.exe with 'shellslash' enabled.
This commit is contained in:
Sanzhar Kuandyk
2026-07-21 16:58:44 +05:00
committed by GitHub
parent a71ee754ee
commit a87e91677c
2 changed files with 13 additions and 1 deletions

View File

@@ -130,6 +130,17 @@ describe('vim.system', function()
n.system_sync({ 'chmod', '+x', 'test.bat' })
n.system_sync({ './test' })
end)
it('launches cmd.exe when shellslash is set', function()
n.command('set shellslash')
local path = exec_lua([[return vim.fn.exepath('cmd.exe')]])
t.neq(nil, path:find('/', 1, true))
local result = n.system_sync({ 'cmd.exe', '/c', 'echo OK' })
eq(0, result.code)
eq('OK\r\n', result.stdout)
eq('', result.stderr)
end)
end
it('always captures all content of stdout/stderr #30846', function()