ist jetzt verfügbar! Lesen Sie über die neuen Funktionen und Fehlerbehebungen vom November.

Terminalprofile

Terminalprofile sind plattformspezifische Shell-Konfigurationen, die aus einem ausführbaren Pfad, Argumenten und anderen Anpassungen bestehen. Standardmäßig werden mehrere Profile automatisch erkannt, die angepasst oder hinzugefügt werden können.

Beispielprofil

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

Sie können Variablen in Terminalprofilen verwenden, wie im obigen Beispiel mit der Umgebungsvariablen APPDATA gezeigt. Eine Liste der verfügbaren Variablen finden Sie im Thema Variablenreferenz.

Konfigurieren Sie Ihr Standardprofil, indem Sie den Befehl Terminal: Standardprofil auswählen ausführen, der auch über das Dropdown-Menü für neue Terminals zugänglich ist.

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

Die Standard-Shell des Terminalprofils ist unter Linux und macOS $SHELL und unter Windows PowerShell. VS Code erkennt automatisch die meisten Standard-Shells, die dann als Standard konfiguriert werden können.

Profile konfigurieren

Um ein neues Profil zu erstellen, führen Sie den Befehl Terminal: Standardprofil auswählen aus und aktivieren Sie die Konfigurationsschaltfläche auf der rechten Seite der Shell, auf der es basieren soll. Dies fügt einen neuen Eintrag zu Ihren Einstellungen hinzu, der in Ihrer settings.json-Datei manuell angepasst werden kann.

Profile können entweder über einen path oder eine source sowie eine Reihe optionaler Argumente erstellt werden. Eine source ist nur unter Windows verfügbar und kann verwendet werden, um VS Code die Installation von PowerShell oder Git Bash erkennen zu lassen. Alternativ kann ein path verwendet werden, der direkt auf die Shell-Executable zeigt. Hier sind einige Beispielprofilkonfigurationen

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

Weitere unterstützte Argumente in Profilen sind

  • overrideName: Ein boolescher Wert, der angibt, ob der dynamische Terminaltitel, der erkennt, welches Programm ausgeführt wird, durch den statischen Profilnamen ersetzt werden soll oder nicht.
  • env: Eine Map, die Umgebungsvariablen und ihre Werte definiert. Setzen Sie die Variable auf null, um sie aus der Umgebung zu entfernen. Dies kann für alle Profile über die Einstellung terminal.integrated.env.<platform> konfiguriert werden.
  • icon: Eine Icon-ID, die für das Profil verwendet werden soll.
  • color: Eine Theme-Farb-ID zum Stylen des Icons.
Tipp

Pfad, Argumente und Umgebung unterstützen alle Variablenauflösung

Das Standardprofil kann manuell mit den Einstellungen terminal.integrated.defaultProfile.* definiert werden. Dies sollte auf den Namen eines vorhandenen Profils gesetzt werden

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

Die integrierte Terminal-Shell läuft mit den Berechtigungen von VS Code. Wenn Sie einen Shell-Befehl mit erhöhten (Administrator-) oder anderen Berechtigungen ausführen müssen, verwenden Sie Plattform-Dienstprogramme wie runas.exe innerhalb eines Terminals.

Integrierte Profile entfernen

Um ein integriertes Profil zu entfernen und zu verhindern, dass es im Dropdown-Menü für neue Terminals angezeigt wird, setzen Sie den Namen des Profils auf null. Um beispielsweise das Git Bash-Profil unter Windows zu entfernen, verwenden Sie diese Einstellung

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

Task-/Debug-Profil konfigurieren

Standardmäßig verwenden die Task-/Debug-Funktionen das Standardprofil. Dies ist möglicherweise nicht ideal, wenn Ihr Standardprofil ein schwerfälliges PowerShell-Startskript oder eine nicht POSIX-konforme Shell enthält. Um ein Profil so zu konfigurieren, dass es nur in den Debug-/Task-Funktionen verwendet wird, verwenden Sie die Einstellung 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"
  }
}

Profilspezifische Tastenkombinationen

Das Starten eines Terminals mit einem bestimmten Profil über eine dedizierte Tastenkombination kann mit dem Befehl workbench.action.terminal.newWithProfile erreicht werden. Dieser Befehl nimmt einen Profilnamen und optional einen Speicherort als Argumente entgegen. Um beispielsweise Strg+Umschalt+T zu binden, um ein Terminal mit dem zsh-Profil zu öffnen

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

Unsichere Profilerkennung

Bestimmte Shells werden standardmäßig in unsicheren Pfaden installiert, z. B. einem Pfad, in den ein anderer Benutzer in einer Windows-Umgebung schreiben könnte. VS Code erkennt diese immer noch, exponiert sie jedoch nicht als ordnungsgemäßes Profil, bis sie explizit über den Befehl Terminal: Standardprofil auswählen konfiguriert wurden. Bei der Konfiguration eines unsicheren Profils wird vor dem Hinzufügen eine Warnung angezeigt

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

Cmder

Cmder selbst ist ein Terminal, aber Sie können die Cmder-Shell in VS Code mit dem folgenden Profil verwenden

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

