首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将MSYS2 shell集成到窗口上的Visual代码中?

如何将MSYS2 shell集成到窗口上的Visual代码中?
EN

Stack Overflow用户
提问于 2017-08-23 10:03:41
回答 11查看 29.9K关注 0票数 33

我试图将MSYS2 shell集成到集成终端中。以下是我的用户设置:

代码语言:javascript
运行
复制
{
    "terminal.integrated.shell.windows": "C:\\msys64\\usr\\bin\\bash.exe",
    "terminal.integrated.shellArgs.windows": ["--login", "-i"]
}

但是,我遇到了一个问题,--login将当前的工作目录更改为Windows。我希望当前目录位于工作区的根目录。

我的进一步尝试是尝试添加一个标志-c 'cd ${workspaceRoot}'。然而,巴什会在一开始就崩溃。我可以通过删除--login正确地进入当前目录,但是没有登录模式,所有其他的shell命令(lscd等)都不可用。

如何正确地将MSYS2 shell集成到vscode中?

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2017-10-19 20:01:37

原版但不起作用的100% (接受为答案)

这将正确启动MSYS2 bash,以便执行.bash_login:

代码语言:javascript
运行
复制
"terminal.integrated.shell.windows": "C:\\msys64\\msys2_shell.cmd",
"terminal.integrated.shellArgs.windows": ["-defterm", "-mingw64", "-no-start", "-here"]

编辑

最初的答案在当时看来是可行的,但当我试图开始使用VSCode中的任务时,它显然不起作用。试图运行一个简单地称为make的任务会导致以下错误:

/usr/bin/bash: /d:没有这样的文件或目录 终端进程以出口代码: 127结束。

从其他答案中,使用"terminal.integrated.shellArgs.windows": ["--login", "-i"]获得了几乎正确的环境(MSYS而不是MINGW64),但是在错误的目录中启动,"terminal.integrated.shellArgs.windows": ["-lic", "cd $OLDPWD; exec bash"]在正确的目录中启动,具有正确的环境,但无法运行任务。

到目前为止,我想出的解决方案似乎还不错。

在VSCode设置中:

代码语言:javascript
运行
复制
"terminal.integrated.shell.windows": "C:\\msys64\\usr\\bin\\bash.exe",
"terminal.integrated.env.windows":
{
    "MSYSTEM": "MINGW64",
    //"MSYS2_PATH_TYPE": "inherit",
    "MSVSCODE": "1"
},

在.bashrc中:

代码语言:javascript
运行
复制
if [ ! -z "$MSVSCODE" ]; then
    unset MSVSCODE
    source /etc/profile
    cd $OLDPWD
fi
票数 23
EN

Stack Overflow用户

发布于 2017-12-29 02:05:51

若要抑制当前目录中的工作目录更改,请将CHERE_INVOKING环境变量设置为非空值:

代码语言:javascript
运行
复制
    "terminal.integrated.env.windows": {
        "CHERE_INVOKING": "1"
    },

在MSYS登录脚本中,设置CHERE_INVOKING变量只会防止shell执行cd "${HOME}",而没有其他任何操作。

如果需要MinGW工具链,请将MSYSTEM环境变量设置为选择工具链。可识别的值为MSYS (默认值)、MINGW32或MINGW64。

代码语言:javascript
运行
复制
    "terminal.integrated.env.windows": {
        "MSYSTEM": "MINGW64",
    },

整体而言,VS代码设置可能如下所示:

代码语言:javascript
运行
复制
{
    "terminal.integrated.shell.windows": "C:\\msys64\\usr\\bin\\bash.exe",
    "terminal.integrated.shellArgs.windows": [
        "--login",
    ],
    "terminal.integrated.env.windows": {
        "CHERE_INVOKING": "1",
        "MSYSTEM": "MINGW64",
    },
}

为了提供一些关于CHERE_INVOKING的非常神秘的名称的上下文:chere显然是一个用于安装和管理“命令提示此处”文件夹上下文菜单项的Cygwin命令。,尽管MSYS2继承了Cygwin的环境变量,但实际上它并不继承命令本身。

票数 36
EN

Stack Overflow用户

发布于 2021-07-05 09:37:47

这里的答案来自现在(2021年7月)在VSCode中被废弃的旧方法--新建议的方法,将其添加到settings.json中:

代码语言:javascript
运行
复制
"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"
    },
    "MSYS2": {
      "path": "C:\\msys64\\usr\\bin\\bash.exe",
      "args": [
        "--login",
        "-i"
      ],
      "env": {
        "MSYSTEM": "MINGW64",
        "CHERE_INVOKING": "1"
      }
    }
  },

参考资料:配置-配置文件

票数 26
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45836650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档