如何从 Visual Studio 代码集成终端在 Windows 上使用 Bash?

How do I use Bash on Windows from the Visual Studio Code integrated terminal?

Visual Studio Windows 上的代码默认使用 PowerShell 作为集成终端。如果要使用Visual Studio中的Bash代码,需要经过哪些步骤?


You no longer need to type in bash.exe path manually. This answer is deprecated. Now you can switch to bash directly, if you have git installed in the default path. If you installed git to a different path you need to use the below solution.


https://git-scm.com/download/win 安装 Git。

然后打开Visual Studio代码并使用Ctrl + Shift + P[打开命令面板=45=]。然后键入“打开用户设置”,然后从下拉菜单中输入 select“打开用户设置”。

然后此选项卡将打开,左侧是默认设置,右侧是您的设置:

现在将这行代码复制到您自己的设置页面(右侧的窗格)并保存 - "terminal.integrated.shell.windows": "C:\Program Files\Git\bin\bash.exe"

注意: "C:\Program Files\Git\bin\bash.exe"bash.exe 文件所在的路径,来自 Git 安装。如果您将 Windows 子系统用于 Linux (WSL) Bash shell,路径将为 "C:\Windows\System32\bash.exe"

现在按 Ctrl + ` 从 Visual Studio 代码打开终端。你将有 Bash -

按住 Ctrl + ` 打开终端。 在终端内,键入 bash 以在终端中使用 Git Bash。 注意:确保您的计算机上安装了 Git Bash。

如果您想再次使用 PowerShell,只需在终端中输入 powershell。要使用 Windows 命令行,请在终端中键入 cmd

您选择的设置将用作默认设置。

至少对我来说,这将使 Visual Studio 代码打开一个新的 Bash window 作为外部终端。

如果您想要集成环境,您需要指向 Git 安装的 bin 文件夹中的 sh.exe 文件。

所以配置应该是C:\<my-git-install>\bin\sh.exe

这取决于你是否在当前用户或所有用户中安装了Git Bash:

如果所有用户都安装了它,那么在您的用户设置中输入 "terminal.integrated.shell.windows": "C:\Program Files\Git\bin\bash.exe" (Ctrl + 逗号)。

如果它仅安装在当前用户上,则将 "terminal.integrated.shell.windows": "C:\Users\<name of your user>\AppData\Local\Programs\Git\bin\bash.exe" 放入您的用户设置中 (Ctrl + Comma) .

如果上面列出的方法不起作用,那么您应该尝试 ,即 -

If you want the integrated environment you need to point to the sh.exe file inside the bin folder of your Git installation.

So the configuration should say C:\<my-git-install>\bin\sh.exe.

注: sh.exe 和 bash.exe 对我来说完全一样。应该没有区别吧。

我跟随 Paul DeCarlo 的 this tutorial 使用 Windows 子系统的 Bash 用于 Linux (WSL) 而不是 Git Bash Windows。它们与答案中的上述步骤相同,但请改用您的用户设置中的以下内容。

"terminal.integrated.shell.windows": "C:\Windows\sysnative\bash.exe",

这第一次对我有用...这对这东西来说很少见。

我正好在为一家 Fortune 500 公司提供咨询服务,遗憾的是 Windows 7 并且没有管理员权限。因此 Node.js、Npm、Visual Studio 代码等被推送到我的机器上——我无法更改太多,等等...

对于这台计算机 运行 Windows 7:

以下是我的新设置。不工作的被注释掉了。

{
    "update.channel": "none",
    "terminal.integrated.shell.windows": "C:\Program Files\Git\bin\bash.exe"
    //"terminal.integrated.shell.windows": "C:\Windows\sysnative\bash.exe"
}

更新: Visual Studio 代码的较新版本具有 Select 默认 Shell 命令在终端下拉菜单中:

请记住,它只列出了 %PATH% 环境变量中的 shells。对于不在您路径中的 shell,请参阅其他答案。

额外提示:当您启动bash时,它只会执行.bashrc,如果您在.bash_profile中有初始化命令,您必须将其复制到.bashrc。在GitBash.

中使用Conda enviroments是必不可少的

1.36 版本之前(2019 年 6 月)

现在最简单的方法(至少从 Visual Studio 代码 1.22 开始)是键入 Shift + Ctrl + P 打开 命令面板 并输入:

Select Default Shell

现在您可以轻松地 select 您的首选 shell 在您的路径 中找到 :

对于不在您的 %PATH% 中的 shell,请参阅其他答案。