Dieses Profil sollte automatisch erkannt werden, wenn die Umgebungsvariable CMDER_ROOT gesetzt ist. Es wird auch als unsicheres Profil erkannt, wenn es unter C:\cmder installiert ist. Weitere Informationen finden Sie im Wiki von Cmder.

Cygwin

Cygwin selbst ist ein Terminal, aber Sie können die Cygwin-Shell in VS Code mit dem folgenden Profil verwenden

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

Dieses Profil sollte automatisch als unsicheres Profil erkannt werden, wenn es unter den Standardpfaden C:\cygwin oder C:\cygwin64 installiert ist.

Git Bash

Eine Einschränkung von Git Bash, wenn VS Code bash.exe (die Shell) im Gegensatz zu git-bash.exe (das Terminal) verwendet, besteht darin, dass der Verlauf über Shell-Sitzungen hinweg nicht beibehalten wird. Sie können dies umgehen, indem Sie Folgendes zu Ihren ~/.bashrc- oder ~/.bash_profile-Dateien hinzufügen

export PROMPT_COMMAND='history -a'

Dadurch wird die Shell history -a aufrufen, jedes Mal wenn die Eingabeaufforderung angezeigt wird, was die Befehle der aktuellen Sitzung in die zugrunde liegende Verlaufdatei leert.

MSYS2

Die Bash-Shell von MSYS2 kann mit dem folgenden Profil konfiguriert werden

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

Die Umgebungsvariable CHERE_INVOKING wird verwendet, um das Login-Initialisierungsskript anzuweisen, das Arbeitsverzeichnis beizubehalten, anstatt in $HOME zu öffnen.

Dieses Profil sollte automatisch als unsicheres Profil erkannt werden, wenn es unter dem Standardpfad C:\\msys64 installiert ist.

Windows PowerShell

Wenn PowerShell 6+ installiert ist, ist Windows PowerShell standardmäßig nicht in der Profilliste enthalten. Um Windows PowerShell als Profil hinzuzufügen, wählen Sie die Option Standardprofil auswählen im Dropdown-Menü für neue Terminals aus und wählen Sie das Windows PowerShell-Element aus. Dies konfiguriert das Profil und legt es als Ihr Standard fest.

WSL

Beim Ausführen von VS Code auf Ihrem lokalen Computer sollten die Shells des Windows Subsystem for Linux automatisch erkannt werden. Je nach Einrichtung kann dies lästig sein, wenn Sie viele Distributionen installiert haben. Für eine feinere Kontrolle über die WSL-Profile kann die automatische Erkennung mit der Einstellung terminal.integrated.useWslProfiles deaktiviert werden, und hier ist ein Beispiel, wie Sie eine WSL-Shell manuell konfigurieren können

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

Häufig gestellte Fragen

Warum gibt es doppelte Pfade in der $PATH-Umgebungsvariable des Terminals und/oder warum sind sie unter macOS umgekehrt?

Dies kann unter macOS aufgrund der Art und Weise geschehen, wie das Terminal mit der Umgebung von VS Code gestartet wird. Wenn VS Code zum ersten Mal gestartet wird, um Ihre "Entwicklungsumgebung" zu sourcen, startet es Ihre konfigurierte Shell als Login-Shell, die Ihre ~/.profile/~/.bash_profile/~/.zprofile-Skripte ausführt. Wenn nun das Terminal gestartet wird, läuft es ebenfalls als Login-Shell, die die Standardpfade nach vorne stellt (z. B. /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin) und Ihre Shell-Umgebung neu initialisiert.

Um ein besseres Verständnis zu bekommen, können Sie simulieren, was passiert, indem Sie eine innere Login-Shell in der integrierten Terminalanwendung Ihres Betriebssystems starten

# 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

Leider laufen unter macOS, im Gegensatz zu Linux, alle eigenständigen Terminals standardmäßig als Login-Shells, da macOS keine Login-Shell ausführt, wenn sich der Benutzer beim System anmeldet. Dies fördert "schlechtes Verhalten", wie das Initialisieren von Aliasen in Ihrem Profilskript, wenn diese in Ihrem rc-Skript leben sollten, da dies bei Nicht-Login-Shells ausgeführt wird.

Dafür gibt es zwei direkte Lösungen. Die erste besteht darin, "terminal.integrated.inheritEnv": false zu setzen, was die meisten Umgebungsvariablen aus der Terminalumgebung entfernt, mit Ausnahme einiger wichtiger (wie HOME, SHELL, TMPDIR usw.).

Die andere Lösung besteht darin, keine Login-Shell mehr im Terminal auszuführen, indem ein Terminalprofil erstellt und dessen args auf [] gesetzt werden. Wenn Sie diese Lösung wählen, sollten Sie sicherstellen, dass alle Aliase in Ihren Profilskripten in Ihre ~/.bashrc/~/.zshrc-Datei verschoben werden, da Aliase nur für die Shell gelten, in der sie gesetzt sind.

© . This site is unofficial and not affiliated with Microsoft.