VS Code - Cygwin 作为集成终端

Posted

技术标签:

【中文标题】VS Code - Cygwin 作为集成终端【英文标题】:VS Code - Cygwin as Integrated Terminal 【发布时间】:2018-02-14 03:47:47 【问题描述】:

我想在我的 Windows 笔记本电脑上使用 Cygwin 作为 Visual Studio Code 上的集成终端(因为这可以让我使用 Linux 终端命令 git 和 G++ 等)但是当我为 "terminal.integrated.shell.windows": 设置值时到 Cygwin 应用程序的地址 (.exe) 然后它会打开一个新的 Cygwin 终端,而不是留在 VS Code 中。

所以我的问题是:我可以使用集成到 VS Code 终端中的 Cygwin 并使用它在其上使用命令(mkdirrm 等),但也可以使用 git 命令并将其用作集成编译器和调试器(一般来说,但至少对于 C++)?我该怎么办?

【问题讨论】:

您的计算机上安装了 Windows 10 吗?如果是这样,您可以只使用 WSL 而不是 Cygwin。 此外,@user2766296 我不相信 VS Code 无论如何都可以与 Cygwin 作为终端一起使用。 @ifconfig,确实如此。我刚试过(见下面的答案),效果很好。甚至外壳颜色 (.dircolors) 也有效。 【参考方案1】:

自 VS Code 1.55(2021 年 3 月)以来,使用终端配置文件:

"terminal.integrated.profiles.windows": 
  "Cygwin": 
    "path": "C:\\cygwin\\bin\\bash.exe",
    "args": ["--login"],
    "env": "CHERE_INVOKING": "1"
  

【讨论】:

【参考方案2】:

对于 VS Code v1.60,采用以下方法:"

    "terminal.integrated.profiles.windows": 
      "Cygwin": 
        "source": "PowerShell",
        "args": ["C:\\cygwin\\cygwin.bat -i /Cygwin-Terminal.ico -"]
       
     

缺点:打开的目录将是根文件夹。

【讨论】:

【参考方案3】:

如果您取出以下部分,终端将在您打开的项目中启动。

// Make it a login shell
/*"terminal.integrated.shellArgs.windows": [
    "--login"
  "-l"
]*/,

【讨论】:

【参考方案4】:

VS Code 只允许您一次设置一个默认终端配置,并且用户可能希望在任何时候都可以使用多个 shell,例如 CMD、Powershell 和 Cygwin Bash,最好使用 Visual Studio代码扩展名为Shell Launcher。

此工具可让您随时启动任意数量的 shell。首先,您需要将 CTRL-SHIFT-T 热键重新分配给 shellLauncher 或使用其他未使用的热键。

然后,进入 VS Code 的 settings.json 并添加以下块:

"shellLauncher.shells.windows": [
  
    "shell": "C:\\Windows\\System32\\cmd.exe",
    "label": "cmd"
  ,
  
    "shell": "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
    "label": "PowerShell"
  ,
  
    "shell": "C:\\cygwin\\bin\\bash.exe",
    "args": ["-l"],
    "env": "CHERE_INVOKING": "1",
    "label": "Cygwin Bash"
  
],

注意:根据需要更改上述路径

现在,当您点击分配的热键时,您将获得配置的可用终端的下拉列表。

【讨论】:

【参考方案5】:

结合以上答案,这是我的工作配置。


    "terminal.integrated.shell.windows": "C:\\cygwin\\bin\\bash.exe",
    "terminal.integrated.env.windows": 
        "CHERE_INVOKING": "1"
    ,
    "terminal.integrated.shellArgs.windows": [
        "--login",
        "-i"
    ],

在 ubuntu 18.04lts 测试,在 Virtualbox 5.2.12 中运行 Windows 7 Ultimate 32bt

【讨论】:

Bash 选项:-i Force the shell to run interactively--login Make this shell act as if it had been directly invoked by login. When the shell is interactive, this is equivalent to starting a login shell with ‘exec -l bash’. When the shell is not interactive, the login shell startup files will be executed. ‘exec bash -l’ or ‘exec bash --login’ will replace the current shell with a Bash login shell. 对于 64 位 Cygwin,请记住将 Cygwin 与 cygwin64 一起放置,否则,这似乎到目前为止有效。 visual studio官网正确配置代码:code.visualstudio.com/docs/editor/integrated-terminal 这警告您正在使用已弃用的设置,但我找不到解决方法。【参考方案6】:

这些配置设置对我有用:


  // start bash, not the mintty, or you'll get a new window
  "terminal.integrated.shell.windows": "C:\\cygwin\\bin\\bash.exe",
  // Use this to keep bash from doing a 'cd $HOME'
  "terminal.integrated.env.windows": 
    "CHERE_INVOKING": "1"
  ,
  // Make it a login shell
  "terminal.integrated.shellArgs.windows": [
    "-l"
  ],

【讨论】:

有没有办法将此添加为额外的 shell 选项,以便您在创建新终端窗口时可以选择使用 cmd 或 bash? 另外,对于 64 位 Cygwin 安装,路径可能是 "C:\\cygwin64\\bin\\bash.exe" 这个设置可以放在workspace文件.code-workspace中吗?那会很有帮助。 您要将这些设置添加到哪个文件?【参考方案7】:

您可以直接调用Cygwin.bat 而不会出现 ENV 问题:


    // Replace with your Cygwin.bat file path 
    "terminal.integrated.shell.windows": "C:\\cygwin64\\Cygwin.bat",

确保 BAT 脚本适合您的 Cygwin。

【讨论】:

但是终端>运行活动文件不再起作用我该如何解决这个@Nick Tsai @Mark,恐怕集成会失去Run Active File 功能,但只有Run Selected Text 有效。

以上是关于VS Code - Cygwin 作为集成终端的主要内容,如果未能解决你的问题,请参考以下文章

VS Code 集成终端的颜色主题

启用或禁用 VS Code 集成终端选项卡?

如何为 VS Code 的集成终端设置节点版本?

如果我正在调用 Typescript 构建任务,为啥 VS Code 集成终端不起作用?

VS Code 集成终端在粘贴时弄乱了剪贴板 python 代码

VS Code 在集成终端而不是调试控制台中开始调试