VSCode 在集成终端和任务时突然默认使用 Powershell

当我今天早上醒来并启动 VSCode 时,我的默认终端已经启动了,当运行任务时,现在是 powershell,而不是 Git Bash。我在窗户上。我试过更改设置 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": ""
}

我发现这个 相关职位制作了默认的 Powershell,但我没有看到任何关于我的设置是不正确的... 特别是因为我的目标是相反的-停止 Powershell!

14740 次浏览

更新 : 版本1.60.0有一个错误。升级到版本1.60.1或更高修复

这个错误表现在以下 症状:

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

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

  • 此外,如果一个给定的文件夹或工作区在退出 Visual Studio Code 时恰好有一个集成终端打开,那么当集成终端下次自动重新打开时启动的 shell 仍然是内置的默认 shell,而不是配置的 shell。相比之下,如果重新打开没有自动打开集成终端,那么手动打开 是的将尊重已配置的默认 shell,以后手动创建另一个 shell 实例也是如此。

参见 GitHub 第132150期

下面的信息被证明与 bug 无关,但希望仍然是关于 Visual Studio Code 最近在如何配置集成终端的 shell 方面的变化的有用的常规信息:


从遗留的默认 shell 设置迁移到 外壳剖面图:

  • 最近,通过所谓的 一个 href = “ https://code.visalstudio.com/docs/Editor/Integrated-Terminal # _ configuring-files”rel = “ noReferrer”> shell < em > profile (在设置 "terminal.integrated.profiles.*"时可选定义) ,ABC0和 "terminal.integrated.shellArgs.*"设置为 < em > 已弃用 被取代为 更灵活的模型,允许定义 < em > 多个 shell 以便从中进行选择,同时相关的强制性 "terminal.integrated.defaultProfile.*"设置引用配置文件的名称来使用 默认情况下——这可能是一个明确定义的自定义配置文件或一个内置的、平台适当的默认配置文件。

    • 注意: 以上设置名称中的 *代表适当的 平台标识符,即 windowslinuxosx(macOS)。
  • 在1.60.1版本中,如果遗留的 "terminal.integrated.shell.*"设置是 还有,则 新的设置优先(尽管在 settings.json中编辑 "terminal.integrated.shell.*"时的工具提示表明这种更改尚未发生)。

    • 在没有 都有设置的情况下,使用 Visual Studio Code 的 < em > 内置 默认 shell,在 窗户上使用 < em > PowerShell [1],在 类 Unix 平台上使用用户的默认 shell,即 指定的环境变量

    • 最近的 Visual Studio Code 版本,启动 之前 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 选择器图标(< img src = “ https://i.stack.imgur.com/vru5o.png”alt = “ shell selector”/>)的向下箭头部分,选择 Select Default Profile,它将显示一个已定义配置文件的列表,以从中选择默认配置文件——在没有显式定义配置文件的情况下,提供 标准配置文件(见下文)。

    • 这转换为 settings.json中的 terminal.integrated.defaultProfile.*设置,其值是所选的 shell 配置文件的名称——这可能是 内置的配置文件的名称,也可能是在 "terminal.integrated.profiles.*"中显式定义的其中一个配置文件的名称

    • 注意: 这个 shell 在默认情况下也用于 任务(在 tasks.json中定义) ,但是可以通过指向另一个 shell 的可执行文件的 "terminal.integrated.automationShell.*"设置来覆盖它。

  • settings.json文件中,您可以选择 ,也可以选择 创建一个平台适用的 terminal.integrated.profiles.*设置,使用 < a href = “ https://code.visalstudio.com/docs/Editor/Integration-Terminal # _ configuring-files”rel = “ noReferrer”> shell profile 感兴趣:

    • 注意: 即使您的 settings.json包含 没有(平台适当的) "terminal.integrated.profiles.*"设置,Visual Studio 代码也有它所知道的内置 标准配置文件,并在选择 违约 shell 时提供它们供选择。

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

      • 注意: 您可以选择这样做,以 定制的标准配置文件。但是,如果您的目的仅仅是为了 自定义概要文件-参见 这个答案的例子-就没有必要在 "terminal.integrated.profiles.*"设置中创建标准概要文件,因为即使没有明确定义,Visual Studio Code 也知道它们。

      • 通过 File > Preferences > Settings(Ctrl-,) ,搜索 profiles并点击平台适当的 Terminal > Integrated > Profiles > *设置下面的 Edit in settings.json; 这将打开 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"
        }
        }
        

您在问题中链接到的 回答提供了一个 VisualStudio 代码中使用的各种类型的 shell 的概述,该 回答已经更新,以反映关于新 shell 概要文件的信息。


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

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

由于1.60版本被窃听,1.59版本是一个很好的候选版本。

禁用自动更新

解释 给你

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

安装旧版本

然后,您可以用下载版本的安装覆盖当前版本。

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

编辑: 1

注意: 现在这个 bug 已经被 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 之前选择 Output而不是 Terminal

  1. 现在可以打开 VSCode 了
  2. 加载 VSCode 之后,您需要单击 Terminal。
  3. 在关闭 VSCode 之前选择输出。

参考资料: 在 Windows 中,VSCode 突然默认为 PowerShell 集成终端,而不是 $Bash

注意: < em > 这不是一个解决方案,我分享这个是因为它可能会让你免于失望。

这是我的第一个帖子,如果有任何错误请让我知道,以便我可以纠正它。

我有同样的问题,但我尝试运行命令提示符。我修复它通过添加到... 代码用户设置。 json

“ Terminal al.Integrated.AutomationShell.windows”: “ cmd.exe”,

只是用 Git Bash 替换了 CMD: ——)在 setings.json 中

"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"

这可能与 第138999期有关,第138999期将使用 PR 154290承诺91b82c0对 VSCode 1.70(2022年7月)进行缓解/增强

增加可用配置文件的准备屏障

等待长达20秒的配置文件准备就绪,这样就可以确保在启动第一个终端之前我们知道实际的默认终端。
没想到会花这么长时间。

对于具有同步用户设置的 VSCode,配置文件可能需要比预期更多的时间才能完全加载,因此这种解决方案具有优势。