Skip to content

Fix Support for PowerShell under Windows with VIM 8+#1326

Open
tiamat18 wants to merge 1 commit into
junegunn:masterfrom
tiamat18:master
Open

Fix Support for PowerShell under Windows with VIM 8+#1326
tiamat18 wants to merge 1 commit into
junegunn:masterfrom
tiamat18:master

Conversation

@tiamat18
Copy link
Copy Markdown

The following 'vim-plug' commands would fail and/or display errors when executed on by VIM 8+ on a Windows platform with the 'shell' option set to 'powershell' or 'pwsh':

  • PlugInstall
  • PlugUpdate
  • PlugClean
  • PlugStatus
  • PlugDiff

There were two causes for these errors:

  • A bug in VIM itself (resolved by patch 9.2.6) with how compound PowerShell commands are handled by the 'system()' vimscript function.
  • A bug in the 's:vim8' branch of the private 'vim-plug' function 's:spawn()' where the actual command to be executed was escaped for 'cmd.exe' but the 'cd' prefix added by 's:with_cd()" was escaped for PowerShell.

Describe the details of your PR ...

The following 'vim-plug' commands would fail and/or display errors
when executed on by VIM 8+ on a Windows platform with the 'shell'
option set to 'powershell' or 'pwsh':
  - PlugInstall
  - PlugUpdate
  - PlugClean
  - PlugStatus
  - PlugDiff

There were two causes for these errors:
  - A bug in VIM itself (resolved by patch 9.2.6) with how compound
    PowerShell commands are handled by the 'system()' vimscript
    function.
  - A bug in the 's:vim8' branch of the private 'vim-plug' function
    's:spawn()' where the actual command to be executed was escaped
    for 'cmd.exe' but the 'cd' prefix added by 's:with_cd()" was escaped
    for PowerShell.
@HaaiHenkie
Copy link
Copy Markdown

Nice fix — making the shell explicit in s:with_cd is definitely the right approach. It solved all my vim 8+ problems with PowerShell under Windows. I hope it will be implemented soon.

For completeness and consistency, consider passing {'shell': 'cmd.exe'} to s:with_cd() in s:bang() as well, though I don't think it is really necessary. This is because I don't know whether this function is ever used under Windows and, whether it will work anyway, taking into account the FIXME remark. Since in s:bang() the command is executed via a batch file under Windows, the command shell will be cmd.exe even when executed under PowerShell. So to prevent PowerShell type commands in a batch file, I would suggest the following change on line 1000:

let cmd = a:0 ? s:with_cd(a:cmd, a:1, {'shell': s:is_win ? 'cmd.exe' : &shell}) : a:cmd

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants