VS Codeのエージェントモードを拡張するには、を試してください!

ターミナルプロファイル

ターミナルプロファイルは、実行可能パス、引数、その他のカスタマイズで構成されるプラットフォーム固有のシェル構成です。デフォルトでは、いくつかのプロファイルが自動的に検出され、カスタマイズしたり追加したりすることができます。

プロファイルの例

{
  "terminal.integrated.profiles.windows": {
    "Custom Init": {
      "path": "pwsh.exe",
      "args": [
         "-noexit",
         "-file",
         "${env:APPDATA}\\PowerShell\\custom-init.ps1"
      ]
    }
  },
  "terminal.integrated.defaultProfile.windows": "Custom Init"
}

上記の例でAPPDATA環境変数に示されているように、ターミナルプロファイルで変数を使用できます。変数リファレンスのトピックで利用可能な変数の一覧を確認できます。

新しいターミナルのドロップダウンからもアクセスできるターミナル: デフォルトプロファイルの選択コマンドを実行して、デフォルトプロファイルを設定します。

Select Default Profile is located at the bottom of the dropdown menu attached to the new terminal button

デフォルトのターミナルプロファイルシェルは、LinuxおよびmacOSでは$SHELLに、WindowsではPowerShellにデフォルト設定されます。VS Codeは、ほとんどの標準シェルを自動的に検出し、それらをデフォルトとして設定することができます。

プロファイルの設定

新しいプロファイルを作成するには、ターミナル: デフォルトプロファイルの選択コマンドを実行し、シェルをベースにするためにシェルの右側にある設定ボタンを有効にします。これにより、settings.jsonファイルで手動で調整できる新しいエントリが設定に追加されます。

プロファイルは、pathまたはsource、および一連のオプションの引数を使用して作成できます。sourceはWindowsでのみ利用可能で、VS CodeがPowerShellまたはGit Bashのインストールを検出するために使用できます。あるいは、シェル実行可能ファイルへの直接のpathを使用することもできます。以下に、いくつかのプロファイル設定の例を示します。

{
  "terminal.integrated.profiles.windows": {
    "PowerShell -NoProfile": {
      "source": "PowerShell",
      "args": ["-NoProfile"]
    }
  },
  "terminal.integrated.profiles.linux": {
    "zsh (login)": {
      "path": "zsh",
      "args": ["-l"]
    }
  }
}

プロファイルでサポートされるその他の引数は次のとおりです

  • overrideName: 実行中のプログラムを検出する動的なターミナルタイトルを、静的なプロファイル名で置き換えるかどうかを示すブール値です。
  • env: 環境変数とその値を定義するマップで、変数を環境から削除するにはnullに設定します。これは、terminal.integrated.env.<platform>設定を使用してすべてのプロファイルに対して構成できます。
  • icon: プロファイルに使用するアイコンIDです。
  • color: アイコンをスタイルするためのテーマカラーIDです。

ヒント: path、args、および env はすべて変数の解決をサポートしています。

デフォルトプロファイルは、terminal.integrated.defaultProfile.*設定を使用して手動で定義できます。これは既存のプロファイル名に設定する必要があります。

{
  "terminal.integrated.profiles.windows": {
    "my-pwsh": {
      "source": "PowerShell",
      "args": ["-NoProfile"]
    }
  },
  "terminal.integrated.defaultProfile.windows": "my-pwsh"
}

ヒント: 統合ターミナルシェルはVS Codeのアクセス許可で実行されます。管理者権限や異なるアクセス許可でシェルコマンドを実行する必要がある場合は、ターミナル内でrunas.exeなどのプラットフォームユーティリティを使用してください。

組み込みプロファイルの削除

組み込みプロファイルを削除し、新しいターミナルドロップダウンに表示されないようにするには、プロファイルの名前をnullに設定します。たとえば、WindowsでGit Bashプロファイルを削除するには、この設定を使用します。

{
  "terminal.integrated.profiles.windows": {
    "Git Bash": null
  }
}

タスク/デバッグプロファイルの設定

デフォルトでは、タスク/デバッグ機能はデフォルトプロファイルを使用します。デフォルトに重いPowerShellスタートアップスクリプトやPOSIX非準拠のシェルが含まれている場合など、これは理想的ではないかもしれません。デバッグ/タスク機能でのみ使用するプロファイルを設定するには、terminal.integrated.automationProfile.<platform>設定を使用します。

{
  "terminal.integrated.defaultProfile.osx": "fish",
  // Use a fully POSIX-compatible shell and avoid running a complex ~/.config/fish/config.fish
  // for tasks and debug
  "terminal.integrated.automationProfile.osx": {
    "path": "/bin/sh"
  }
}

プロファイル固有のキーボードショートカット

専用のキーボードショートカットを介して特定のプロファイルでターミナルを起動するには、workbench.action.terminal.newWithProfileコマンドを使用します。このコマンドは、プロファイル名とオプションの場所を引数として受け取ります。たとえば、Ctrl+Shift+Tをバインドしてzshプロファイルでターミナルを開くには

{
  "key": "ctrl+shift+t",
  "command": "workbench.action.terminal.newWithProfile",
  "args": {
    "profileName": "zsh",
    "location": "editor"
  }
}

安全でないプロファイルの検出

一部のシェルは、Windows環境で他のユーザーによって書き込まれる可能性のあるパスなど、デフォルトで安全でないパスにインストールされます。VS Codeはこれらを検出しますが、ターミナル: デフォルトプロファイルの選択コマンドを介して明示的に構成されるまで、適切なプロファイルとして公開しません。安全でないプロファイルを構成する際には、追加される前に警告が表示されます。

