VSCode 突然默认为集成终端和任务的 powershell

VSCode is suddenly defaulting to powershell for integrated terminal and tasks

当我今天早上醒来并启动 VSCode 我的默认终端时,运行 任务现在是 powershell,而不是 Git Bash。我在 windows。我试过更改 settings.json 无济于事。有什么我想念的吗?

{
    "workbench.startupEditor": "newUntitledFile",
    "terminal.integrated.shell.windows": "C:\Program Files\Git\bin\bash.exe",
    "[javascript]": {
        "editor.defaultFormatter": "rvest.vs-code-prettier-eslint"
    },
    "aws.samcli.location": "C:\Users\king\AppData\Roaming\npm\sam.exe",
    "typescript.updateImportsOnFileMove.enabled": "always",
    "[html]": {
        "editor.defaultFormatter": "vscode.html-language-features"
    },
    "editor.formatOnSave": true,
    "editor.formatOnPaste": true,
    "javascript.updateImportsOnFileMove.enabled": "always",
    "explorer.confirmDragAndDrop": false,
    "diffEditor.maxComputationTime": 0,
    "extensions.ignoreRecommendations": true,
    "[typescript]": {
        "editor.defaultFormatter": "esbenp.prettier-vscode"
    },
    "editor.renderControlCharacters": true,
    "[jsonc]": {
    
        "editor.quickSuggestions": {
            "strings": true
        },
        "editor.suggest.insertMode": "replace"
    },
    "window.zoomLevel": 0,
    "editor.accessibilitySupport": "off",
    "workbench.editor.untitled.hint": "hidden",
    "terminal.integrated.defaultProfile.windows": "Git Bash",
    "terminal.external.windowsExec": "C:\Program Files\Git\bin\bash.exe",
    "terminal.explorerKind": "external",
    "terminal.integrated.automationShell.linux": ""
}

我发现这个 related SO post 正在制作默认的 powershell,但我没有发现我的设置有任何不正确的地方......特别是因为我的目标是相反的 - 停止 Powershell!

更新: 版本 v1.60.0 有一个错误。升级到 v1.60.1 或更高版本以获得修复.

错误表现为以下症状

  • 资源管理器窗格快捷方式中的 Open in Integrated Terminal 快捷菜单命令始终使用内置默认值 shell(Windows 上的 PowerShell),忽略已配置的一.

  • 运行 任务也是如此(有或没有单独的 terminal.integrated.automationShell.* 设置)。

  • 此外,如果给定的文件夹或工作区在退出时碰巧打开了集成终端 Visual Studio 代码,则在集成终端自动重新打开时启动的 shell下一次又是内置默认 shell,而不是配置的。相比之下,如果重新打开不会自动打开集成终端,则手动打开它 遵守配置的默认值 shell,手动创建另一个 shell稍后实例。

GitHub issue #132150

以下信息被证明与该错误无关,但希望仍然是关于 Visual Studio 代码在如何配置集成终端的 shell 方面的最近更改的一般信息:


