web-dev-qa-db-fra.com

Comment utiliser Cmder dans Visual Studio Code?

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?

19
homersimpson

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é:

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

30
homersimpson

une autre solution est que vous pouvez définir votre emplacement cmder dans un nouveau chemin

image was from nikrolls when giving the solution

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

7
Ari Maulana

Une autre approche.

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"
    ]
}


Tiré de wiki officiel de Cmder :

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 Ou C:\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 que C:\\Example Directory for Test\\Cmder Deviendra C:\\Example^ Directory^ for^ Test\\Cmder Dans votre fichier settings.json.

5
David Refoua

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!

1
Willard Wong

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"],
0
Markus Ethur

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".

0
Matin Sasan

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",
0
prochini

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
)
0
rasenfer