Au travail, il existe une politique de sécurité d'entreprise dans laquelle tous les exécutables ne peuvent s'exécuter qu'à partir de C:\Program Files
Ou C:\Program Files (x86)
.
Dans Visual Studio Code, dans settings.json
, En utilisant les paramètres suivants:
{
"terminal.integrated.Shell.windows": "C:\\Windows\\Sysnative\\cmd.exe",
"terminal.integrated.shellArgs.windows": [
"/k C:\\Program Files (x86)\\Cmder\\vendor\\init.bat"
]
}
... à l'initialisation du terminal intégré, je reçois le message d'erreur suivant:
'C:\Program' is not recognized as an internal or external command,
operable program or batch file.
En raison de l'impressionnante convention de dénomination des fichiers/répertoires de Windows autorisant les espaces, il est difficile de pointer vers l'un des chemins Program File
.
VSCode ne l'aime pas lorsque vous échappez au caractère espace, et ce code me donne l'erreur Invalid escape character in string
. Lorsque j'essaye de changer la propriété en ceci:
{
...
"terminal.integrated.shellArgs.windows": [
"/k C:\\Program\ Files\ (x86)\\Cmder\\vendor\\init.bat"
]
}
...Je reçois le message d'erreur suivant:
'C:\ProgramFiles' is not recognized as an internal or external command,
operable program or batch file.
Enfin, essayez d'entourer le chemin entre guillemets comme ceci:
{
...
"terminal.integrated.shellArgs.windows": [
"/k \"C:\\Program Files (x86)\\Cmder\\vendor\\init.bat\""
]
}
... me donne ce message d'erreur:
'\"C:\Program Files (x86)\Cmder\vendor\init.bat\""' is not recognized as an
internal or external command,
operable program or batch file.
Existe-t-il un moyen d'intégrer Cmder dans VSCode?
Après avoir parcouru Internet pour trouver des réponses, je n'ai pas trouvé de solution, mais je l'ai trouvée et j'ai pensé que je pourrais la poster ici pour que d'autres puissent la voir, car j'ai vu que des gens de différents forums avaient la même question mais il n'y avait pas répondre.
Sous Windows, il existe un /X
Pour la commande dir
, qui indique:
/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.
Ainsi, l'exécution d'une commande dir /X
Sur C:\
Affiche ce qui suit:
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)
...
Vous pouvez utiliser le nom abrégé du répertoire PROGRA~2
Pour remplacer Program Files (x86)
et avoir les paramètres suivants dans votre settings.json
Pour VS Code:
{
"terminal.integrated.Shell.windows": "C:\\Windows\\Sysnative\\cmd.exe",
"terminal.integrated.shellArgs.windows": [
"/k C:\\PROGRA~2\\Cmder\\vendor\\init.bat"
]
}
Qui charge Cmder avec succès dans le terminal intégré:
une autre solution est que vous pouvez définir votre emplacement cmder dans un nouveau chemin
et définissez simplement vos paramètres.json
"terminal.integrated.Shell.windows": "C:\\Windows\\system32\\cmd.exe",
"terminal.integrated.shellArgs.windows": [
"/k %CMDER_ROOT%\\vendor\\init.bat"
]
vous pouvez le trouver sur problème github cmder
L'équipe Cmder suggère d'ajouter un caractère ^
Avant chaque espace de votre chemin, au lieu d'utiliser l'approche de dénomination 8dot3.
Exemple:
{
"terminal.integrated.Shell.windows": "C:\\Windows\\Sysnative\\cmd.exe",
"terminal.integrated.shellArgs.windows": [
"/k C:\\Program Files^ (x86)\\Cmder\\vendor\\init.bat"
]
}
Espaces dans le chemin
⚠ ATTENTION: L'interpréteur de ligne de commande dans Windows a quelques problèmes avec espaces dans le chemin, comme
C:\Program Files (x86)\Cmder
. Nous faisons non recommandé pour installer Cmder dans un chemin qui contient des espaces.Au lieu de cela, nous vous recommandons d'installer Cmder dans un chemin qui ne contient aucun espace, tel que:
C:\apps\Cmder
OuC:\tools\Cmder
Pour éviter tout conflit avec VS Code.Si, pour une raison quelconque, vous avez vraiment besoin de lancer Cmder à partir d'un chemin avec des espaces, vous devrez peut-être ajouter un symbole
^
Avant chaque espace, de sorte queC:\\Example Directory for Test\\Cmder
DeviendraC:\\Example^ Directory^ for^ Test\\Cmder
Dans votre fichiersettings.json
.
C'est du travail pour moi. Mon répertoire racine Cmder: D:\soft\cmder
, attention à toi!
"terminal.integrated.env.windows": {"CMDER_ROOT": "D:\\soft\\cmder"},
"terminal.integrated.shellArgs.windows": ["/k D:\\soft\\cmder\\vendor\\init.bat"],
Ajoutez-le dans vos paramètres VSCode. Profitez-en!
La meilleure solution que j'ai trouvée: rapide et facile.
"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"],
Une solution très simple ( source ):
Créez un fichier à la racine de votre dossier cmder vscode.bat
avec le code suivant.
@echo off
SET CMDER_ROOT=C:\cmder <--your path to cmder
"%CMDER_ROOT%\vendor\init.bat"
Ensuite, dans vos paramètres vscode, ajoutez ce qui suit à votre settings.json
:
"terminal.integrated.Shell.windows": "C:\\WINDOWS\\sysnative\\cmd.exe",
"terminal.integrated.shellArgs.windows": ["/K", "C:\\cmder\\vscode.bat"] <-- your path
Vous pouvez également basculer facilement entre cmd
et cmder
en commentant in and out "terminal.integrated.shellArgs.windows"
.
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"
],
Remplacez les deux [cmder_root] par votre répertoire d'installation Cmder.
deuxième solution
"terminal.integrated.Shell.windows": "C:\\Program Files\\cmder\\vendor\\git-for-windows\\bin\\bash.exe",
Cette solution est bonne sur un terminal ouvert mais rompt les appels cmd lancés via des plugins avec des arguments comme npm build - lint, etc.
Une solution pour y remédier consiste à créer un init.bat personnalisé qui encapsule ces appels et à le référencer sur 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
)