mirror of
https://github.com/neovim/neovim.git
synced 2025-10-21 17:21:49 +00:00
win: defaults: 'shellcmdflag', 'shellxquote' #7343
closes #7698 Wrapping a command in double-quotes allows cmd.exe to safely dequote the entire command as if the user entered the entire command in an interactive prompt. This reduces the need to escape nested and uneven double quotes. The `/s` flag of cmd.exe makes the behaviour more reliable: :set shellcmdflag=/s\ /c Before this patch, cmd.exe cannot use cygwin echo.exe (as opposed to cmd.exe `echo` builtin) even if it is wrapped in double quotes. Example: :: internal echo > cmd /s /c " echo foo\:bar" " foo\:bar" :: cygwin echo.exe > cmd /s /c " "echo" foo\:bar" " foo:bar
This commit is contained in:

committed by
Justin M. Keyes

parent
be67d926c5
commit
131aad953c
@@ -8,6 +8,7 @@ local funcs = helpers.funcs
|
||||
local retry = helpers.retry
|
||||
local ok = helpers.ok
|
||||
local iswin = helpers.iswin
|
||||
local command = helpers.command
|
||||
|
||||
describe(':terminal', function()
|
||||
local screen
|
||||
@@ -143,6 +144,7 @@ describe(':terminal (with fake shell)', function()
|
||||
end)
|
||||
|
||||
it('executes a given command through the shell', function()
|
||||
command('set shellxquote=') -- win: avoid extra quotes
|
||||
terminal_with_fake_shell('echo hi')
|
||||
screen:expect([[
|
||||
^ready $ echo hi |
|
||||
@@ -154,6 +156,7 @@ describe(':terminal (with fake shell)', function()
|
||||
|
||||
it("executes a given command through the shell, when 'shell' has arguments", function()
|
||||
nvim('set_option', 'shell', nvim_dir..'/shell-test -t jeff')
|
||||
command('set shellxquote=') -- win: avoid extra quotes
|
||||
terminal_with_fake_shell('echo hi')
|
||||
screen:expect([[
|
||||
^jeff $ echo hi |
|
||||
@@ -164,6 +167,7 @@ describe(':terminal (with fake shell)', function()
|
||||
end)
|
||||
|
||||
it('allows quotes and slashes', function()
|
||||
command('set shellxquote=') -- win: avoid extra quotes
|
||||
terminal_with_fake_shell([[echo 'hello' \ "world"]])
|
||||
screen:expect([[
|
||||
^ready $ echo 'hello' \ "world" |
|
||||
@@ -217,6 +221,7 @@ describe(':terminal (with fake shell)', function()
|
||||
end)
|
||||
|
||||
it('works with gf', function()
|
||||
command('set shellxquote=') -- win: avoid extra quotes
|
||||
terminal_with_fake_shell([[echo "scripts/shadacat.py"]])
|
||||
screen:expect([[
|
||||
^ready $ echo "scripts/shadacat.py" |
|
||||
|
Reference in New Issue
Block a user