参见 the complete Visual Studio Code shell reference。有很多肉。

  1. https://git-scm.com/download/win

    安装 Git
  2. 打开Visual Studio代码并按住Ctrl + `打开终端。

  3. 使用 Ctrl + Shift + P 打开命令面板.

  4. 类型 - Select 默认配置文件

  5. Select Git Bash 来自选项

  6. 点击终端中的+图标window

  7. 新终端现在将是 Git Bash 终端。给它几秒钟加载 Git Bash

  8. 您现在也可以在终端的下拉菜单中切换不同的终端。

对我来说,这是唯一有效的组合!

"terminal.integrated.shell.windows": "C:\Program Files\Git\git-cmd.exe",
"terminal.integrated.shellArgs.windows": [
  "--command=usr/bin/bash.exe",
  "-l",
  "-i"
]

以git-bash.exe为...shell.windows,每次bash都在VS外开!!

谢天谢地,它终于成功了!!否则,我打算完全清除 VS 并重新安装它(让我重新安装所有扩展并重做我的自定义设置!)

Git\bin 目录添加到Path 环境变量。该目录默认为 %ProgramFiles%\Git\bin。通过这种方式,您只需在每个终端中输入 bash 即可访问 Git Bash,包括 Visual Studio 代码的集成终端。

How to set the path and environment variables in Windows

我已经在 WSL 上设置了很多 conda 环境(Bash 在 Ubuntu 在 Windows), 所以我想在 Visual Studio 代码上使用相同的 Bash 安装。

为此,我只需要指定这个特定的 Bash 可执行文件的路径(而不是 Git-Bash[ 的 =35=]) Visual Studio 代码设置:

"terminal.integrated.shell.windows": "C:\Windows\System32\bash.exe"


PS:要确保 Ubuntu on Bash 可执行文件安装在 Windows 机器上的位置,请打开Command prompt(搜索:cmd)和运行:

where bash.exe

由于 Visual Studio 代码的最新更新,事情发生了一些变化。以下步骤对我有用。

  1. Ctrl + Shift + P 打开Visual Studio代码命令palate.

  2. 在文本区域输入 >preferences: Open Settings (JSON)

  3. 在您显示的 JSON 文件末尾添加以下行 右侧窗格。

    "terminal.integrated.shell.windows": "C:\Program Files\Git\bin\bash.exe"
    
  4. 关闭并重新打开您的 Visual Studio 代码实例。

这个答案与投票最高的答案相似,但有一个重要的区别:这个问题之前的很多答案都集中在 运行 Git Bash 而我的回答集中在 运行 WSL Bash.

  1. 在您的 Windows 10 机器上为 Linux 启用 Windows 子系统。

  2. 打开Visual Studio代码并按住Ctrl + `打开终端。

  3. 使用 Ctrl + Shift + P 打开命令选项板。

  4. 类型 - Select Default Shell.

  5. Select WSL Bash(不是 Git Bash)来自选项。

  1. 单击终端 window 中的 + 图标。新终端现在将是 WSL Bash 终端!

最新的 VS 代码:

  • 如果您看不到 settings.json,请转到菜单文件 -> 首选项 -> 设置(或按 Ctrl+,
  • 设置出现,看到两个选项卡用户(默认选择)和工作区。转到用户 -> 功能 -> 终端
  • 终端部分出现,参见link edit in settings.json。单击并添加 "terminal.integrated.shell.windows": "C:\Program Files\Git\bin\bash.exe",
  • 保存并重启 VS 代码。

Bash终端会反映在终端上

从 vscode 1.42.1 开始,我尝试了上述答案,它们的工作原理是让我得到一个 git bash 终端。因此,最重要的是,此设置仅适用于从终端打开 bash shell:

"terminal.integrated.shell.windows": "C:\Program Files\Git\bin\bash.exe"

然而,它也有不需要的副作用,也就是用于构建东西的 shell 并且会破坏 MS C++ 链,因为 [=24] 可以理解用于路径分隔符的 \ 字符=] 作为转义字符。对我来说,完整的修复要求我添加这个额外的变量,将其设置为 powershell:

"terminal.integrated.automationShell.windows": "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"

现在,我的 bash 终端和 Ctrl-Shift-BF5 可以毫无问题地工作。

哦,正如其他发帖人提到的,此信息的来源是 VSCode's documentation

分离或不相关的 shell 和 code [args] 支持怎么样?

虽然其他答案谈论如何配置和使用 VScode 集成 WSL bash 终端支持,但它们没有解决 "detached shells" 的问题:shell不是从 VScode 内启动的 s,或者以某种方式从与 IDE.

关联的 VScode 服务器实例获取 "disconnected" 的 s

这样的 shells 可能会产生如下错误:

Command is only available in WSL or inside a Visual Studio Code terminal.

或...

Unable to connect to VS Code server. Error in request

Here's a script 很容易解决这个问题。

我每天都使用它来连接 tmux 会话中的 shell 与特定 VScode 服务器实例,或修复已脱离的集成 shell它的托管 IDE.

#!/bin/bash
# codesrv-connect
#
#  Purpose:
#     Copies the vscode connection environment from one shell to another, so that you can use the
#     vscode integrated terminal's "code [args]" command to communicate with that instance of vscode
#     from an unrelated shell.
#
#  Usage:
#    1.  Open an integrated terminal in vscode, and run codesrv-connect
#    2.  In the target shell, cd to the same directory and run
#       ". .codesrv-connect", or follow the instruction printed by codesrv-connect.
#
#  Setup:
#    Put "codesrv-connect somewhere on your PATH (e.g. ~/bin)"
#
#  Cleanup:
#    - Delete abandoned .codesrv-connect files when their vscode sessions die.
#    - Do not add .codesrv-connect files to git repositories.
#
#  Notes:
#     The VSCODE_IPC_HOOK_CLI environment variable points to a socket which is rather volatile, while the long path for the 'code' alias is more stable: vscode doesn't change the latter even across a "code -r ." reload.  But the former is easily detached and so you need a fresh value if that happens.  This is what codesrv-connect does: it captures the value of these two and writes them to .codesrv-connect in the current dir.
#
#   Verinfo: v1.0.0 - les.matheson@gmail.com - 2020-03-31
#

function errExit {
    echo "ERROR: $@" >&2
    exit 1
}

[[ -S $VSCODE_IPC_HOOK_CLI ]] || errExit "VSCODE_IPC_HOOK_CLI not defined or not a pipe [$VSCODE_IPC_HOOK_CLI]"
if [[ $(which code) != *vscode-server* ]]; then
    errExit "The 'code' command doesn't refer to something under .vscode-server: $(type -a code)"
fi
cat <<EOF >.codesrv-connect
# Temp file created by $(which codesrv-connect): source this into your working shell like '. .codesrv-connect'
# ( git hint: add ".codesrv-connect" to .gitignore )
#
cd "$PWD"
if ! test -S "$VSCODE_IPC_HOOK_CLI"; then
    echo "ERROR: $VSCODE_IPC_HOOK_CLI not a socket. Dead session."
else
    export VSCODE_IPC_HOOK_CLI="$VSCODE_IPC_HOOK_CLI"
    alias code=$(which code)
    echo "Done: the 'code' command will talk to socket \"$VSCODE_IPC_HOOK_CLI\" now."
    echo "You can delete .codesrv-connect when the vscode server context dies, or reuse it in other shells until then."
fi
EOF

echo "# OK: run this to connect to vscode server in a destination shell:"
echo ". $PWD/.codesrv-connect"

如果您已经有 "bash"、"powershell""cmd" CLI,并且路径设置正确然后可以通过以下方式从一个 CLI 切换到另一个 CLI。

Ctrl + ' : Opens the terminal window with default CLI.

bash + enter : Switch from your default/current CLI to bash CLI.

powershell + enter : Switch from your default/current CLI to powershell CLI.

cmd + enter : Switch from your default/current CLI to cmd CLI.

我使用的 VS Code 版本是 1.45.0

对于 独家新闻 用户:

"terminal.integrated.shell.windows": "C:\Users\[YOUR-NAME]\scoop\apps\git\current\usr\bin\bash.exe",
"terminal.integrated.shellArgs.windows": [
  "-l",
  "-i"
],

在最新的稳定版本中,即 1.54,禁用 ConPTY 解决了我的问题。我正在写这篇文章,以防它也能解决你的问题。

{

 "terminal.integrated.shell.windows": "C:\path\to\bin\bash.exe",
 "terminal.integrated.windowsEnableConpty": false
}

