Visual Studio Code WSL Remote - WSL Terminal Ignoring Cwd - visual-studio-code

I have read several other forums and posts about setting the default directory when opening a new integrated terminal session to no avail.
When I first start using VSC it seems to open the workspace directory for the first couple days. But it must have synched my settings from a previous install and brought back something that I could never figure out on my previous windows install. For some reason when it opens a terminal it opens to the AppData folder location for Microsoft VS Code as shown below:
<user>#<hostname>:/mnt/c/Users/<user>/AppData/Local/Programs/Microsoft VS Code$
If for instance I go into File > Preferences > Settings and try adding $HOME or ${HOME} I get:
The terminal process failed to launch: STarting directory (cwd)
"/home/<user>/${HOME}" does not exist.
or
The terminal process failed to launch: Starting directory (cwd)
"/home/<user>/$HOME" does not exist.
After doing this if I delete the information in Cwd then I receive the error that:
Setting has an invalid type, expect "string". Fix in JSON.
I can fix this by changing the setting to:
"terminal.integrated.cwd": "."
My user profile is basically default:
{
"workbench.editorAssociations": [
{
"viewType": "jupyter.notebook.ipynb",
"filenamePattern": "*.ipynb"
}
],
"git.autofetch": true,
"workbench.colorTheme": "One Dark Pro",
"python.languageServer": "Pylance",
"terminal.integrated.scrollback": 10000,
"terminal.integrated.tabs.enabled": true,
"terminal.integrated.tabs.location": "left",
"terminal.integrated.bellDuration": 10000,
"terminal.integrated.cwd": "."
}
There are only a few settings I changed like tab location and scrollback value.
Any thoughts?

Re-install and newer versions of WSL seemed to be the only fix for this.

Related

Start VScode with WSL properly

When I open VScode through Ubuntu PowerShell with "code ." I don't have instant inline syntax checking while coding. Also all filenames are white:
First connexion from PowerShell with command "code ."
The weird thing is that if I click on the lower right corner and I reopen the folder in Windows: Reopening Folder in Windows
then if I reopen it again in WSL, finally I get the filenames colored and the inline syntax check works!
Back to WSL
Seems it wasn't properly connected the first time or something.
How can I properly boot VScode with WSL directly with a PowerShell command without having to switch to windows and then back to WSL?
This is how c_cpp_properties.json looks:
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "c17",
"cppStandard": "gnu++17",
"intelliSenseMode": "linux-gcc-x64"
}
],
"version": 4
}
Give this a try, install the following extensions:
https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools
https://marketplace.visualstudio.com/items?itemName=formulahendry.code-runner
Note: I guess you have gcc installed already
Your connection to WSL is probably not being properly established.
To ensure that the connection is established properly, you can try launching VSCode using the code command with the --remote option, like this:
code --remote wsl+<distribution_name> .
Using --remote will ensure that VSCode with the WSL instance, and should prevent the connection from breaking as easily. You should see inline syntax checking and colored filenames right away.
[NOTICE] When you do this for the first time, you may get a prompt to install the WSL extension. Click install, close VSCode, wait about 10s, and then reopen it again using the same command. You may have to do this at least 2-3 times depending on your setup.
If you continue to experience issues, you may want to check your VSCode settings to ensure that they are configured properly for working with WSL. For example, you can try setting the remote.WSL.useWsl setting to true to ensure that VSCode uses WSL as the default terminal.
I haven't used VSCode like that in quite a while though, so the settings may be different and the remote.WSL.useWsl key may not exist anymore. It's worth trying though.

VSCode is suddenly defaulting to powershell for integrated terminal and tasks

