web-dev-qa-db-ja.com

Visual Studio CodeでCmderを使用する方法

職場では、すべての実行可能ファイルが_C:\Program Files_またはC:\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"
    ]
}
_

...統合端末の初期化時に、次のエラーメッセージが表示されます。

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

スペースを許可するWindowsのすばらしいファイル/ディレクトリ命名規則のため、_Program File_パスの1つを指すのは困難です。

スペース文字をエスケープすると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に統合する方法はありますか?

19
homersimpson

インターネットで答えを探した後、解決策を見つけることができませんでしたが、解決策を見つけて、ここに投稿して他の人が見ることができると考えました。異なるフォーラムの人々が同じ質問を持っていたが、回答。

Windowsには、dirコマンド用の_/X_があります。

_  /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)を置換し、VS Codeの_settings.json_で次の設定を行うことができます。

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

30
homersimpson

別の解決策は、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 issue で見つけることができます

7
Ari Maulana

別のアプローチ。

Cmderチームは、8dot3命名アプローチを使用する代わりに、パスの各スペースの前に^文字を追加することを提案しています。

例:

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


公式Cmder wiki から取得:

パス内のスペース

注意:Windowsのコマンドラインインタープリターには、パス内のスペースなどのいくつかの問題がありますC:\Program Files (x86)\Cmder。スペースを含むパスにCmderをインストールすることは推奨されません

代わりに、スペースを含まないパスにCmderをインストールすることをお勧めします。たとえば、C:\apps\CmderまたはC:\tools\Cmderは、VS Codeとの競合を回避します。

何らかの理由で実際にスペースを含むパスからCmderを起動する必要がある場合は、各スペースの前に^シンボルを追加して、C:\\Example Directory for Test\\CmderC:\\Example^ Directory^ for^ Test\\Cmderファイルのsettings.jsonになるようにする必要があります。

5
David Refoua

それは私のために働いています。私の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設定に追加します。楽しめ!

1
Willard Wong

私が見つけた最良の解決策:迅速かつ簡単。

"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

非常に簡単な解決策( 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

"terminal.integrated.shellArgs.windows"のコメントインとコメントアウトにより、cmdcmderを簡単に切り替えることもできます。

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

両方の[cmder_root]をCmderインストールディレクトリに置き換えます。

第二の解決策

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

このソリューションはオープン端末では有効ですが、npm build-lintなどの引数を持つプラグインを介して起動されたcmd呼び出しを中断します。

これを修正する解決策は、これらの呼び出しをラップし、sellArgsで参照するカスタムinit.batを作成することです。

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