如何在VSCode集成终端内运行时自定义Powershell?

3
我想在运行于VSCode中时包含一些Powershell自定义内容。在ISE或包管理控制台(Visual Studio内部)中,我可以使用$host.name的值来切换行为或在“主机特定”Powershell配置文件(例如Microsoft.PowerShell_profile.ps1)中包含特定代码。
在VSCode中的Powershell与在常规控制台中运行的Powershell看起来完全相同,因此大多数这些选项不可用。有没有办法解决这个问题?
4个回答

4
请参考Visual Studio Code $psise equivalent
您可以检查$psISE,如果不存在,请尝试$context = [Microsoft.Powershell.EditorServices.Extensions.EditorContext]$psEditor.GetEditorContext(),但请注意,这将在ISE中引发错误。
我在我的许多脚本中使用这个片段,所以我可以始终引用“$root”。
# Makes debugging from ISE easier.
if ($PSScriptRoot -eq "")
{
    if ($psISE)
    {
        $root = Split-Path -Parent $psISE.CurrentFile.FullPath
    }
    else
    {
        $context = $psEditor.GetEditorContext()
        $root = Split-Path -Parent $context.CurrentFile.Path
    }
}
else
{
    $root = $PSScriptRoot
}

很高兴看到$psEditor。我之前不知道这个东西。我选择了另一个答案,因为我实际上并没有编辑PowerShell代码,只是使用终端,所以我不想依赖于安装扩展。 - Ben Randall

3
您可以检查是否存在VSCode特定的环境变量:
if((Test-Path env:\VSCODE_PID) -or ($env:TERM_PROGRAM -eq 'vscode')){
  # Running from Vistual Studio Code
}

简单易用,无需任何扩展,始终可用!谢谢! - Ben Randall
1
不幸的是,自VSCode v1.30.2起,此环境变量似乎不再被定义。实际上,在macOS和Linux上根本没有定义任何VSCODE*环境变量。在Windows上,我只看到VSCODE_CWD - mklement0
1
@mklement0 是正确的,这些变量似乎不再被设置,所以我取消了这个答案的标记。 :( - Ben Randall

3

在VSCode的集成终端中,它会将TERM_PROGRAM环境变量设置为vscode,因此您可以使用以下测试,无论是否安装了PowerShell扩展程序:

$runningInVsCode = $env:TERM_PROGRAM -eq 'vscode'

1

不幸的是,自VSCode v1.30.2起,此环境变量似乎不再被定义。实际上,在macOS和Linux上根本没有定义任何VSCODE*环境变量。在Windows上,我只看到VSCODE_CWD - mklement0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接