解决VSCode使用Cmder作为默认终端问题

前言

  Shaun 最近想换换新口味,想尝试用 Cmder 作为 VSCode 下的默认终端,不想再继续使用 git-bash 了,因为 git-bash 有时会出现一些乱码问题。但是在用 VSCode 集成 Cmder 时出现了几个问题。

问题篇

  如果在 VSCode 用户设置文件中直接添加 Cmder.exe 及其路径,那么在使用 VSCode 终端时会重新打开一个 Cmder 窗口,而不是直接显示在 VSCode 的「终端」里。Shaun 想要的是 Cmder 就是 VSCode 的终端,就在 VSCode 里,就和原有cmd 终端一样,在 VSCode 下的终端可以直接输入相关命令,而不是另外弹出一个命令行窗口。

解决方案篇

方法一

将 Cmder 放进一个文件夹中,文件夹名不带空格,比如 Shaun 所有的绿色软件全部放在 D:\ProgramFiles 下,在 VSCode 用户设置文件中添加:

1
2
3
4
"terminal.integrated.shell.windows": "C:\\Windows\\Sysnative\\cmd.exe",
"terminal.integrated.shellArgs.windows": [
"/k D:\\ProgramFiles\\Cmder\\vendor\\init.bat"
],

方法二

一部分用户可能有点强迫症 ๑乛◡乛๑,硬是要把绿色软件还放入系统盘中的 Program Files 文件夹里,这样在 VSCode 里配置 Cmder 作为默认终端时就会出现问题。主要是因为 Program Files 文件夹名中有空格(这里吐槽一下带空格的文件名真鸡儿坑爹,命令行中根本无法访问,这应该是巨硬的历史遗留问题了, 特立独行的支持带空格的路径名,想显摆一下自己,但以目前的情况看,这种支持简直无力吐槽,造成了一堆问题,和 Windows 路径名中的 \ 有的一拼,都是逼死现代程序员的设计 _(´ཀ`」 ∠)_)。好了,吐槽的话也就说到这里了,如果配置路径里无法避免 Program Files 文件夹,这里有三种解决方案:

  1. Windows 在支持带空格的长文件名的同时,也会分配一个短名称,可以称为该文件夹的别名,通过这个别名就可以在命令行中访问该文件夹,获取这个别名的方法有:在命令行中输入 dir /X ,即可在文件夹名之前的一列的看到该别名,若没有别名则为空白,若要添加别名则需要加入 /N 参数。Shaun 这里显示别名如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $ dir /X
    驱动器 C 中的卷是 System
    卷的序列号是 XXXX-XXXX

    C:\ 的目录

    .........

    2018/05/16 19:21 <DIR> PROGRA~1 Program Files
    2018/05/17 15:14 <DIR> PROGRA~2 Program Files (x86)

    ..........

    由上面可知 Program Files 文件夹的别名为 PROGRA~1,而 Program Files (x86) 文件夹的别名为 PROGRA~2,在配置路径时只需要用别名替换相应的文件夹名即可,如下:

    1
    2
    3
    4
    5
    6
    {
    "terminal.integrated.shell.windows": "C:\\Windows\\Sysnative\\cmd.exe",
    "terminal.integrated.shellArgs.windows": [
    "/k C:\\PROGRA~1\\Cmder\\vendor\\init.bat"
    ]
    }
  2. 通过转义符添加 " " 使 Program Files 作为一个整体,如下:

    1
    2
    "terminal.integrated.shell.windows": "cmd.exe",
    "terminal.integrated.shellArgs.windows": ["/k", "C:\\\"Program Files\"\\Cmder\\vendor\\init.bat"],
  3. 直接在系统环境变量中新建一个变量,将 Cmder 的根目录加进去,如下:

    变量名变量值
    CMDER_ROOTC:\Program Files

    再在 VSCode 用户设置文件中添加:

    1
    2
    3
    4
    "terminal.integrated.shell.windows": "C:\\Windows\\system32\\cmd.exe",
    "terminal.integrated.shellArgs.windows": [
    "/k %CMDER_ROOT%\\vendor\\init.bat"
    ]

通过以上几种方法(推荐直接使用方法一),就能成功在 VSCode 中集成 Cmder,可以直接在 VSCode 的终端里享受 Cmder 了。

后记

  没有什么好说的了,该吐槽也已经吐槽完了。方法二 Shaun 试过,只是感觉应该可行,有问题的小伙伴可以在下方留言(这是不可能的,这辈子都不会有人留言的,反正也没人会看到的 ╮(╯▽╰)╭)。以上解决方案全部来自网络,Shaun 只是做个总结记录,万一以后碰到类似问题至少有多种方案可以尝试。

参考资料

[1] How to use Cmder in Visual Studio Code?

[2] Setting Cmder.exe as integrated shell still opens in separate window

[3] IntelliJ idea webstrom Visual Studio Code vscode 设置cmder为默认终端 Terminal