要在 Visual Studio 代码中打开终端,您不需要像到处都推荐的那样使用 Ctrl + `,因为手指操作非常不方便。更好的解决方案是:

Ctrl + j

(2021,VSC v.1.55.1)

如何将 Git Bash 添加为默认 Terminal,对于那些不在默认路径中安装 Git Bash 的用户:

  1. In Visual Studio 代码打开 Settings 使用 Ctrl + ,
  2. a) 在 Search settings 中(屏幕截图上的红框)字段类型 integrated automation b) 或者只需单击“功能”->“终端”(ss 上的蓝色框)
  3. 单击在settings.json中编辑
  4. "terminal.integrated.shell.windows": " " 字段中输入您的 bash.exe 位置

注1:因为它是一个JSON文件,记得在你的路径中使用双\而不是\

注意 2: 不要将 bash.exe(它在 bin 文件夹中)与 git-bash.exe 混淆,在第一种情况下 bash 终端将留在 VSC 内部,第二个它将在外部打开。

我的 VS Code 版本:1.56.1 (code --version)

配置集成终端的用户设置:

  • Ctrl + Shift + P
  • 类型:用户
  • select:首选项:打开用户设置
  • 单击:打开设置 (JSON) 按钮(靠近右上角)

settings.json:

{
    "terminal.integrated.tabs.enabled": true,
    "terminal.integrated.shell.windows": "<your installation path>\Git\bin\bash.exe",
    "terminal.integrated.defaultProfile.windows": "Git Bash",
    "terminal.integrated.profiles.windows": {
        "Git Bash": {
            "path": "<your installation path>\Git\bin\bash.exe",
            "icon": "terminal-bash"
        },
        "Command Prompt": {
            "path": "${env:windir}\System32\cmd.exe",
            "icon": "terminal-cmd"
        },
        "Windows PowerShell": {
            "path": "C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe",
            "icon": "terminal-powershell"
        }
    }
}

terminal.integrated.defaultProfile.windows

这个 属性 只会在您点击“添加新终端”(“+”)按钮时将 GitBash 设置为默认。在启动时将其设置为默认值是不够的。

terminal.integrated.shell.windows

将显示详细警告。但是需要此配置才能使 selected shell(这里是 GitBash)默认启动。

问题过滤

在“问题”选项卡上,在输入字段旁边,单击过滤器图标我选中了“仅显示活动文件”选项,以便在处理其他任何内容时使这个已弃用的错误消失。

Visual Studio 代码可以在配置 Terminal: Select Default Profile 的菜单中检测并列出已安装的 Git Bash,正如许多其他答案已经描述的那样,但这在我身上从未发生过。对于那些也不像我那么幸运的人,您可以将自定义配置文件手动添加到 Visual Studio 代码的 settings.json 中:

{
    // Tested in Visual Studio Code version 1.58.2, 1.59.1
    // Notice: my git install path is `D:\Git\bin\bash.exe`

    //"terminal.integrated.shell.windows": "D:\Git\bin\bash.exe",
    // This works fine for me for a long time,
    // but in latest versions this is reported as deprecated,
    // you can keep this and sometimes Visual Studio Code will prompt to help
    // `migrate` it into new setting.

    // This part can be generated by Visual Studio Code
    "terminal.integrated.profiles.windows": {
        // This seems to be a reserved profile name, and also does not work for
        // me
        "Git Bash": {
            "path": "D:\Git\bin\bash.exe",
            "icon": "terminal-bash"
        },
        "PowerShell": {
            "source": "PowerShell",
            "icon": "terminal-powershell"
        },
        "Command Prompt": {
            "path": [
                "${env:windir}\Sysnative\cmd.exe",
                "${env:windir}\System32\cmd.exe"
            ],
            "args": [],
            "icon": "terminal-cmd"
        },

        // Add your custom one with a different profile name from "Git Bash"
        "gitbash": {
            "path": "D:\Git\bin\bash.exe",
            "icon": "terminal-bash"
        }
    },
    // Set the custom profile as default
    "terminal.integrated.defaultProfile.windows": "gitbash",

    // ...
}

将此添加到 settings.json

{
    "terminal.integrated.profiles.windows": {
        "PowerShell": {
            "source": "Git Bash",
            "icon": "terminal-bash"
        },

VS 代码 1.60.0

因为我遇到了前面的问题,Git Bash 虽然以前安装过,但根本没有被识别。要让上述任何解决方案发挥作用,您需要按照本文 中讨论和下面列出的说明进行操作。

  1. 转到您的 settings.json
  2. 通过添加 "git.enabled": true
  3. 启用 git bash
  4. 通过添加"git.path": "<YOUR PATH TO GIT>\Git\bin\bash.exe"
  5. 定义它的路径

之后,@rustyhu 定义的指令将起作用。

PS:希望我能在调试最初提出的问题时为您节省几个小时的时间

只需转到 visual studio 代码中的 settings.json 并添加此行:

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

VSCODE 1.63.2

即使合并此处的答案,我也无法正常工作。也许,我有一个有点异国情调的设置。我会得到这个错误,设置 "terminal.integrated.defaultProfile.windows": "Git Bash" 它仍然只会打开 Powershell 并且 Git Bash 无处可见:

我的解决方法是通过更改指向 bash 的路径来修改 Command Prompt 的条目,然后将其设置为默认值,如下所示:

"terminal.integrated.profiles.windows": {
    "PowerShell": {
        "source": "PowerShell",
        "icon": "terminal-powershell"
    },
    "Command Prompt": {
        "path": [
            "C:\Path\To\Git\bin\bash.exe",
            // "${env:windir}\Sysnative\cmd.exe",
            // "${env:windir}\System32\cmd.exe"
        ],
        "args": [],
        "icon": "terminal-cmd"
    
},
"terminal.integrated.defaultProfile.windows": "Command Prompt",