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

hom*_*son 23 cmder visual-studio-code

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

在Visual Studio Code中settings.json,使用以下设置:

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

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

'C:\Program' is not recognized as an internal or external command, 
operable program or batch file.
Run Code Online (Sandbox Code Playgroud)

由于Windows的令人敬畏的文件/目录命名约定允许空格,因此很难指向其中一个Program File路径.

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

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

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

'C:\ProgramFiles' is not recognized as an internal or external command,
operable program or batch file.
Run Code Online (Sandbox Code Playgroud)

最后,尝试用这样的引号括起路径:

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

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

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

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

hom*_*son 35

在网上寻找答案之后,我找不到解决办法,但我想出来并认为我可以在这里发帖给别人看,因为我看到来自不同论坛的人有同样的问题,但没有回答.

在Windows中,有一个/Xdir命令,其中规定:

  /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.
Run Code Online (Sandbox Code Playgroud)

因此,执行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)
...
Run Code Online (Sandbox Code Playgroud)

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

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

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

在VS Code集成终端中成功加载Cmder的图像.

  • 谢谢!这正是我所需要的. (2认同)
  • 如果你们找不到 C:/Windows/Sysnative 文件夹,请尝试以下操作:`C:\\WINDOWS\\SysWOW64\\cmd.exe` (2认同)

小智 10

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

在给出解决方案时,图像来自nikrolls

并在你的settings.json中设置

"terminal.integrated.shell.windows": "C:\\Windows\\system32\\cmd.exe",
"terminal.integrated.shellArgs.windows": [
    "/k %CMDER_ROOT%\\vendor\\init.bat"
]
Run Code Online (Sandbox Code Playgroud)

你可以在cmder github问题上找到它

  • 设置环境变量还有一些 _other_ 好处:[github.com/cmderdev/cmder/wiki/Setting-up-Environment-Variables#should-i-use-this-method](https://github. com/cmderdev/cmder/wiki/Setting-up-Environment-Variables#should-i-use-this-method) (2认同)

Dav*_*oua 6

另一种方法.

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

例:

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


取自官方Cmder维基:

路径中的空间

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

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

如果由于某种原因确实需要从包含空格的路径启动Cmder,则可能需要^在每个空格之前添加一个符号,这样C:\\Example Directory for Test\\Cmder就会C:\\Example^ Directory^ for^ Test\\Cmdersettings.json文件中出现.

  • 根据我的经验,您必须转义括号和空格。这是`C:\ Program Files(x86)\ Cmder`的工作方式:“” C:\\ Program ^ Files ^ ^(x86 ^)\\ Cmder“`。 (2认同)

B. *_*kba 6

这是实现“2021”的新方法

本文相关

第 1 步:下载 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",
Run Code Online (Sandbox Code Playgroud)