Browse Source

doc: update shellquote for powershell #11122

shellquote is not treated like shellxquote for non-quote values.
tags/nightly
Jan Edmund Lazo 1 month ago
parent
commit
51f2826f61
3 changed files with 30 additions and 3 deletions
  1. +1
    -1
      runtime/doc/options.txt
  2. +13
    -2
      test/functional/helpers.lua
  3. +16
    -0
      test/functional/ui/output_spec.lua

+ 1
- 1
runtime/doc/options.txt View File

@@ -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


+ 13
- 2
test/functional/helpers.lua View File

@@ -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


+ 16
- 0
test/functional/ui/output_spec.lua View File

@@ -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)

Loading…
Cancel
Save