summaryrefslogtreecommitdiffstats
path: root/runtime
diff options
context:
space:
mode:
authorMike Williams <mikew@globalgraphics.com>2021-06-28 20:53:58 +0200
committerBram Moolenaar <Bram@vim.org>2021-06-28 20:53:58 +0200
commit127950241e84c822d3c50f46a00d42a70d2d5cb6 (patch)
tree6b5a0ac43a29edeb6e1cc3c3fb9f7c6f966cb28e /runtime
parentffec6dd16a766180429addaa78928c773a3c9832 (diff)
patch 8.2.3071: shell options are not set properly for PowerShellv8.2.3071
Problem: Shell options are not set properly for PowerShell. Solution: Use better option defaults. (Mike Willams, closes #8459)
Diffstat (limited to 'runtime')
-rw-r--r--runtime/doc/eval.txt11
-rw-r--r--runtime/doc/options.txt56
-rw-r--r--runtime/doc/os_dos.txt45
3 files changed, 82 insertions, 30 deletions
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index 4356381580..7fb2534538 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -9878,9 +9878,11 @@ sha256({string}) *sha256()*
shellescape({string} [, {special}]) *shellescape()*
Escape {string} for use as a shell command argument.
- On MS-Windows, when 'shellslash' is not set, it will enclose
- {string} in double quotes and double all double quotes within
- {string}.
+ On MS-Windows, when the 'shell' contains powershell then it
+ will enclose {string} in single quotes and will double up all
+ internal single quotes. With other values for 'shell' when
+ 'shellslash' is not set, it will enclose {string} in double
+ quotes and double all double quotes within {string}.
Otherwise it will enclose {string} in single quotes and
replace all "'" with "'\''".
@@ -11040,7 +11042,8 @@ tempname() *tempname()* *temp-file-name*
:exe "redir > " . tmpfile
< For Unix, the file will be in a private directory |tempfile|.
For MS-Windows forward slashes are used when the 'shellslash'
- option is set or when 'shellcmdflag' starts with '-'.
+ option is set or when 'shellcmdflag' starts with '-' except
+ when when 'shell' contains powershell.
term_ functions are documented here: |terminal-function-details|
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
index 05489d7f63..b958cf63ed 100644
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -6594,23 +6594,25 @@ A jump table for the options with a short description can be found at |Q_op|.
*'shellcmdflag'* *'shcf'*
'shellcmdflag' 'shcf' string (default: "-c";
- Win32, when 'shell' does not contain "sh"
+ Win32, when 'shell' contains "powershell":
+ "-Command", or when it does not contain "sh"
somewhere: "/c")
global
Flag passed to the shell to execute "!" and ":!" commands; e.g.,
- "bash.exe -c ls" or "cmd.exe /c dir". For MS-Windows, the default is
- set according to the value of 'shell', to reduce the need to set this
- option by the user.
+ "bash.exe -c ls", "powershell.exe -Command dir", or "cmd.exe /c dir".
+ For MS-Windows, the default is set according to the value of 'shell',
+ to reduce the need to set this option by the user.
On Unix it can have more than one flag. Each white space separated
part is passed as an argument to the shell command.
See |option-backslash| about including spaces and backslashes.
- Also see |dos-shell| for MS-Windows.
+ Also see |dos-shell| and |dos-powershell| for MS-Windows.
This option cannot be set from a |modeline| or in the |sandbox|, for
security reasons.
*'shellpipe'* *'sp'*
-'shellpipe' 'sp' string (default ">", ">%s 2>&1", "| tee", "|& tee" or
- "2>&1| tee")
+'shellpipe' 'sp' string (default ">", ">%s 2>&1", "| tee", "|& tee"
+ "2>&1| tee", or
+ "2>&1 | Out-File -Encoding default")
global
{not available when compiled without the |+quickfix|
feature}
@@ -6620,9 +6622,10 @@ A jump table for the options with a short description can be found at |Q_op|.
The name of the temporary file can be represented by "%s" if necessary
(the file name is appended automatically if no %s appears in the value
of this option).
- For the Amiga the default is ">". For MS-Windows the default is
- ">%s 2>&1". The output is directly saved in a file and not echoed to
- the screen.
+ For the Amiga the default is ">". For MS-Windows using powershell the
+ default is "2>&1 | Out-File -Encoding default", otherwise the default
+ is ">%s 2>&1". The output is directly saved in a file and not echoed
+ to the screen.
For Unix the default is "| tee". The stdout of the compiler is saved
in a file and echoed to the screen. If the 'shell' option is "csh" or
"tcsh" after initializations, the default becomes "|& tee". If the
@@ -6645,8 +6648,9 @@ A jump table for the options with a short description can be found at |Q_op|.
security reasons.
*'shellquote'* *'shq'*
-'shellquote' 'shq' string (default: ""; Win32, when 'shell'
- contains "sh" somewhere: "\"")
+'shellquote' 'shq' string (default: ""; Win32, when 'shell' does not
+ contain powershell but contains "sh"
+ somewhere: "\"")
global
Quoting character(s), put around the command passed to the shell, for
the "!" and ":!" commands. The redirection is kept outside of the
@@ -6661,7 +6665,8 @@ A jump table for the options with a short description can be found at |Q_op|.
security reasons.
*'shellredir'* *'srr'*
-'shellredir' 'srr' string (default ">", ">&" or ">%s 2>&1")
+'shellredir' 'srr' string (default ">", ">&", ">%s 2>&1", or
+ "2>&1 | Out-File -Encoding default")
global
String to be used to put the output of a filter command in a temporary
file. See also |:!|. See |option-backslash| about including spaces
@@ -6674,8 +6679,10 @@ A jump table for the options with a short description can be found at |Q_op|.
'shell' option is "sh", "ksh", "mksh", "pdksh", "zsh", "zsh-beta",
"bash" or "fish", the default becomes ">%s 2>&1". This means that
stderr is also included. For Win32, the Unix checks are done and
- additionally "cmd" is checked for, which makes the default ">%s 2>&1".
- Also, the same names with ".exe" appended are checked for.
+ additionally "cmd" is checked for, which makes the default ">%s 2>&1",
+ and "powershell" is checked for which makes the default
+ "2>&1 | Out-File -Encoding default". Also, the same names with ".exe"
+ appended are checked for.
The initialization of this option is done after reading the ".vimrc"
and the other initializations, so that when the 'shell' option is set
there, the 'shellredir' option changes automatically unless it was
@@ -6690,9 +6697,9 @@ A jump table for the options with a short description can be found at |Q_op|.
global
{only for MS-Windows}
When set, a forward slash is used when expanding file names. This is
- useful when a Unix-like shell is used instead of cmd.exe. Backward
- slashes can still be typed, but they are changed to forward slashes by
- Vim.
+ useful when a Unix-like shell is used instead of cmd.exe or
+ powershell.exe. Backward slashes can still be typed, but they are
+ changed to forward slashes by Vim.
Note that setting or resetting this option has no effect for some
existing file names, thus this option needs to be set before opening
any file for best results. This might change in the future.
@@ -6746,6 +6753,8 @@ A jump table for the options with a short description can be found at |Q_op|.
*'shellxquote'* *'sxq'*
'shellxquote' 'sxq' string (default: "";
for Win32, when 'shell' is cmd.exe: "("
+ for Win32, when 'shell' is
+ powershell.exe: "\""
for Win32, when 'shell' contains "sh"
somewhere: "\""
for Unix, when using system(): "\"")
@@ -6758,11 +6767,12 @@ A jump table for the options with a short description can be found at |Q_op|.
then ')"' is appended.
When the value is '(' then also see 'shellxescape'.
This is an empty string by default on most systems, but is known to be
- useful for on Win32 version, either for cmd.exe which automatically
- strips off the first and last quote on a command, or 3rd-party shells
- such as the MKS Korn Shell or bash, where it should be "\"". The
- default is adjusted according the value of 'shell', to reduce the need
- to set this option by the user. See |dos-shell|.
+ useful for on Win32 version, either for cmd.exe and powershell.exe
+ which automatically strips off the first and last quote on a command,
+ or 3rd-party shells such as the MKS Korn Shell or bash, where it
+ should be "\"". The default is adjusted according the value of
+ 'shell', to reduce the need to set this option by the user. See
+ |dos-shell|.
This option cannot be set from a |modeline| or in the |sandbox|, for
security reasons.
diff --git a/runtime/doc/os_dos.txt b/runtime/doc/os_dos.txt
index 925c7e0915..b45cb088cb 100644
--- a/runtime/doc/os_dos.txt
+++ b/runtime/doc/os_dos.txt
@@ -17,6 +17,7 @@ versions of Vim. Also see |os_win32.txt| and |os_msdos.txt|.
7. Interrupting |dos-CTRL-Break|
8. Temp files |dos-temp-files|
9. Shell option default |dos-shell|
+10. PowerShell |dos-powershell|
==============================================================================
1. File locations *dos-locations*
@@ -297,8 +298,46 @@ For Win32 as:
<shell> -c "command name >file"
For DOS 32 bit, DJGPP does this internally somehow.
-When starting up, Vim checks for the presence of "sh" anywhere in the 'shell'
-option. If it is present, Vim sets the 'shellcmdflag' and 'shellquote' or
-'shellxquote' options will be set as described above.
+When starting up, if Vim does not recognise a standard Windows shell it checks
+for the presence of "sh" anywhere in the 'shell' option. If it is present,
+Vim sets the 'shellcmdflag' and 'shellquote' or 'shellxquote' options will be
+set as described above.
+
+==============================================================================
+10. PowerShell *dos-powershell*
+
+Vim also supports Windows PowerShell. If 'shell' has been set to
+"powershell.exe" at startup then VIM sets 'shellcmdflag', 'shellxquote',
+'shellpipe', and 'shellredir' options to the following values:
+
+'shellcmdflag' -Command
+'shellxquote' "
+'shellpipe' 2>&1 | Out-File -Encoding default
+'shellredir' 2>&1 | Out-File -Encoding default
+
+If you find that PowerShell commands are taking a long time to run then try
+setting 'shellcmdflag' to "-NoProfile -Command". Note this will prevent any
+PowerShell environment setup by the profile from taking place.
+
+If you have problems running PowerShell scripts through the 'shell' then try
+setting 'shellcmdflag' to "-ExecutionPolicy RemoteSigned -Command". See
+online Windows documentation for more information on PowerShell Execution
+Policy settings.
+
+The 'shellpipe' and 'shellredir' option values re-encode the UTF-16le output
+from Windows PowerShell to your currently configured console codepage. The
+output can be forced into a different encoding by changing "default" to one of
+the following:
+
+ unicode - UTF-16le (default output from PowerShell 5.1)
+ bigendianunicode - UTF-16
+ utf8 - UTF-8
+ utf7 - UTF-7 (no-BOM)
+ utf32 - UTF-32
+ ascii - 7-bit ASCII character set
+ default - System's active code page (typically ANSI)
+ oem - System's current OEM code page
+
+Note Multi-byte Unicode encodings include a leading BOM.
vim:tw=78:ts=8:noet:ft=help:norl: