Как использовать Cmder в коде Visual Studio?
На работе существует политика безопасности предприятия, в которой всем исполняемым файлам разрешено работать только C:\Program Files
или C:\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?
Ответы
Ответ 1
После очистки Интернета от ответов я не смог найти решение, но я понял это и думал, что могу опубликовать его здесь, чтобы другие могли видеть, поскольку я видел, что люди из разных форумов имели тот же вопрос, но ответа не было.
В 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 успешно в интегрированном терминале:
![Изображение Cmder успешно загружено в интегрированный терминал VS Code.]()
Ответ 2
Другое решение - вы можете установить местоположение cmder на новый путь.
![image was from nikrolls when giving the solution]()
и просто установить в вашем settings.json
"terminal.integrated.shell.windows": "C:\\Windows\\system32\\cmd.exe",
"terminal.integrated.shellArgs.windows": [
"/k %CMDER_ROOT%\\vendor\\init.bat"
]
вы можете найти его на cmder github.
Ответ 3
Другой подход.
Команда Cmder предлагает использовать символ ^
перед каждым пробелом на вашем пути, вместо того, чтобы использовать метод именования 8dot3.
Пример:
{
"terminal.integrated.shell.windows": "C:\\Windows\\Sysnative\\cmd.exe",
"terminal.integrated.shellArgs.windows": [
"/k C:\\Program Files^ (x86)\\Cmder\\vendor\\init.bat"
]
}
Пространства в пути
⚠ ВНИМАНИЕ. Интерпретатор командной строки в Windows имеет некоторые проблемы с пробелами в пути, например C:\Program Files (x86)\Cmder
. Мы не рекомендуем устанавливать Cmder в пути, содержащем пробелы.
Вместо этого мы рекомендуем устанавливать Cmder по пути, который не содержит пробелов, таких как: C:\apps\Cmder
или C:\tools\Cmder
чтобы избежать любых конфликтов с кодом VS.
Если вам по какой-то причине действительно нужно запустить Cmder из пути с пробелами, вам может понадобиться добавлять символ ^
перед каждым пробелом, так что C:\\Example Directory for Test\\Cmder
станет C:\\Example^ Directory^ for^ Test\\Cmder
в вашем файле settings.json
.
Ответ 4
Это работает для меня. Мой корневой каталог 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
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_root] на ваш каталог установки Cmder.
второе решение
"terminal.integrated.shell.windows": "C:\\Program Files\\cmder\\vendor\\git-for-windows\\bin\\bash.exe",
Ответ 6
Очень простое решение (источник):
Создайте файл в корне папки 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
, комментируя и cmder
"terminal.integrated.shellArgs.windows"
.
Ответ 7
Лучшее решение, которое я нашел:
Быстро и просто.
"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
Это решение хорошо работает на открытом терминале, но прерывает вызовы 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
)