Shells with unsafe paths like c:\msys64 will show a warning before you can use the detected profile

Cmder

Cmder自体はターミナルですが、VS Codeで以下のプロファイルを使用してCmderシェルを使用できます。

{
  "terminal.integrated.profiles.windows": {
    "cmder": {
      "path": "C:\\WINDOWS\\System32\\cmd.exe",
      "args": ["/K", "C:\\cmder\\vendor\\bin\\vscode_init.cmd"]
    }
  },
  "terminal.integrated.defaultProfile.windows": "cmder"
}

このプロファイルは、CMDER_ROOT環境変数が設定されている場合に自動的に検出されるはずです。C:\cmderにインストールされている場合は、安全でないプロファイルとしても検出されます。詳細については、Cmderのwikiを参照してください。

Cygwin

Cygwin自体はターミナルですが、VS Codeで以下のプロファイルを使用してCygwinシェルを使用できます。

{
  "terminal.integrated.profiles.windows": {
    "Cygwin": {
      "path": "C:\\cygwin64\\bin\\bash.exe",
      "args": ["--login"]
    }
  },
  "terminal.integrated.defaultProfile.windows": "Cygwin"
}

このプロファイルは、デフォルトパスC:\cygwinまたはC:\cygwin64にインストールされている場合に、安全でないプロファイルとして自動的に検出されるはずです。

Git Bash

VS Codeがgit-bash.exe(ターミナル)ではなくbash.exe(シェル)を使用する場合のGit Bashの制限は、シェルセッション間で履歴が保持されないことです。これを回避するには、~/.bashrcまたは~/.bash_profileファイルに以下を追加します。

export PROMPT_COMMAND='history -a'

これにより、プロンプトが表示されるたびにシェルがhistory -aを呼び出し、セッションの現在のコマンドがバックアップ履歴ファイルにフラッシュされます。

MSYS2

MSYS2のbashシェルは、以下のプロファイルで構成できます。

{
  "terminal.integrated.profiles.windows": {
    "bash (MSYS2)": {
      "path": "C:\\msys64\\usr\\bin\\bash.exe",
      "args": ["--login", "-i"],
      "env": { "CHERE_INVOKING": "1" }
    }
  }
}

CHERE_INVOKING環境変数は、ログイン初期化スクリプトに対して、$HOMEで開くのではなく、作業ディレクトリを保持するように指示するために使用されます。

このプロファイルは、デフォルトパスC:\\msys64にインストールされている場合に、安全でないプロファイルとして自動的に検出されるはずです。

Windows PowerShell

PowerShell 6+がインストールされている場合、Windows PowerShellはデフォルトでプロファイルリストに含まれません。Windows PowerShellをプロファイルとして追加するには、新しいターミナルドロップダウンでデフォルトプロファイルの選択オプションを選択し、Windows PowerShell項目を選択します。これにより、プロファイルが構成され、デフォルトとして設定されます。

WSL

ローカルマシンでVS Codeを実行している場合、Windows Subsystem for Linuxシェルは自動的に検出されるはずです。設定によっては、多くのディストリビューションがインストールされている場合、これは煩わしいかもしれません。WSLプロファイルのより詳細な制御のために、自動検出はterminal.integrated.useWslProfiles設定で無効にでき、以下はWSLシェルを手動で構成する方法の例です。

{
  "terminal.integrated.profiles.windows": {
    "Debian (WSL)": {
      "path": "C:\\WINDOWS\\System32\\wsl.exe",
      "args": [
        "-d",
        "Debian"
      ]
    }
  }
}

よくある質問

ターミナルの$PATH環境変数に重複するパスがあるのはなぜですか?また、macOSではそれらが逆になっているのはなぜですか?

これは、VS Codeの環境を使用してターミナルが起動する方法が原因でmacOSで発生する可能性があります。VS Codeが初めて起動するときに、"開発環境"を読み込むために、構成されたシェルをログインシェルとして起動し、~/.profile/~/.bash_profile/~/.zprofileスクリプトを実行します。ターミナルが起動すると、それもログインシェルとして実行され、標準パスを前面に配置し(例: /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin)、シェル環境を再初期化します。

よりよく理解するには、オペレーティングシステムに組み込まれたターミナル内で内部ログインシェルを起動することで、何が起こっているかをシミュレートできます。

# Add /test to the beginning of $PATH
export PATH=/test:$PATH
# Echo $PATH, /test should be at the beginning
echo $PATH
# Run bash as a login shell
bash -l
# Echo $PATH, the values should be jumbled
echo $PATH

残念ながら、Linuxとは異なり、macOSはユーザーがシステムにログインするときにログインシェルを実行しないため、スタンドアロンのmacOSターミナルはすべてデフォルトでログインシェルとして実行されます。これは、プロファイルスクリプト内でエイリアスを初期化するような「悪い動作」を促します。エイリアスは非ログインシェルで実行されるrcスクリプトに記述されるべきです。

これには2つの直接的な修正方法があります。1つ目は、"terminal.integrated.inheritEnv": falseを設定することです。これにより、ターミナルの環境からほとんどの環境変数が削除されますが、一部の重要な変数(HOMESHELLTMPDIRなど)は除外されます。

もう1つの修正方法は、ターミナルプロファイルを作成し、そのargs[]に設定することで、ターミナルでログインシェルを実行しないようにすることです。この修正方法を採用する場合は、エイリアスが設定されたシェルにのみ適用されるため、プロファイルスクリプト内のすべてのエイリアスを~/.bashrc/~/.zshrcファイルに移動するようにしてください。