Support Windows shell without extension (#997)
Close https://github.com/junegunn/vim-plug/issues/995 Vim supports omitting file extensions for its option. I omitted the file extension in Neovim's documentation for powershell.
This commit is contained in:
parent
c319036396
commit
b2133cf2ec
2 changed files with 11 additions and 7 deletions
14
plug.vim
14
plug.vim
|
@ -179,7 +179,7 @@ function! s:define_commands()
|
||||||
endif
|
endif
|
||||||
if has('win32')
|
if has('win32')
|
||||||
\ && &shellslash
|
\ && &shellslash
|
||||||
\ && (&shell =~# 'cmd\.exe' || &shell =~# 'powershell\.exe')
|
\ && (&shell =~# 'cmd\(\.exe\)\?$' || &shell =~# 'powershell\(\.exe\)\?$')
|
||||||
return s:err('vim-plug does not support shell, ' . &shell . ', when shellslash is set.')
|
return s:err('vim-plug does not support shell, ' . &shell . ', when shellslash is set.')
|
||||||
endif
|
endif
|
||||||
if !has('nvim')
|
if !has('nvim')
|
||||||
|
@ -419,7 +419,7 @@ if s:is_win
|
||||||
let batchfile = s:plug_tempname().'.bat'
|
let batchfile = s:plug_tempname().'.bat'
|
||||||
call writefile(s:wrap_cmds(a:cmd), batchfile)
|
call writefile(s:wrap_cmds(a:cmd), batchfile)
|
||||||
let cmd = plug#shellescape(batchfile, {'shell': &shell, 'script': 0})
|
let cmd = plug#shellescape(batchfile, {'shell': &shell, 'script': 0})
|
||||||
if &shell =~# 'powershell\.exe'
|
if &shell =~# 'powershell\(\.exe\)\?$'
|
||||||
let cmd = '& ' . cmd
|
let cmd = '& ' . cmd
|
||||||
endif
|
endif
|
||||||
return [batchfile, cmd]
|
return [batchfile, cmd]
|
||||||
|
@ -890,9 +890,9 @@ function! s:chsh(swap)
|
||||||
set shell=sh
|
set shell=sh
|
||||||
endif
|
endif
|
||||||
if a:swap
|
if a:swap
|
||||||
if &shell =~# 'powershell\.exe' || &shell =~# 'pwsh$'
|
if &shell =~# 'powershell\(\.exe\)\?$' || &shell =~# 'pwsh$'
|
||||||
let &shellredir = '2>&1 | Out-File -Encoding UTF8 %s'
|
let &shellredir = '2>&1 | Out-File -Encoding UTF8 %s'
|
||||||
elseif &shell =~# 'sh' || &shell =~# 'cmd\.exe'
|
elseif &shell =~# 'sh' || &shell =~# 'cmd\(\.exe\)\?$'
|
||||||
set shellredir=>%s\ 2>&1
|
set shellredir=>%s\ 2>&1
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
@ -2128,9 +2128,9 @@ function! plug#shellescape(arg, ...)
|
||||||
let opts = a:0 > 0 && type(a:1) == s:TYPE.dict ? a:1 : {}
|
let opts = a:0 > 0 && type(a:1) == s:TYPE.dict ? a:1 : {}
|
||||||
let shell = get(opts, 'shell', s:is_win ? 'cmd.exe' : 'sh')
|
let shell = get(opts, 'shell', s:is_win ? 'cmd.exe' : 'sh')
|
||||||
let script = get(opts, 'script', 1)
|
let script = get(opts, 'script', 1)
|
||||||
if shell =~# 'cmd\.exe'
|
if shell =~# 'cmd\(\.exe\)\?$'
|
||||||
return s:shellesc_cmd(a:arg, script)
|
return s:shellesc_cmd(a:arg, script)
|
||||||
elseif shell =~# 'powershell\.exe' || shell =~# 'pwsh$'
|
elseif shell =~# 'powershell\(\.exe\)\?$' || shell =~# 'pwsh$'
|
||||||
return s:shellesc_ps1(a:arg)
|
return s:shellesc_ps1(a:arg)
|
||||||
endif
|
endif
|
||||||
return s:shellesc_sh(a:arg)
|
return s:shellesc_sh(a:arg)
|
||||||
|
@ -2182,7 +2182,7 @@ function! s:system(cmd, ...)
|
||||||
return system(a:cmd)
|
return system(a:cmd)
|
||||||
endif
|
endif
|
||||||
let cmd = join(map(copy(a:cmd), 'plug#shellescape(v:val, {"shell": &shell, "script": 0})'))
|
let cmd = join(map(copy(a:cmd), 'plug#shellescape(v:val, {"shell": &shell, "script": 0})'))
|
||||||
if &shell =~# 'powershell\.exe'
|
if &shell =~# 'powershell\(\.exe\)\?$'
|
||||||
let cmd = '& ' . cmd
|
let cmd = '& ' . cmd
|
||||||
endif
|
endif
|
||||||
else
|
else
|
||||||
|
|
|
@ -13,6 +13,7 @@ Execute (plug#shellescape() ignores invalid optional argument):
|
||||||
Execute (plug#shellescape() depends on the shell):
|
Execute (plug#shellescape() depends on the shell):
|
||||||
AssertEqual "'foo'\\'''", plug#shellescape("foo'", {'shell': 'sh'})
|
AssertEqual "'foo'\\'''", plug#shellescape("foo'", {'shell': 'sh'})
|
||||||
AssertEqual '^"foo''^"', plug#shellescape("foo'", {'shell': 'cmd.exe'})
|
AssertEqual '^"foo''^"', plug#shellescape("foo'", {'shell': 'cmd.exe'})
|
||||||
|
AssertEqual "'foo'''", plug#shellescape("foo'", {'shell': 'powershell'})
|
||||||
AssertEqual "'foo'''", plug#shellescape("foo'", {'shell': 'powershell.exe'})
|
AssertEqual "'foo'''", plug#shellescape("foo'", {'shell': 'powershell.exe'})
|
||||||
AssertEqual "'foo'''", plug#shellescape("foo'", {'shell': 'pwsh'})
|
AssertEqual "'foo'''", plug#shellescape("foo'", {'shell': 'pwsh'})
|
||||||
|
|
||||||
|
@ -32,6 +33,9 @@ Execute (plug#shellescape() supports non-trivial cmd.exe escaping):
|
||||||
\ }),
|
\ }),
|
||||||
|
|
||||||
Execute (plug#shellescape() supports non-trivial powershell.exe escaping):
|
Execute (plug#shellescape() supports non-trivial powershell.exe escaping):
|
||||||
|
AssertEqual '''\"Foo\\''''\\Bar\"''', plug#shellescape('"Foo\''\Bar"', {
|
||||||
|
\ 'shell': 'powershell',
|
||||||
|
\ }),
|
||||||
AssertEqual '''\"Foo\\''''\\Bar\"''', plug#shellescape('"Foo\''\Bar"', {
|
AssertEqual '''\"Foo\\''''\\Bar\"''', plug#shellescape('"Foo\''\Bar"', {
|
||||||
\ 'shell': 'powershell.exe',
|
\ 'shell': 'powershell.exe',
|
||||||
\ }),
|
\ }),
|
||||||
|
|
Loading…
Reference in a new issue