職場では、すべての実行可能ファイルが_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に統合する方法はありますか?
インターネットで答えを探した後、解決策を見つけることができませんでしたが、解決策を見つけて、ここに投稿して他の人が見ることができると考えました。異なるフォーラムの人々が同じ質問を持っていたが、回答。
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を正常にロードします:
別の解決策は、cmderの場所を新しいパスに設定できることです。
settings.jsonで設定するだけです
"terminal.integrated.Shell.windows": "C:\\Windows\\system32\\cmd.exe",
"terminal.integrated.shellArgs.windows": [
"/k %CMDER_ROOT%\\vendor\\init.bat"
]
cmder github issue で見つけることができます
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 Codeとの競合を回避します。何らかの理由で実際にスペースを含むパスからCmderを起動する必要がある場合は、各スペースの前に
^
シンボルを追加して、C:\\Example Directory for Test\\Cmder
がC:\\Example^ Directory^ for^ Test\\Cmder
ファイルのsettings.json
になるようにする必要があります。
それは私のために働いています。私の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設定に追加します。楽しめ!
私が見つけた最良の解決策:迅速かつ簡単。
"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"],
非常に簡単な解決策( 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"
のコメントインとコメントアウトにより、cmd
とcmder
を簡単に切り替えることもできます。
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",
このソリューションはオープン端末では有効ですが、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
)