正在从旧的默认 shell 设置迁移到 shell 配置文件:

  • 最近,"terminal.integrated.shell.*""terminal.integrated.shellArgs.*" 设置被 弃用 并替换为一个 更灵活的模型,允许通过所谓的 定义 多个 shell 到 select ]shell profiles,可选地在设置 "terminal.integrated.profiles.*" 中定义,关联的强制性 "terminal.integrated.defaultProfile.*" 设置引用要使用的配置文件的名称 默认 - 这可能是明确定义的自定义配置文件或内置的、适合平台的默认配置文件之一。

    • 注意:上面设置名称中的*代表相应的平台标识符,即windowslinuxosx (macOS).
  • 自 v1.60.1 起,如果遗留 "terminal.integrated.shell.*" 设置 存在,设置优先(即使在 settings.json 中编辑 "terminal.integrated.shell.*" 时的工具提示表明此更改尚未到来)。

    • 在没有两个设置的情况下,Visual Studio代码的内置 使用默认 shell,在 Windows 上是 PowerShell[1]类 Unix 平台 用户的默认 shell,如 指定在 SHELL 环境变量中 .

    • 最近的 Visual Studio 代码版本,从 before v1.60 开始 - 看似 一次性机会 - 显示一个提示已弃用的设置迁移到新设置。

      • 接受 迁移结果如下:

        • 创建设置 "terminal.integrated.shell.*",其中包含从旧设置 "terminal.integrated.shell.*""terminal.integrated.shellArgs.*" 的值派生的自定义 shell 配置文件;该自定义配置文件的名称具有后缀 (migrated)
        • 创建设置 terminal.integrated.defaultProfile.*,其值为迁移配置文件的名称,使其成为默认值 shell。
        • 删除旧设置 "terminal.integrated.shell.*""terminal.integrated.shellArgs.*"
      • 如果您拒绝迁移,稍后您可以通过重新选择默认值shell有效地执行迁移,如下所述。

        • 注意:在此过程中创建的新 "terminal.integrated.defaultProfile.*" 设置会有效地 覆盖 遗留 "terminal.integrated.shell.*""terminal.integrated.shellArgs.*" 设置,但是后者不会自动删除。为避免混淆,最好手动将它们从 settings.json 中删除。
  • 选择默认shell配置文件以使用以便(重新)指定默认shell:

    • 点击集成终端右侧shell-select或图标()的向下箭头部分,select Select Default Profile,显示已定义配置文件的列表 select 默认值 - 在没有明确定义的配置文件的情况下,提供 标准 配置文件(见下文)。

    • 这转化为 settings.json 中的 terminal.integrated.defaultProfile.* 设置,其值是所选 shell 配置文件的名称 - 可能是 内置配置文件或"terminal.integrated.profiles.*"

      中明确定义的配置文件之一
    • 注意:此 shell 默认情况下也用于 任务 (在 tasks.json 中定义),但可以覆盖"terminal.integrated.automationShell.*" 设置指向替代 shell.

      的可执行文件
  • 可选,在您的 settings.json 文件中,您可以 创建适合平台的 terminal.integrated.profiles.* 设置shell profiles 感兴趣:

    • 注意:即使您的 settings.json 包含 no(适合平台)"terminal.integrated.profiles.*" 设置,Visual Studio 代码具有它知道的内置 standard 配置文件,并在选择 default shell 时为 selection 提供它们。 =59=]

      • 这些标准配置文件混合了主机平台附带的 shell 以及 Visual Studio 在给定系统上动态检测到的一些配置文件,例如 Git Bash 在 Windows.
    • 创建标准 配置文件显式,请执行以下操作:

      • 注意:您可以选择执行此操作以自定义标准配置文件。但是,如果您的意图只是 添加 自定义配置文件 - 请参阅 示例 - 没有必要在 "terminal.integrated.profiles.*" 设置中创建标准配置文件,因为 Visual Studio 即使没有明确定义,代码也知道它们。

      • 通过File > Preferences > Settings(Ctrl-,)搜索profiles点击平台下方的Edit in settings.json -适当的 Terminal > Integrated > Profiles > * 设置;这将打开 settings.json 进行编辑,并添加了标准配置文件;只需保存文件就足够了。

        • 注意:如果显示的 "terminal.integrated.profiles.*" 设置不包含预期的、适合平台的标准配置文件,则可能已经存在同名的设置;要强制创建标准配置文件,请删除或注释掉现有设置并保存文件,然后重试。
      • 在 Windows 上,您将得到如下内容:

        "terminal.integrated.profiles.windows": {
          "PowerShell": {
            "source": "PowerShell",
            "icon": "terminal-powershell"
          },
          "Command Prompt": {
            "path": [
              "${env:windir}\Sysnative\cmd.exe",
              "${env:windir}\System32\cmd.exe"
            ],
            "args": [],
            "icon": "terminal-cmd"
          },
          "Git Bash": {
            "source": "Git Bash"
          }
        }
        

您 link 在您的问题中提出的 answer 提供了 对 Visual Studio 代码中使用的各种类型 shell 的概述,已更新以反映有关新 shell 配置文件的信息。


[1] 注意:如果找到 PowerShell (Core) v6+ 安装,它优先于内置 Windows PowerShell 版本。

您始终可以从官方网站 https://code.visualstudio.com/updates/v1_59(当前位于顶部)下载并安装以前的版本。

由于 1.60 版本存在漏洞,v1.59 是一个不错的选择。

禁用自动更新

已解释

  1. 打开用户设置 File > Preferences > Settings
  2. "update.mode": "none" 添加到您的设置中。

安装旧版本

之后你可以用下载的版本安装覆盖当前版本。

注意:等待下个版本修复它,所以记住你已经禁用了自动更新!

编辑:1

注意:现在这个错误已经被 VSCode 修复了。只需将您的 VSCode 更新到最新版本即可。 (2021 年 9 月 17 日)


我有一个临时解决方案。

先将这段代码粘贴到settings.json中并保存

"terminal.integrated.defaultProfile.windows": "Git Bash",

"terminal.integrated.profiles.windows": {
 "C:\Program Files\Git\bin\bash.exe": {
  "path": "",
  "args": []
 }
},

关闭前 VSCode select Output 而不是 Terminal

  1. 现在可以打开了VSCode
  2. 加载VSCode后,您需要点击终端。在此之后,您现在将看到 bash.
  3. Select 在你关闭 VSCode.
  4. 之前输出

参考:VSCode is suddenly defaulting to PowerShell for integrated terminal instead of $Bash in Windows

注意: 这不是解决方案。我分享这个是因为也许它可以让你免于失望。

这是我的第一个post,如果有任何错误,请告诉我,以便我可以更正。

我有同样的问题,但我尝试 运行 命令提示符。我通过添加到 ...\Code\User\settings.json

来修复它

"terminal.integrated.automationShell.windows": "cmd.exe",

只需在 settings.json

中将 CMD 替换为 Git Bash :-)
"terminal.integrated.profiles.windows": {
    "PowerShell": {
        "source": "PowerShell",
        "icon": "terminal-powershell"
    },
    "Command Prompt": {
        "path": [
            //"${env:windir}\Sysnative\cmd.exe",
            //"${env:windir}\System32\cmd.exe"
            "C:\PrivateProgramms\Git\bin\bash.exe"
        ],
        "args": [],
        "icon": "terminal-cmd"
    },
   "Git Bash": {
        "source": "Git Bash"
        //"path": [  "C:\PrivateProgramms\Git\bin\bash.exe" ],
        //"args": [],
        //"icon": "terminal-cmd"
    }
},
"terminal.integrated.defaultProfile.windows": "Command Prompt"