如何在Visual Studio代码中使用Cmder?

时间:2017-08-18 22:34:56

标签: visual-studio-code cmder

在工作中,有一项企业安全策略,其中所有可执行文件仅允许用完C:\Program FilesC:\Program Files (x86)

在Visual Studio代码的settings.json中,使用以下设置:

{
    "terminal.integrated.shell.windows": "C:\\Windows\\Sysnative\\cmd.exe",
    "terminal.integrated.shellArgs.windows": [
        "/k C:\\Program Files (x86)\\Cmder\\vendor\\init.bat"
    ]
}

...关于集成终端的初始化,我收到以下错误消息:

'C:\Program' is not recognized as an internal or external command, 
operable program or batch file.

因为Windows'令人敬畏的文件/目录命名约定允许空格,很难指向其中一条Program File路径。

VSCode在你转义空格字符时并不喜欢它,这段代码给了我错误Invalid escape character in string。当我尝试将属性更改为:

{
    ...
    "terminal.integrated.shellArgs.windows": [
        "/k C:\\Program\ Files\ (x86)\\Cmder\\vendor\\init.bat"
    ]
}

...我收到以下错误消息:

'C:\ProgramFiles' is not recognized as an internal or external command,
operable program or batch file.

最后,尝试用这样的引号包围路径:

{
    ...
    "terminal.integrated.shellArgs.windows": [
        "/k \"C:\\Program Files (x86)\\Cmder\\vendor\\init.bat\""
    ]
}

...给我这个错误信息:

'\"C:\Program Files (x86)\Cmder\vendor\init.bat\""' is not recognized as an 
internal or external command,
operable program or batch file.

有没有办法将Cmder集成到VSCode中?

12 个答案:

答案 0 :(得分:24)

在网上搜索答案之后,我找不到解决方案,但我想出来并认为我可以在这里发帖给别人看,因为我已经看到来自不同论坛的人有同样的问题,但没有答案。

在Windows中,/X命令有一个dir,其中指出:

  /X          This displays the short names generated for non-8dot3 file
              names.  The format is that of /N with the short name inserted
              before the long name. If no short name is present, blanks are
              displayed in its place.

因此,在dir /X上执行C:\命令会显示以下内容:

C:\>dir /X
 Volume in drive C is OSDisk
 Volume Serial Number is XXXX-XXXX

 Directory of C:\

...
08/17/2017  08:02 PM    <DIR>          PROGRA~1     Program Files
08/09/2017  03:58 PM    <DIR>          PROGRA~2     Program Files (x86)
...

您可以使用目录短名称PROGRA~2替换Program Files (x86),并在settings.json中为VS代码进行以下设置:

{
    "terminal.integrated.shell.windows": "C:\\Windows\\Sysnative\\cmd.exe",
    "terminal.integrated.shellArgs.windows": [
        "/k C:\\PROGRA~2\\Cmder\\vendor\\init.bat"
    ]
}

在集成终端中成功加载Cmder:

Image of Cmder being successfully loaded in the VS Code integrated terminal.

答案 1 :(得分:6)

另一个解决方案是您可以将cmder位置设置为新路径

image was from nikrolls when giving the solution

并在您的settings.json中设置

<menu class="vertical-mini"><ul class="vertical-menu">...

您可以在cmder github issue

找到它

答案 2 :(得分:5)

另一种方法。

Cmder团队建议在路径中的每个空格之前加一个^字符,而不要使用8dot3命名方法。

示例:

{
    "terminal.integrated.shell.windows": "C:\\Windows\\Sysnative\\cmd.exe",
    "terminal.integrated.shellArgs.windows": [
        "/k C:\\Program Files^ (x86)\\Cmder\\vendor\\init.bat"
    ]
}


取自official Cmder wiki

  

路径中的空格

     

注意:Windows中的命令行解释器在路径中的空格中存在一些问题,例如C:\Program Files (x86)\Cmder。我们不建议在包含空格的路径中安装Cmder。

     

相反,我们建议在不包含任何空格的路径中安装Cmder,例如:C:\apps\CmderC:\tools\Cmder,以避免与VS Code发生冲突。

     

如果您出于某种原因确实需要从带有空格的路径中启动Cmder,则可能需要在每个空格之前添加一个^符号,以使C:\\Example Directory for Test\\Cmder变为C:\\Example^ Directory^ for^ Test\\Cmder您的settings.json文件。

答案 3 :(得分:2)

这是实现“2021”的新方法

this article有关

第 1 步:Download Cmder

第 2 步:将 Cmder 保存到 C:\ 驱动器

第 3 步:在 VSCode 中打开 Settings.json(文件 - 首选项 - 设置...)

第 4 步:输入此参数:

"terminal.integrated.profiles.windows": {
    "Cmder": {
      "path": "${env:windir}\\System32\\cmd.exe",
      "args": ["/k", "C:\\cmder\\vendor\\bin\\vscode_init.cmd"]
    }
  },
  "terminal.integrated.defaultProfile.windows": "Cmder",

答案 4 :(得分:1)

这对我有用。我的Cmder根目录:D:\soft\cmder,关注你的!

"terminal.integrated.env.windows": {"CMDER_ROOT": "D:\\soft\\cmder"},
"terminal.integrated.shellArgs.windows": ["/k D:\\soft\\cmder\\vendor\\init.bat"],

在VSCode设置中添加它。享受它!

答案 5 :(得分:0)

https://github.com/cmderdev/cmder/wiki/Seamless-VS-Code-Integration

 "terminal.integrated.shell.windows": "cmd.exe",

  "terminal.integrated.env.windows": {
  "CMDER_ROOT": "[cmder_root]"
  },
  "terminal.integrated.shellArgs.windows": [
    "/k [cmder_root]\\vendor\\init.bat"
  ],

用您的Cmder安装目录替换[cmder_root]。

第二个解决方案

"terminal.integrated.shell.windows": "C:\\Program Files\\cmder\\vendor\\git-for-windows\\bin\\bash.exe",

答案 6 :(得分:0)

一个非常简单的解决方案(source):

使用以下代码在cmder文件夹vscode.bat的根目录中创建一个文件。

@echo off
SET CMDER_ROOT=C:\cmder <--your path to cmder
"%CMDER_ROOT%\vendor\init.bat"

然后在您的vscode设置中将以下内容添加到您的settings.json中:

"terminal.integrated.shell.windows": "C:\\WINDOWS\\sysnative\\cmd.exe",
 "terminal.integrated.shellArgs.windows": ["/K", "C:\\cmder\\vscode.bat"] <-- your path

您还可以通过注释cmd和注释cmder来轻松在"terminal.integrated.shellArgs.windows"scp之间切换。

答案 7 :(得分:0)

我发现的最佳解决方案: 快速简便。

"terminal.external.windowsExec": "C:\\Utils\\Cmder\\Cmder.exe",
"terminal.integrated.shell.windows": "C:\\WINDOWS\\sysnative\\cmd.exe"
"terminal.integrated.shellArgs.windows" : ["/K","C:\\Utils\\cmder\\vendor\\init.bat"],

答案 8 :(得分:0)

此解决方案在开放终端上效果很好,但会中断通过插件启动的cmd调用,这些插件带有npm build-lint等参数。

解决此问题的一种方法是创建一个自定义的init.bat,包装这些调用并将其引用在sellArgs上。

  

settings.json

"terminal.integrated.shell.windows": "cmd.exe",
"terminal.integrated.shellArgs.windows": [
    "/K C:\\SoftDev\\App\\Cmder\\vendor\\vstudio.bat"
],

  

C:\ SoftDev \ App \ cmder \ vendor \ vstudio.bat

@echo off
if "%1" == "" (
    C:\SoftDev\App\cmder\vendor\init.bat
) else (
    cmd %1 %2 %3 %4 %5 %6 %7 %8 %9
    exit
)

答案 9 :(得分:0)

@Ari Maulana的魅力就像......

在变量上添加“ CMDER_ROOT”,然后在settings.json中设置

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

答案 10 :(得分:0)

有两个扩展将Cmder包含在VS Code中,但是无论如何它们都不能在Win 7中使用(我知道它已经很老了),而这里的一些答案却不适用于我的情况。

位置详细信息:

cmd.exe = C:\Windows\System32\cmd.exe
I am using a portable version of Cmder in C:\cmder\Cmder.exe
init.bat = C:\cmder\vendor\init.bat
setting.json = C:\Users\Admin\AppData\Roaming\Code\User\settings.json

这是我的settings.json

{
    "window.zoomLevel": 0,
    "terminal.integrated.shell.windows": "C:\\Windows\\System32\\cmd.exe",
    "terminal.integrated.shellArgs.windows": [
        "/k C:\\cmder\\vendor\\init.bat"
    ]
}

屏幕截图可以正常使用

Cmder integrated into VS Code

注意:我不需要将Cmder添加到环境路径

答案 11 :(得分:-1)

Windows中的命令行解释器在路径中存在一些空格问题,例如C:\ Program Files \ Cmder或C:\ Program Files(x86)\ Cmder。而是创建一个新文件夹,例如“ apps”,并且使用路径没有空格,例如c:\ apps