316 lines
11 KiB
Markdown
316 lines
11 KiB
Markdown
Terminal profiles are platform-specific shell configurations comprised of
|
|
an executable path, arguments, and other customizations. By default
|
|
several profiles are automatically detected which can be customized or
|
|
added to.
|
|
|
|
Example profile:
|
|
|
|
```javascript
|
|
{
|
|
` `"terminal.integrated.profiles.windows": {
|
|
` `"Custom Init": {
|
|
` `"path": "pwsh.exe",
|
|
` `"args": [` `"-noexit",
|
|
` `"-file",
|
|
` `"${env:APPDATA}\\PowerShell\\custom-init.ps1"
|
|
` `]
|
|
` `}
|
|
` `},
|
|
` `"terminal.integrated.defaultProfile.windows": "Custom Init"
|
|
|
|
}
|
|
```
|
|
|
|
You can use variables in terminal profiles as shown in the example above
|
|
with the `APPDATA` environment variable. There is a list of
|
|
available variables in the{' '}
|
|
Variables Reference topic.
|
|
|
|
Configure your default profile by running the{' '}
|
|
Terminal: Select Default Profile command, which is also
|
|
accessible via the new terminal dropdown.
|
|
|
|
The default terminal profile shell defaults to `$SHELL` on
|
|
Linux and macOS and PowerShell on Windows. AVAP TM Dev Studio
|
|
will automatically detect most standard shells that can then be configured
|
|
as the default.
|
|
|
|
## Configuring profiles
|
|
|
|
To create a new profile, run the{' '}
|
|
Terminal: Select Default Profile command and activate the
|
|
configure button on the right side of the shell to base it on. This will
|
|
add a new entry to your settings that can be tweaked manually in your{' '}
|
|
`settings.json` file.
|
|
|
|
Profiles can be created using either a `path` or a{' '}
|
|
`source` , as well as a set of optional arguments. A{' '}
|
|
`source` is available only on Windows and can be used to let
|
|
AVAP TM Dev Studio detect the install of either{' '}
|
|
`PowerShell` or `Git Bash` . Alternatively, a{' '}
|
|
`path` pointing directly to the shell executable can be used.
|
|
Here are some example profile configurations:
|
|
|
|
```javascript
|
|
{
|
|
` `"terminal.integrated.profiles.windows": {
|
|
` `"PowerShell -NoProfile": {
|
|
` `"source": "PowerShell",
|
|
` `"args": ["-NoProfile"]
|
|
` `}
|
|
` `},
|
|
` `"terminal.integrated.profiles.linux": {
|
|
` `"zsh (login)": {
|
|
` `"path": "zsh",
|
|
` `"args": ["-l"]
|
|
` `}
|
|
` `}
|
|
|
|
}
|
|
```
|
|
|
|
Other arguments supported in profiles include:
|
|
|
|
* `overrideName` : A boolean indicating whether or not to replace the dynamic terminal title that detects what program is running with the static profile name.
|
|
* `env` : A map defining environment variables and their values, set the variable to null to delete it from the environment. This can be configured for all profiles using the{' '} `terminal.integrated.env.<platform>` setting.
|
|
* `icon` : An icon ID to use for the profile.
|
|
* `color` : A theme color ID to style the icon.
|
|
|
|
The default profile can be defined manually with the{' '}
|
|
`terminal.integrated.defaultProfile.\*` settings. This should
|
|
be set to the name of an existing profile:
|
|
|
|
```javascript
|
|
{
|
|
` `"terminal.integrated.profiles.windows": {
|
|
` `"my-pwsh": {
|
|
` `"source": "PowerShell",
|
|
` `"args": ["-NoProfile"]
|
|
` `}
|
|
` `},
|
|
` `"terminal.integrated.defaultProfile.windows": "my-pwsh"
|
|
|
|
}
|
|
```
|
|
|
|
## Removing built-in profiles
|
|
|
|
To remove a built-in profile and prevent it from showing up in the new
|
|
terminal dropdown, set the name of the profile to `null` . For
|
|
example, to remove the `Git Bash` profile on Windows, use this
|
|
setting:
|
|
|
|
```javascript
|
|
{
|
|
` `"terminal.integrated.profiles.windows": {
|
|
` `"Git Bash": null
|
|
` `}
|
|
|
|
}
|
|
```
|
|
|
|
## Configuring the task/debug profile
|
|
|
|
By default, the task/debug features will use the default profile. This may
|
|
not be ideal if your default has a heavy PowerShell startup script or a
|
|
non-POSIX compliant shell for example. To configure a profile to be used
|
|
only in the debug/tasks features, use the{' '}
|
|
`terminal.integrated.automationProfile` .
|
|
`<platform>` setting:
|
|
|
|
```javascript
|
|
{
|
|
` `"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"
|
|
` `}
|
|
|
|
}
|
|
```
|
|
|
|
## Unsafe profile detection
|
|
|
|
Certain shells are installed in unsafe paths by default, like a path that
|
|
could be written to by another user on a Windows environment. AVAP
|
|
TM Dev Studio will still detect these but not expose them as a
|
|
proper profile until they have been explicitly configured via the{' '}
|
|
Terminal: Select Default Profile command. When
|
|
configuring an unsafe profile, there will be a warning before it's
|
|
added:
|
|
|
|
## Cmder
|
|
|
|
Cmder itself is a terminal, but you can use the [Cmder] shell in AVAP
|
|
TM Dev Studio with the following profile:
|
|
|
|
```javascript
|
|
{
|
|
` `"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"
|
|
|
|
}
|
|
```
|
|
|
|
This profile should be picked up automatically when the{' '}
|
|
`CMDER\_ROOT` environment variable is set. It will also be
|
|
detected as an unsafe profile if installed at `C:\cmder` . You
|
|
may refer to Cmder's wiki for more information.
|
|
|
|
## Cygwin
|
|
|
|
Cygwin itself is a terminal, but you can use the Cygwin shell in AVAP
|
|
TM Dev Studio with the following profile:
|
|
|
|
```javascript
|
|
{
|
|
` `"terminal.integrated.profiles.windows": {
|
|
` `"Cygwin": {
|
|
` `"path": "C:\\cygwin64\\bin\\bash.exe",
|
|
` `"args": ["--login"]
|
|
` `}
|
|
` `},
|
|
` `"terminal.integrated.defaultProfile.windows": "Cygwin"
|
|
|
|
}
|
|
```
|
|
|
|
This profile should be detected automatically as an unsafe profile when
|
|
installed at the default paths `C:\cygwin` or
|
|
`C:\cygwin64` .
|
|
|
|
## Git Bash
|
|
|
|
A limitation of Git Bash when AVAP TM Dev Studio uses bash.exe
|
|
(the shell) as opposed to git-bash.exe (the terminal) is
|
|
that history will not be retained across shell sessions. You can work
|
|
around this by adding the following to your `~/.bashrc` a or{' '}
|
|
`~/.bash\_profile` files:
|
|
|
|
```javascript
|
|
export PROMPT\_COMMAND='history -a'
|
|
```
|
|
|
|
This will cause the shell to call history -a whenever the prompt is
|
|
printed which flushes the session's current session commands to the
|
|
backing history file.
|
|
|
|
## MSYS2
|
|
|
|
MSYS2's bash shell can be configured with the following profile:
|
|
|
|
```javascript
|
|
{
|
|
` `"terminal.integrated.profiles.windows": {
|
|
` `"bash (MSYS2)": {
|
|
` `"path": "C:\\msys64\\usr\\bin\\bash.exe",
|
|
` `"args": ["--login", "-i"],
|
|
` `"env": { "CHERE\_INVOKING": "1" }
|
|
` `}
|
|
` `}
|
|
|
|
}
|
|
```
|
|
|
|
The `CHERE_INVOKING` environment variable is used to tell the
|
|
login initialization script to preserve the working directory, instead of
|
|
opening at `$HOME` .
|
|
|
|
This profile should be detected automatically as an{' '}
|
|
unsafe profile when installed at
|
|
the default path `C:\\msys64` .
|
|
|
|
## Windows PowerShell
|
|
|
|
When PowerShell 6+ is installed, Windows PowerShell is not included in the
|
|
profiles list by default. To add Windows PowerShell as a profile, choose
|
|
the Select Default Profile option in the new terminal
|
|
dropdown and select the Windows PowerShell item. This will configure the
|
|
profile and set it as your default.
|
|
|
|
## WSL
|
|
|
|
When running AVAP TM Dev Studio on your local machine, Windows
|
|
Subsystem for Linux shells should be automatically detected. Depending on
|
|
your setup, this may be a nuisance if you have a lot of distros installed.
|
|
For finer control over the WSL profiles the automatic detection can be
|
|
disabled with the `terminal.integrated.useWslProfiles setting` ,
|
|
then here's an example of how to manually configure a WSL shell:
|
|
|
|
```javascript
|
|
{
|
|
` `"terminal.integrated.profiles.windows": {
|
|
` `"Debian (WSL)": {
|
|
` `"path": "C:\\WINDOWS\\System32\\wsl.exe",
|
|
` `"args": [` `"-d",
|
|
` `"Debian"
|
|
` `]
|
|
` `}
|
|
` `}
|
|
|
|
}
|
|
```
|
|
|
|
## Common questions
|
|
|
|
### Why are there duplicate paths in the terminal's $PATH environment
|
|
variable and/or why are they reversed on macOS?
|
|
|
|
This can happen on macOS because of how the terminal launches using AVAP
|
|
TM Dev Studio's environment. When AVAP TM Dev
|
|
Studio launches for the first time, to source your "development
|
|
environment," it launches your configured shell as a{' '}
|
|
login shell , which runs your{' '}
|
|
`~/.profile/~/.bash\_profile/~/.zprofile` scripts. Now when the
|
|
terminal launches, it also runs as a login shell, which will put the
|
|
standard paths to the front (for example,{' '}
|
|
`/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin` ) and
|
|
reinitialize your shell environment.
|
|
|
|
To get a better understanding, you can simulate what is happening by
|
|
launching an inner login shell within your operating system's built-in
|
|
terminal:
|
|
|
|
```javascript
|
|
\# 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
|
|
```
|
|
|
|
Unfortunately, unlike in Linux, standalone macOS terminals all run as
|
|
login shells by default, since macOS does not run a login shell when the
|
|
user logs into the system. This encourages "bad behavior," like
|
|
initializing aliases in your profile script when they should live in your{' '}
|
|
`rc` script as that runs on non-login shells.
|
|
|
|
There are two direct fixes for this. The first is to set{' '}
|
|
`"terminal.integrated.inheritEnv": false` , which will
|
|
strip most environment variables from the terminal's environment,
|
|
except for some important ones (like `HOME` ,{' '}
|
|
`SHELL` , `TMPDIR` , etc.).
|
|
|
|
The other fix is to no longer run a login shell in the terminal by
|
|
creating a terminal profile and setting its args to []. If you go with
|
|
this fix, you will want to make sure any aliases in your profile scripts
|
|
are moved over to your `~/.bashrc/~/.zshrc` file since aliases
|
|
only apply to the shell they're set in.
|