When I woke up this morning and launched VSCode my default terminal on launch, and when running tasks is now powershell, instead of Git Bash. I am on windows. I have tried changing the settings.json to no avail. Is there something I'm missing?
{
"workbench.startupEditor": "newUntitledFile",
"terminal.integrated.shell.windows": "C:\\Program Files\\Git\\bin\\bash.exe",
"[javascript]": {
"editor.defaultFormatter": "rvest.vs-code-prettier-eslint"
},
"aws.samcli.location": "C:\\Users\\king\\AppData\\Roaming\\npm\\sam.exe",
"typescript.updateImportsOnFileMove.enabled": "always",
"[html]": {
"editor.defaultFormatter": "vscode.html-language-features"
},
"editor.formatOnSave": true,
"editor.formatOnPaste": true,
"javascript.updateImportsOnFileMove.enabled": "always",
"explorer.confirmDragAndDrop": false,
"diffEditor.maxComputationTime": 0,
"extensions.ignoreRecommendations": true,
"[typescript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"editor.renderControlCharacters": true,
"[jsonc]": {
"editor.quickSuggestions": {
"strings": true
},
"editor.suggest.insertMode": "replace"
},
"window.zoomLevel": 0,
"editor.accessibilitySupport": "off",
"workbench.editor.untitled.hint": "hidden",
"terminal.integrated.defaultProfile.windows": "Git Bash",
"terminal.external.windowsExec": "C:\\Program Files\\Git\\bin\\bash.exe",
"terminal.explorerKind": "external",
"terminal.integrated.automationShell.linux": ""
}
I found this related SO post making the default powershell, but I didn't see anything that was incorrect about my setting...especially because my goal is the opposite- to stop Powershell!
Update: Version v1.60.0 had a bug. Upgrade to v1.60.1 or higher for a fix.
The bug manifested in the following symptoms:
The Open in Integrated Terminal shortcut-menu command in the Explorer pane's shortcut always uses the built-in default shell (PowerShell on Windows), ignoring the configured one.
The same goes for running tasks (with or without a separate terminal.integrated.automationShell.* setting).
Also, if a given folder or workspace happened to have an integrated terminal open when quitting Visual Studio Code, the shell that is launched when the integrated terminal automatically reopens the next time is again the built-in default shell, not the configured one. By contrast, if reopening doesn't auto-open the integrated terminal, opening it manually does respect the configured default shell, and so does manually creating another shell instance later.
See GitHub issue #132150
The following information turned out to be unrelated to the bug, but is hopefully still useful general information about Visual Studio Code's recent change in how shells for the integrated terminal are configured:
Migrating from the legacy default shell settings to shell profiles:
Recently, the "terminal.integrated.shell.*" and "terminal.integrated.shellArgs.*" settings were deprecated and replaced with a more flexible model that allows defining multiple shells to select from, via so-called shell profiles, optionally defined in setting "terminal.integrated.profiles.*", with an associated mandatory "terminal.integrated.defaultProfile.*" setting referencing the name of the profile to use by default - which may be an explicitly defined custom profile or one of the built-in, platform-appropriate default profiles.
Note: * in the setting names above represents the appropriate platform identifier, namely windows, linux, or osx (macOS).
As of v1.60.1, if legacy "terminal.integrated.shell.*" settings are also present, the new settings take precedence (even though the tooltip when editing "terminal.integrated.shell.*" in settings.json suggests that this change is yet to come).
In the absence of both settings, Visual Studio Code's built-in default shell is used, which on Windows is PowerShell,[1] and on Unix-like platforms the user's default shell, as specified in the SHELL environment variable.
Recent Visual Studio Code versions, starting before v1.60 - seemingly as one-time opportunity - displayed a prompt offering to migrate the deprecated settings to the new ones.
Accepting the migration results in the following:
Creation of setting "terminal.integrated.shell.*" containing a custom shell profile derived from the values of legacy settings "terminal.integrated.shell.*" and, if present, "terminal.integrated.shellArgs.*"; that custom profile's name has the suffix (migrated)
Creation of setting terminal.integrated.defaultProfile.* whose value is the migrated profile's name, making it the default shell.
Removal of legacy settings "terminal.integrated.shell.*" and "terminal.integrated.shellArgs.*"
If you decline the migration, you can later effectively perform it by re-choosing the default shell, as described below.
Note: The new "terminal.integrated.defaultProfile.*" setting that is created in the process then effectively overrides the legacy "terminal.integrated.shell.*" and "terminal.integrated.shellArgs.*" settings, but the latter won't be removed automatically. To avoid confusion, it's best to remove them from settings.json manually.
Choose the default shell profile to use in order to (re)specify the default shell:
Click on the down-arrow part of the shell-selector icon () on the right side of the integrated terminal, select Select Default Profile, which presents a list of the defined profiles to select the default from - in the absence of explicitly defined profiles, standard profiles are offered (see below).
This translates into a terminal.integrated.defaultProfile.* setting in settings.json, whose value is the name of the chosen shell profile - which may be the name of a built-in profile or one of the ones explicitly defined in "terminal.integrated.profiles.*"
Note: This shell is by default also used for tasks (defined in tasks.json), but that can be overridden with a "terminal.integrated.automationShell.*" setting pointing to the executable of an alternative shell.
Optionally, in your settings.json file, you may create a platform-appropriate terminal.integrated.profiles.* setting with shell profiles of interest:
Note: Even if your settings.json contains no (platform-appropriate) "terminal.integrated.profiles.*" setting, Visual Studio code has built-in standard profiles it knows of and offers them for selection when choosing the default shell.
These standard profiles are a mix of shells that come with the host platform as well as some that Visual Studio detects dynamically on a given system, such as Git Bash on Windows.
To create the standard profiles explicitly, do the following:
Note: You may choose to do this in order to customize the standard profiles. However, if your intent is merely to add custom profiles - see this answer for an example - it isn't necessary to create the standard profiles inside the "terminal.integrated.profiles.*" setting, because Visual Studio Code knows about them even if not explicitly defined.
Via File > Preferences > Settings (Ctrl-,), search for profiles and click on Edit in settings.json below the platform-appropriate Terminal > Integrated > Profiles > * setting; this will open settings.json for editing, with the standard profiles added; simply saving the file is sufficient.
Note: If the "terminal.integrated.profiles.*" setting shown doesn't contain the expected, platform-appropriate standard profiles, a setting by that name may already be present; to force creation of the standard profiles, remove or comment out the existing setting and save the file, then try again.
On Windows, you'll end up with something like the following:
"terminal.integrated.profiles.windows": {
"PowerShell": {
"source": "PowerShell",
"icon": "terminal-powershell"
},
"Command Prompt": {
"path": [
"${env:windir}\\Sysnative\\cmd.exe",
"${env:windir}\\System32\\cmd.exe"
],
"args": [],
"icon": "terminal-cmd"
},
"Git Bash": {
"source": "Git Bash"
}
}
The answer you link to in your question, which provides an overview of the various types of shells used in Visual Studio Code, has been updated to reflect the information about the new shell profiles.
[1] Note: If a PowerShell (Core) v6+ installation is found, it takes precedence over the built-in Windows PowerShell version.
Edit:1
Note: Now this bug has been fixed by VSCode. Just update your VSCode to the latest version. (17-Sep-2021)
I have a temporary solution.
First paste this code in settings.json and save
"terminal.integrated.defaultProfile.windows": "Git Bash",
"terminal.integrated.profiles.windows": {
"C:\\Program Files\\Git\\bin\\bash.exe": {
"path": "",
"args": []
}
},
Before closing VSCode select Output instead of Terminal
Now you can open VSCode
After VSCode is loaded, you need to click on Terminal. After this you will now see bash.
Select output before whenever you close VSCode.
Reference: VSCode is suddenly defaulting to PowerShell for integrated terminal instead of $Bash in Windows
Note: This is not an solution. I shared this because maybe it can save you from getting disappointed.
This is my first post, if there is any mistake please let me know so that I can correct it.
You can always download and install previous releases from the official website https://code.visualstudio.com/updates/v1_59 (currently at the top).
As version 1.60 was bugged, v1.59 is a good candidate.
Disable automatic updates
Explained here.
Open User Settings File > Preferences > Settings.
Add "update.mode": "none" to your settings.
Install older version
Afterwards you can just overwrite current version with the installation of downloaded version.
Note: Wait for next version to fix it, so remember you had automatic update disabled!
I have same problem but I try run command prompt. I fix it by adding to ...\Code\User\settings.json
"terminal.integrated.automationShell.windows": "cmd.exe",
This could be related to issue 138999 which will add a mitigation/enhancement to VSCode 1.70 (July 2022) with PR 154290 and commit 91b82c0
increase barrier for available profiles to be ready
Wait up to 20 seconds for profiles to be ready so it's assured that we know the actual default terminal before launching the first terminal.
This isn't expected to ever take this long.
For VSCode with synchronized user settings, the profile might take more time than expected to fully load, hence the advantage of that workaround.
Simply replaced the CMD by Git Bash :-) in the settings.json
"terminal.integrated.profiles.windows": {
"PowerShell": {
"source": "PowerShell",
"icon": "terminal-powershell"
},
"Command Prompt": {
"path": [
//"${env:windir}\\Sysnative\\cmd.exe",
//"${env:windir}\\System32\\cmd.exe"
"C:\\PrivateProgramms\\Git\\bin\\bash.exe"
],
"args": [],
"icon": "terminal-cmd"
},
"Git Bash": {
"source": "Git Bash"
//"path": [ "C:\\PrivateProgramms\\Git\\bin\\bash.exe" ],
//"args": [],
//"icon": "terminal-cmd"
}
},
"terminal.integrated.defaultProfile.windows": "Command Prompt"

