aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--runtime/doc/options.txt2
-rw-r--r--test/functional/helpers.lua15
-rw-r--r--test/functional/ui/output_spec.lua16
3 files changed, 30 insertions, 3 deletions
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
index 8518d989d6..971c4ffbd5 100644
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -5169,7 +5169,7 @@ A jump table for the options with a short description can be found at |Q_op|.
unescaping, so to keep yourself sane use |:let-&| like shown above.
*shell-powershell*
To use powershell (on Windows): >
- set shell=powershell shellquote=( shellpipe=\| shellxquote=
+ set shell=powershell shellquote= shellpipe=\| shellxquote=
set shellcmdflag=-NoLogo\ -NoProfile\ -ExecutionPolicy\ RemoteSigned\ -Command
set shellredir=\|\ Out-File\ -Encoding\ UTF8
diff --git a/test/functional/helpers.lua b/test/functional/helpers.lua
index c195983e93..20371b8ab0 100644
--- a/test/functional/helpers.lua
+++ b/test/functional/helpers.lua
@@ -501,9 +501,20 @@ function module.source(code)
end
function module.set_shell_powershell()
+ local shell = iswin() and 'powershell' or 'pwsh'
+ if not module.eval('executable("'..shell..'")') then
+ error(shell..' is not executable')
+ end
+ local aliases = iswin() and {'cat', 'sleep'} or {}
+ local cmd = ''
+ for _, alias in ipairs(aliases) do
+ cmd = cmd .. 'Remove-Item -Force alias:' .. alias .. ';'
+ end
module.source([[
- set shell=powershell shellquote=( shellpipe=\| shellredir=> shellxquote=
- let &shellcmdflag = '-NoLogo -NoProfile -ExecutionPolicy RemoteSigned -Command Remove-Item -Force alias:sleep; Remove-Item -Force alias:cat;'
+ let &shell = ']]..shell..[['
+ set shellquote= shellpipe=\| shellxquote=
+ let &shellredir = '| Out-File -Encoding UTF8'
+ let &shellcmdflag = '-NoLogo -NoProfile -ExecutionPolicy RemoteSigned -Command ]]..cmd..[['
]])
end
diff --git a/test/functional/ui/output_spec.lua b/test/functional/ui/output_spec.lua
index c028f44b44..c5d3e536ad 100644
--- a/test/functional/ui/output_spec.lua
+++ b/test/functional/ui/output_spec.lua
@@ -10,6 +10,7 @@ local iswin = helpers.iswin
local clear = helpers.clear
local command = helpers.command
local nvim_dir = helpers.nvim_dir
+local set_shell_powershell = helpers.set_shell_powershell
describe("shell command :!", function()
local screen
@@ -230,4 +231,19 @@ describe("shell command :!", function()
]])
end)
end)
+ if iswin() or eval('executable("pwsh")') == 1 then
+ it('powershell supports literal strings', function()
+ set_shell_powershell()
+ local screen = Screen.new(30, 4)
+ screen:attach()
+ feed_command([[!'echo $a']])
+ screen:expect{any='\necho %$a', timeout=10000}
+ feed_command([[!$a = 1; echo '$a']])
+ screen:expect{any='\n%$a', timeout=10000}
+ feed_command([[!"echo $a"]])
+ screen:expect{any='\necho', timeout=10000}
+ feed_command([[!$a = 1; echo "$a"]])
+ screen:expect{any='\n1', timeout=10000}
+ end)
+ end
end)