Visual Studio Code is not recogonizing an Autopep8 installation

I use Visual Studio Code for developing in Django. I did all of the following inside a virtual environment.
Whenever I save the Python (.py) files, an alert pops up at the bottom right of the screen telling me: "Formatter autopep8 is not installed. Install?". It gives me three options - "Yes", "Use black, and "Use yapf".
If I click "Yes", it gives me another alert saying that there is no pip installer available in the selected environment. I then tried to go inside the integrated terminal and run pip install autopep8 and it says in the terminal that it was installed successfully. But when I save the Python files, it still gives me the same alert. Check the photo below.
Open your command palette with Shift + ⌘ + P. Type in Preferences: Open Workspace Settings. I'll share the settings I use with you, some of which may be of interest:
{
"python.pythonPath": "${workspaceFolder}/backend/env/bin/python3",
"python.venvPath": "${workspaceFolder}/backend/env",
"python.linting.flake8Enabled": true,
"python.linting.flake8Path": "flake8",
"python.linting.flake8Args": ["--ignore", "E501"],
"python.linting.pylintEnabled": true,
"python.linting.pylintPath": "pylint",
"python.linting.pylintArgs": ["--load-plugins", "pylint_django"]
}
python.pythonPath is the location of the Python interpreter executable within your virtual environment. In this case it's an environment named env in a folder named backend. *${workspaceFolder} is a reference to where your project lives.
python.venvPath is the folder of your virtual environment(s).
The remaining six key/values are for enabling and execution for flake8 and pylint. Experiment with either.
Note that these are the workspace settings and not the user settings. User settings are applied across all of your Visual Studio Code projects.

Integrated Terminal fails to launch

When opening a new terminal, VScode will briefly display the integrated terminal and then close it with an error message:
The terminal process command 'C:\windows\System32\WindowsPowerShell\v1.0\powershell.exe' failed to launch (exit code: {2})
This error first happened when I tried to open the terminal while in a folder located in a different drive from cmd and powershell, but seems to happen in C: as well. The terminals function outside of VScode. This error occurs even when running the application as an administrator.
Things I have tried:
Adding "terminal.integrated.windowsEnableConpty": false to my settings.json
Changed it to run the cmd prompt instead
Deleted 'C:\Users\Name\AppData\Code'
Reinstalled
Restarted my computer
Running SFC /scannow
Here is my settings.json:
{
"window.zoomLevel": -1,
"workbench.startupEditor": "none",
"files.autoSave": "afterDelay",
"editor.fontFamily": "'Roboto Mono', monospace",
"editor.cursorBlinking": "expand",
"zenMode.hideLineNumbers": false,
"zenMode.hideTabs": false,
"zenMode.hideStatusBar": false
}
Exit code 2 is "The system cannot find the file specified." Windows does keep a copy of important files and there is a tool to replace the missing and corrupt files.
1) Open the command prompt as Administrator
2) Type SFC /scannow
3) After the scan completes reboot your machine.
Turns out, whitelisting the folder C:\Program Files\Microsoft VS Code in my anti-malware program fixed the problem for me. Thanks for the help though!

VSCode default Integrated Terminal is not changing

I'm using VSCode for some time now and until today the Terminal was working as expected.
But now I can't change the default Integrated Terminal. It's allways "cmd" no matter what I set up in the settings.
The settings.json seems to be fine:
{
"window.zoomLevel": -1,
"files.associations": {
"*.testset": "feature"
},
"git.autofetch": true,
"C_Cpp.updateChannel": "Insiders",
"terminal.integrated.shell.windows": "C:\\Program Files\\Git\\bin\\bash.exe"
}
But every new terminal is still "cmd".
Not "bash" or "PS".
The issue was in my workspace settings.
"project.code-workspace"
{
....
"settings": {
"terminal.integrated.shell.windows": "cmd.exe"
}
}
By removing this line from the file, the problem was fixed. Now I can change the default Integrated Terminal.
most of the time this issue happens when new updates come,
the easiest ways to solve this is:
https://youtu.be/jpwfr6m50sI - here you will see how to change the default terminal
uninstall your vscode install the previous one (if you don't know how to do this, follow this: How to downgrade vscode )
Dont hesitate to report to GitHub of vscode team as well as follow
their documentaries