Https code visualstudio com
Https code visualstudio com
Code editing. Redefined.
Free. Built on open source. Runs everywhere.
By using VS Code, you agree to its license and privacy statement.
Meet IntelliSense.
Go beyond syntax highlighting and autocomplete with IntelliSense, which provides smart completions based on variable types, function definitions, and imported modules.
Print statement debugging is a thing of the past.
Debug code right from the editor. Launch or attach to your running apps and debug with break points, call stacks, and an interactive console.
Git commands built-in.
Working with Git and other SCM providers has never been easier. Review diffs, stage files, and make commits right from the editor. Push and pull from any hosted SCM service.
Extensible and customizable.
Want even more features? Install extensions to add new languages, themes, debuggers, and to connect to additional services. Extensions run in separate processes, ensuring they won’t slow down your editor. Learn more about extensions.
Deploy with confidence and ease
With Microsoft Azure you can deploy and host your React, Angular, Vue, Node, Python (and more!) sites, store and query relational and document based data, and scale with serverless computing, all with ease, all from within VS Code.
VS Code for
Want new features sooner?
Use vscode.dev for quick edits online!
GitHub, Azure Repos, and local files.
License and Privacy Terms
By downloading and using Visual Studio Code, you agree to the license terms and privacy statement. VS Code automatically sends telemetry data and crash dumps to help us improve the product. If you would prefer not to have this data sent please go see How to Disable Crash Reporting to learn how to disable it.
Learn to code with Visual Studio Code
Why VS Code?
Collaborate and code remotely
Work together remotely with your teachers or classmates using the free LiveShare extension. Edit and debug your code in real-time, and use the chat and call features to ask questions or discuss ideas together. Whether you’re working on a group assignment or teaching a lesson, you can invite multiple people to join your session and code together. Check out this tutorial on how start using LiveShare.
Code to learn
New to coding? Visual Studio Code highlights keywords in your code in different colors to help you easily identify coding patterns and learn faster. You can also take advantage of features like IntelliSense and Peek Definition, which help you understand how functions can be used, and how they relate to one another.
Fix errors as you code
As you code, Visual Studio Code gives you suggestions to complete lines of code and quick fixes for common mistakes. You can also use the debugger in VS Code to step through each line of code and understand what is happening. Check out guides on how to use the debugger if you’re coding in Python, Java, and JavaScript/TypeScript/Node.js.
Make it yours with custom themes and colors
You can change the look and feel of VS Code by picking your favorite fonts and icons and choosing from hundreds of color themes. Check out this video on personalizing VS Code.
Compare changes in your code
Use the built-in source control to save your work over time so you don’t lose progress. See a graphical side-by-side view to compare versions of your code from different points in time. Check out this quick video on how to get a side-by-side «diff».
Code inside Notebooks
If you want to try a project in data science or data visualization, you can use Jupyter notebooks inside VS Code. Run your code step-by-step, and visualize and interact with your data, variables, graphs, and plots. Check out this tutorial on how to work with Jupyter Notebooks inside VS Code.
УСЛОВИЯ ЛИЦЕНЗИИ НА ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ MICROSOFT
MICROSOFT VISUAL STUDIO CODE
Настоящие условия лицензии являются соглашением между вами и Корпорацией Microsoft (или, в зависимости от места вашего проживания, одним из ее аффилированных лиц). Они применяются к вышеуказанному программному обеспечению. Эти условия применяются также ко всем услугам или обновлениям Microsoft для данного программного обеспечения, если они не сопровождаются другими условиями.
В соответствии с пунктом II выше, в случае незначительной неосторожности корпорация Microsoft несет ответственность только в случае нарушения важных договорных обязательств, от которых зависит исполнение настоящего соглашения, нарушение которых может иметь отрицательные последствия для цели настоящего соглашения и на соблюдение которых сторона может постоянно полагаться (так называемые «основные обязательства»). В других случаях допущения незначительной небрежности Microsoft не несет ответственности за таковую.
Это ограничение действует в отношении (а) любых вопросов, связанных с программным обеспечением, службами и содержимым веб-сайтов третьих лиц (включая код), а также с их приложениями; (б) требований, связанных с нарушением контракта, гарантии или существенного условия, строгой ответственностью, неосторожностью или другим гражданским правонарушением, в степени, допустимой применимым правом.
Это ограничение действует даже в случае, если корпорации Microsoft было или должно было быть известно о возможности таких убытков. Вышеуказанное ограничение или исключение может к вам не применяться, если законодательство вашего штата или страны не допускает исключения или ограничения ответственности за случайные, косвенные или другие убытки.
Visual Studio Code on Windows
Installation
Alternatively, you can also download a Zip archive, extract it and run Code from there.
User setup versus system setup
VS Code provides both Windows user and system level setups. Installing the user setup does not require Administrator privileges as the location will be under your user Local AppData (LOCALAPPDATA) folder. User setup also provides a smoother background update experience.
The system setup requires elevation to Administrator privileges and will place the installation under Program Files. This also means that VS Code will be available to all users in the system.
See the Download Visual Studio Code page for a complete list of available installation options.
32-bit versions
If you need to run a 32-bit version of VS Code, both a 32-bit Installer and Zip archive are available.
Updates
VS Code ships monthly releases and supports auto-update when a new release is available. If you’re prompted by VS Code, accept the newest update and it will be installed (you won’t need to do anything else to get the latest bits).
Note: You can disable auto-update if you prefer to update VS Code on your own schedule.
Windows Subsystem for Linux
Windows is a popular operating system and it can be a great cross-platform development environment. This section describes cross-platform features such as the Windows Subsystem for Linux (WSL) and the new Windows Terminal.
Recent Windows build
Make sure you are on a recent Windows 10 build. Check Settings > Windows Update to see if you are up-to-date.
Windows as a developer machine
With WSL, you can install and run Linux distributions on Windows. This enables you to develop and test your source code on Linux while still working locally on your Windows machine.
See the Developing in WSL documentation to learn more or try the Working in WSL introductory tutorial.
New Windows Terminal
Available from the Microsoft Store, the Windows Terminal (Preview) lets you easily open PowerShell, Command Prompt, and WSL terminals in a multiple tab shell.
Next steps
Once you have installed VS Code, these topics will help you learn more about VS Code:
Common questions
What command-line arguments are supported by the Windows Setup?
VS Code uses Inno Setup to create its setup package for Windows. Thus, all the Inno Setup command-line switches are available for use.
Scrolling is laggy and not smooth
On certain devices, editor scrolling is not smooth but laggy for an unpleasant experience. If you notice this issue, make sure you install the Windows 10 October 2018 update where this issue is fixed.
I’m having trouble with the installer
Try using the zip file instead of the installer. To use this, unzip VS Code in your AppData\Local\Programs folder.
Note: When VS Code is installed via a Zip file, you will need to manually update it for each release.
Icons are missing
I installed Visual Studio Code on my Windows 8 machine. Why are some icons not appearing in the workbench and editor?
Using the Command Prompt:
Using the Registry Editor (regedit):
Visual Studio Code FAQ
Our docs contain a Common questions section as needed for specific topics. We’ve captured items here that don’t fit in the other topics.
If you don’t see an answer to your question here, check our previously reported issues on GitHub and our release notes.
What is the difference between Visual Studio Code and Visual Studio IDE?
Visual Studio Code is a streamlined code editor with support for development operations like debugging, task running, and version control. It aims to provide just the tools a developer needs for a quick code-build-debug cycle and leaves more complex workflows to fuller featured IDEs, such as Visual Studio IDE.
Which OSs are supported?
VS Code runs on macOS, Linux, and Windows. See the Requirements documentation for the supported versions. You can find more platform specific details in the Setup overview.
Is VS Code free?
Yes, VS Code is free for private or commercial use. See the product license for details.
How to disable telemetry reporting
VS Code collects usage data and sends it to Microsoft to help improve our products and services. Read our privacy statement and telemetry documentation to learn more.
Important Notice: VS Code gives you the option to install Microsoft and third party extensions. These extensions may be collecting their own usage data and are not controlled by the telemetry.telemetryLevel setting. Consult the specific extension’s documentation to learn about its telemetry reporting.
How to disable experiments
How to disable crash reporting
VS Code collects data about any crashes that occur and sends it to Microsoft to help improve our products and services. Read our privacy statement and telemetry documentation to learn more.
If you don’t want to send crash data to Microsoft, you can change the enable-crash-reporter runtime argument to false
GDPR and VS Code
Now that the General Data Protection Regulation (GDPR) is in effect, we want to take this opportunity to reiterate that we take privacy very seriously. That’s both for Microsoft as a company and specifically within the VS Code team.
You can learn more about VS Code’s GDPR compliance in the telemetry documentation.
What online services does VS Code use?
Beyond crash reporting and telemetry, VS Code uses online services for various other purposes such as downloading product updates, finding, installing, and updating extensions, or providing Natural Language Search within the Settings editor. You can learn more in Managing online services.
How do I opt out of VS Code auto-updates?
If you use the JSON editor for your settings, add the following line:
You can install a previous release of VS Code by uninstalling your current version and then installing the download provided at the top of a specific release notes page.
Note: On Linux: If the VS Code repository was installed correctly then your system package manager should handle auto-updating in the same way as other packages on the system. See Installing VS Code on Linux.
Opt out of extension updates
By default, VS Code will also auto-update extensions as new versions become available. If you do not want extensions to automatically update, you can clear the Extensions: Auto Update check box in the Settings editor ( ⌘, (Windows, Linux Ctrl+, ) ).
If you use the JSON editor to modify your settings, add the following line:
Licensing
Location
Why does Visual Studio Code have a different license than the vscode GitHub repository?
To learn why Visual Studio Code, the product, has a different license than the open-source vscode GitHub repository, see issue #60 for a detailed explanation.
What is the difference between the vscode repository and the Microsoft Visual Studio Code distribution?
What does «Built on Open Source» mean?
How do I find the license for an extension?
Most extensions link to their license on their Marketplace page or in the overview section, when you select an extension in the Extensions view.
If you don’t find a link to the license, you may find a license in the extension’s repository if it is public, or you can contact the extension author through the Q & A section of the Marketplace.
Are all VS Code extensions open source?
Extension authors are free to choose a license that fits their business needs. While many extension authors have opted to release their source code under an open-source license, some extensions like Wallaby.js, Google Cloud Code, and the VS Code Remote Development extensions use proprietary licenses.
At Microsoft, we open source our extensions whenever possible. However, reliance on existing proprietary source code or libraries, source code that crosses into Microsoft licensed tools or services (for example Visual Studio), and business model differences across the entirety of Microsoft will result in some extensions using a proprietary license. You can find a list of Microsoft contributed Visual Studio Code extensions and their licenses in the Microsoft Extension Licenses article.
How do I find the version?
You can find the VS Code version information in the About dialog box.
On macOS, go to Code > About Visual Studio Code.
On Windows and Linux, go to Help > About.
The VS Code version is the first Version number listed and has the version format ‘major.minor.release’, for example ‘1.27.0’.
Previous release versions
You can find links to some release downloads at the top of a version’s release notes:
If you need a type of installation not listed there, you can manually download via the following URLs:
Download type | URL |
---|---|
Windows 64 bit System installer | https://update.code.visualstudio.com/ |
Windows 64 bit User installer | https://update.code.visualstudio.com/ |
Windows 64 bit zip | https://update.code.visualstudio.com/ |
Windows 64 bit ARM System installer | https://update.code.visualstudio.com/ |
Windows 64 bit ARM User installer | https://update.code.visualstudio.com/ |
Windows 64 bit ARM zip | https://update.code.visualstudio.com/ |
Windows 32 bit System installer | https://update.code.visualstudio.com/ |
Windows 32 bit User installer | https://update.code.visualstudio.com/ |
Windows 32 bit zip | https://update.code.visualstudio.com/ |
macOS | https://update.code.visualstudio.com/ |
Linux 64 bit | https://update.code.visualstudio.com/ |
Linux 64 bit debian | https://update.code.visualstudio.com/ |
Linux 64 bit rpm | https://update.code.visualstudio.com/ |
Linux 64 bit snap | https://update.code.visualstudio.com/ |
Linux ARM | https://update.code.visualstudio.com/ |
Linux ARM debian | https://update.code.visualstudio.com/ |
Linux ARM rpm | https://update.code.visualstudio.com/ |
Linux 64 bit ARM | https://update.code.visualstudio.com/ |
Linux 64 bit ARM debian | https://update.code.visualstudio.com/ |
Linux 64 bit ARM rpm | https://update.code.visualstudio.com/ |
Substitute the specific release you want in the
Prerelease versions
Want an early peek at new VS Code features? You can try prerelease versions of VS Code by installing the «Insiders» build. The Insiders build installs side by side to your stable VS Code install and has isolated settings, configurations, and extensions. The Insiders build is updated nightly so you’ll get the latest bug fixes and feature updates from the day before.
To install the Insiders build, go to the Insiders download page.
Where can I find the Visual Studio Code icons?
Are there guidelines for using the icons and names?
You can download the official Visual Studio Code icons and read the usage guidelines at Icons and names usage guidelines.
What is a VS Code «workspace»?
You can learn more in the What is a VS Code «workspace»? article.
Can I run a portable version of VS Code?
Yes, VS Code has a Portable Mode that lets you keep settings and data in the same location as your installation, for example, on a USB drive.
Report an issue with a VS Code extension
For bugs, feature requests or to contact an extension author, you should use the links available in the Visual Studio Code Marketplace or use Help: Report Issue from the Command Palette. However, if there is an issue where an extension does not follow our code of conduct, for example it includes profanity, pornography or presents a risk to the user, then we have an email alias to report the issue. Once the mail is received, our Marketplace team will look into an appropriate course of action, up to and including unpublishing the extension.
Installation appears to be corrupt [Unsupported]
VS Code does a background check to detect if the installation has been changed on disk and if so, you will see the text [Unsupported] in the title bar. This is done since some extensions directly modify (patch) the VS Code product in such a way that is semi-permanent (until the next update) and this can cause hard to reproduce issues. We are not trying to block VS Code patching, but we want to raise awareness that patching VS Code means you are running an unsupported version. Reinstalling VS Code will replace the modified files and silence the warning.
You may also see the [Unsupported] message if VS Code files have been mistakenly quarantined or removed by anti-virus software (see issue #94858 for an example). Check your anti-virus software settings and reinstall VS Code to repair the missing files.
Resolving shell environment fails
This section applies to macOS and Linux environments only.
However, when launching from your platform’s user interface (for example, the VS Code icon in the macOS dock), you normally are not running in the context of a shell and you don’t have access to those environment settings. This means that depending on how you launch VS Code, you may not have the same environment.
If the error message indicates that resolving your shell environment took too long, the steps below can help you investigate what might be causing slowness.
If you see other errors, please create an issue to get help.
Investigate slow shell initialization
The process outlined below may help you identify which parts of your shell initialization are taking the most time:
Note: While nvm is a powerful and useful Node.js package manager, it can cause slow shell startup times, if being run during shell initialization. You might consider package manager alternatives such as asdf or search on the internet for nvm performance suggestions.
Launch VS Code from a terminal
If modifying your shell environment isn’t practical, you can avoid VS Code’s resolving shell environment phase by launching VS Code directly from a fully initialized terminal.
VS Code is blank?
VS Code gets unresponsive right after opening a folder
When you open a folder, VS Code will search for typical project files to offer you additional tooling (for example, the solution picker in the Status bar to open a solution). If you open a folder with lots of files, the search can take a large amount of time and CPU resources during which VS Code might be slow to respond. We plan to improve this in the future but for now you can exclude folders from the explorer via the files.exclude setting and they will not be searched for project files:
Technical Support
You can ask questions and search for answers on Stack Overflow and enter issues and feature requests directly in our GitHub repository.
If you’d like to contact a professional support engineer, you can open a ticket with the Microsoft assisted support team.
MICROSOFT SOFTWARE LICENSE TERMS
MICROSOFT VISUAL STUDIO CODE
These license terms are an agreement between you and Microsoft Corporation (or based on where you live, one of its affiliates). They apply to the software named above. The terms also apply to any Microsoft services or updates for the software, except to the extent those have different terms.
Subject to the foregoing clause (ii), Microsoft will only be liable for slight negligence if Microsoft is in breach of such material contractual obligations, the fulfillment of which facilitate the due performance of this agreement, the breach of which would endanger the purpose of this agreement and the compliance with which a party may constantly trust in (so-called «cardinal obligations»). In other cases of slight negligence, Microsoft will not be liable for slight negligence.
This limitation applies to (a) anything related to the software, services, content (including code) on third party Internet sites, or third party applications; and (b) claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law.
It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your state or country may not allow the exclusion or limitation of incidental, consequential or other damages.
Visual Studio Code Tips and Tricks
«Tips and Tricks» lets you jump right in and learn how to be productive with Visual Studio Code. You’ll become familiar with its powerful editing, code intelligence, and source code control features and learn useful keyboard shortcuts. This topic goes pretty fast and provides a broad overview, so be sure to look at the other in-depth topics in Getting Started and the User Guide to learn more.
If you don’t have Visual Studio Code installed, go to the Download page. You can find platform specific setup instructions at Running VS Code on Linux, macOS, and Windows.
Prefer a video? You can watch a recent Microsoft Build talk Visual Studio Code tips and tricks, which describes 20 tips and tricks for working productively with VS Code.
Basics
Getting started
The best way of exploring VS Code hands-on is to open the Get Started page. You will get an overview of VS Code’s customizations and features. Help > Get Started.
Pick a Walkthrough for a self-guided tour through the setup steps, features, and deeper customizations that VS Code offers. As you discover and learn, the walkthroughs track your progress.
If you are looking to improve your code editing skills open the Interactive Editor Playground. Try out VS Code’s code editing features, like multi-cursor editing, IntelliSense, Snippets, Emmet, and many more. Help > Editor Playground.
Command Palette
Access all available commands based on your current context.
Keyboard Shortcut: ⇧⌘P (Windows, Linux Ctrl+Shift+P )
Default keyboard shortcuts
All of the commands are in the Command Palette with the associated key binding (if it exists). If you forget a keyboard shortcut, use the Command Palette to help you out.
Keyboard reference sheets
Download the keyboard shortcut reference sheet for your platform (macOS, Windows, Linux).
Quick Open
Quickly open files.
Keyboard Shortcut: ⌘P (Windows, Linux Ctrl+P )
Typing commands such as edt and term followed by a space will bring up dropdown lists.
Navigate between recently opened files
Repeat the Quick Open keyboard shortcut to cycle quickly between recently opened files.
Open multiple files from Quick Open
You can open multiple files from Quick Open by pressing the Right arrow key. This will open the currently selected file in the background and you can continue selecting files from Quick Open.
Navigate between recently opened folders and workspaces
Keyboard Shortcut: ⌃R (Windows, Linux Ctrl+R )
Displays a Quick Pick dropdown with the list from File > Open Recent with recently opened folders and workspaces followed by files.
Command line
VS Code has a powerful command line interface (CLI) which allows you to customize how the editor is launched to support various scenarios.
Make sure the VS Code binary is on your path so you can simply type ‘code’ to launch VS Code. See the platform specific setup topics if VS Code is added to your environment path during installation (Running VS Code on Linux, macOS, Windows).
.vscode folder
Status Bar
Errors and warnings
Keyboard Shortcut: ⇧⌘M (Windows, Linux Ctrl+Shift+M )
Quickly jump to errors and warnings in the project.
Cycle through errors with F8 or ⇧F8 (Windows, Linux Shift+F8 )
You can filter problems either by type (‘errors’, ‘warnings’) or text matching.
Change language mode
Keyboard Shortcut: ⌘K M (Windows, Linux Ctrl+K M )
If you want to persist the new language mode for that file type, you can use the Configure File Association for command to associate the current file extension with an installed language.
Customization
There are many things you can do to customize VS Code.
Change your theme
Keyboard Shortcut: ⌘K ⌘T (Windows, Linux Ctrl+K Ctrl+T )
You can install more themes from the VS Code extension Marketplace.
Additionally, you can install and change your File Icon themes.
Keymaps
Are you used to keyboard shortcuts from another editor? You can install a Keymap extension that brings the keyboard shortcuts from your favorite editor to VS Code. Go to Preferences > Migrate Keyboard Shortcuts from. to see the current list on the Marketplace. Some of the more popular ones:
Customize your keyboard shortcuts
Keyboard Shortcut: ⌘K ⌘S (Windows, Linux Ctrl+K Ctrl+S )
You can search for shortcuts and add your own keybindings to the keybindings.json file.
Tune your settings
By default VS Code shows the Settings editor, you can find settings listed below in a search bar, but you can still edit the underlying settings.json file by using the Open Settings (JSON) command or by changing your default settings editor with the workbench.settings.editor setting.
Open User Settings settings.json
Keyboard Shortcut: ⌘, (Windows, Linux Ctrl+, )
Change the font size of various UI elements
Change the zoom level
Tip: You will need to have a font installed that supports font ligatures. FiraCode is a popular font on the VS Code team.
You can also toggle Auto Save from the top-level menu with the File > Auto Save.
Change the size of Tab characters
Whitespace characters are rendered by default in text selection.
Ignore files / folders
Removes these files / folders from your editor window.
Remove these files / folders from search results.
Language specific settings
You can scope the settings that you only want for specific languages by the language identifier. You can find a list of commonly used language IDs in the Language Identifiers reference.
Tip: You can also create language specific settings with the Configure Language Specific Settings command.
Add JSON validation
Enabled by default for many file types. Create your own schema and validation in settings.json
or for a schema defined in your workspace
or a custom schema
See more in the JSON documentation.
Extensions
Keyboard Shortcut: ⇧⌘X (Windows, Linux Ctrl+Shift+X )
Find extensions
Install extensions
In the Extensions view, you can search via the search bar or click the More Actions (. ) button to filter and sort by install count.
Extension recommendations
In the Extensions view, click Show Recommended Extensions in the More Actions (. ) button menu.
Creating my own extension
Are you interested in creating your own extension? You can learn how to do this in the Extension API documentation, specifically check out the documentation on contribution points.
Files and folders
Integrated Terminal
Keyboard Shortcut: ⌃` (Windows, Linux Ctrl+` )
Toggle Sidebar
Keyboard Shortcut: ⌘B (Windows, Linux Ctrl+B )
Toggle Panel
Keyboard Shortcut: ⌘J (Windows, Linux Ctrl+J )
Zen mode
Keyboard Shortcut: ⌘K Z (Windows, Linux Ctrl+K Z )
Enter distraction free Zen mode.
Press Esc twice to exit Zen Mode.
Side by side editing
Keyboard Shortcut: ⌘\ (Windows, Linux Ctrl+\ )
You can also drag and drop editors to create new editor groups and move editors between groups.
Switch between editors
Move to Explorer window
Keyboard Shortcut: ⇧⌘E (Windows, Linux Ctrl+Shift+E )
Create or open a file
Keyboard Shortcut: Ctrl+click ( Cmd+click on macOS)
Close the currently opened folder
Keyboard Shortcut: ⌘K F (Windows, Linux Ctrl+K F )
Navigation history
Navigate entire history: ⌃Tab (Windows, Linux Ctrl+Tab )
File associations
Create language associations for files that aren’t detected correctly. For example, many configuration files with custom file extensions are actually JSON.
Preventing dirty writes
VS Code will show you an error message when you try to save a file that cannot be saved because it has changed on disk. VS Code blocks saving the file to prevent overwriting changes that have been made outside of the editor.
In order to resolve the save conflict, click the Compare action in the error message to open a diff editor that will show you the contents of the file on disk (to the left) compared to the contents in VS Code (on the right):
Use the actions in the editor toolbar to resolve the save conflict. You can either Accept your changes and thereby overwriting any changes on disk, or Revert to the version on disk. Reverting means that your changes will be lost.
Note: The file will remain dirty and cannot be saved until you pick one of the two actions to resolve the conflict.
Editing hacks
Here is a selection of common features for editing code. If the keyboard shortcuts aren’t comfortable for you, consider installing a keymap extension for your old editor.
Multi cursor selection
To add cursors at arbitrary positions, select a position with your mouse and use Alt+Click ( Option+Click on macOS).
To set cursors above or below the current position use:
If you do not want to add all occurrences of the current selection, you can use ⌘D (Windows, Linux Ctrl+D ) instead. This only selects the next occurrence after the one you selected so you can add selections one by one.
Column (box) selection
You can select blocks of text by holding Shift+Alt ( Shift+Option on macOS) while you drag your mouse. A separate cursor will be added to the end of each selected line.
You can also use keyboard shortcuts to trigger column selection.
Vertical rulers
You can add vertical column rulers to the editor with the editor.rulers setting, which takes an array of column character positions where you’d like vertical rulers.
Fast scrolling
Pressing the Alt key enables fast scrolling in the editor and Explorers. By default, fast scrolling uses a 5X speed multiplier but you can control the multiplier with the Editor: Fast Scroll Sensitivity ( editor.fastScrollSensitivity ) setting.
Copy line up / down
The commands Copy Line Up/Down are unbound on Linux because the VS Code default keybindings would conflict with Ubuntu keybindings, see Issue #509. You can still set the commands editor.action.copyLinesUpAction and editor.action.copyLinesDownAction to your own preferred keyboard shortcuts.
Move line up and down
Keyboard Shortcut: ⌥↑ (Windows, Linux Alt+Up ) or ⌥↓ (Windows, Linux Alt+Down )
Shrink / expand selection
Keyboard Shortcut: ⌃⇧⌘← (Windows, Linux Shift+Alt+Left ) or ⌃⇧⌘→ (Windows, Linux Shift+Alt+Right )
You can learn more in the Basic Editing documentation.
Go to Symbol in File
Keyboard Shortcut: ⇧⌘O (Windows, Linux Ctrl+Shift+O )
Go to Symbol in Workspace
Keyboard Shortcut: ⌘T (Windows, Linux Ctrl+T )
Outline view
The Outline view in the File Explorer (default collapsed at the bottom) shows you the symbols of the currently open file.
You can sort by symbol name, category, and position in the file and allows quick navigation to symbol locations.
Navigate to a specific line
Keyboard Shortcut: ⌃G (Windows, Linux Ctrl+G )
Undo cursor position
Keyboard Shortcut: ⌘U (Windows, Linux Ctrl+U )
Trim trailing whitespace
Keyboard Shortcut: ⌘K ⌘X (Windows, Linux Ctrl+K Ctrl+X )
Transform text commands
You can change selected text to uppercase, lowercase, and title case with the Transform commands from the Command Palette.
Code formatting
Currently selected source code: ⌘K ⌘F (Windows, Linux Ctrl+K Ctrl+F )
Code folding
Keyboard Shortcut: ⌥⌘[ (Windows, Linux Ctrl+Shift+[ ) and ⌥⌘] (Windows, Linux Ctrl+Shift+] )
You can also fold/unfold all regions in the editor with Fold All ( ⌘K ⌘0 (Windows, Linux Ctrl+K Ctrl+0 ) ) and Unfold All ( ⌘K ⌘J (Windows, Linux Ctrl+K Ctrl+J ) ).
You can fold all block comments with Fold All Block Comments ( ⌘K ⌘/ (Windows, Linux Ctrl+K Ctrl+/ ) ).
Select current line
Keyboard Shortcut: ⌘L (Windows, Linux Ctrl+L )
Navigate to beginning and end of file
Keyboard Shortcut: ⌘↑ (Windows, Linux Ctrl+Home ) and ⌘↓ (Windows, Linux Ctrl+End )
Open Markdown preview
In a Markdown file, use
Keyboard Shortcut: ⇧⌘V (Windows, Linux Ctrl+Shift+V )
Side by side Markdown edit and preview
In a Markdown file, use
Keyboard Shortcut: ⌘K V (Windows, Linux Ctrl+K V )
The preview and editor will synchronize with your scrolling in either view.
IntelliSense
⌃Space (Windows, Linux Ctrl+Space ) to trigger the Suggestions widget.
You can view available methods, parameter hints, short documentation, etc.
Go to Definition
You can also see the type definition if you press Ctrl ( Cmd on macOS) when you are hovering over the type.
Go to References
Find All References view
Select a symbol then type ⇧⌥F12 (Windows, Linux Shift+Alt+F12 ) to open the References view showing all your file’s symbols in a dedicated view.
Rename Symbol
Search and modify
.eslintrc.json
Install the ESLint extension. Configure your linter however you’d like. Consult the ESLint specification for details on its linting rules and options.
Here is configuration to use ES6.
package.json
See IntelliSense for your package.json file.
Emmet syntax
Snippets
Create custom snippets
File > Preferences > User Snippets (Code > Preferences > User Snippets on macOS), select the language, and create a snippet.
Git integration
Keyboard Shortcut: ⌃⇧G (Windows, Linux Ctrl+Shift+G )
Git integration comes with VS Code «out-of-the-box». You can install other SCM providers from the Extension Marketplace. This section describes the Git integration but much of the UI and gestures are shared by other SCM providers.
Diffs
From the Source Control view, select a file to open the diff.
Alternatively, click the Open Changes button in the top right corner to diff the current open file.
Views
The default view for diffs is the side by side view.
Toggle inline view by clicking the More Actions (. ) button in the top right and selecting Toggle Inline View.
Review pane
Edit pending changes
You can make edits directly in the pending changes of the diff view.
Branches
Easily switch between Git branches via the Status Bar.
Staging
Stage file changes
Hover over the number of files and click the plus button.
Click the minus button to unstage changes.
Stage selected
Stage a portion of a file by selecting that file (using the arrows) and then choosing Stage Selected Ranges from the Command Palette.
Undo last commit
Click the (. ) button and then select Undo Last Commit to undo the previous commit. The changes are added to the Staged Changes section.
See Git output
VS Code makes it easy to see what Git commands are actually running. This is helpful when learning Git or debugging a difficult source control issue.
Gutter indicators
View diff decorations in editor. See documentation for more details.
Resolve merge conflicts
During a merge, go to the Source Control view ( ⌃⇧G (Windows, Linux Ctrl+Shift+G ) ) and make changes in the diff view.
You can resolve merge conflicts with the inline CodeLens which lets you Accept Current Change, Accept Incoming Change, Accept Both Changes, and Compare Changes.
Set VS Code as default merge tool
Set VS Code as default diff tool
Debugging
Configure debugger
From the Run and Debug view ( ⇧⌘D (Windows, Linux Ctrl+Shift+D ) ), select create a launch.json file, which will prompt you to select the environment that matches your project (Node.js, Python, C++, etc). This will generate a launch.json file. Node.js support is built-in and other environments require installing the appropriate language extensions. See the debugging documentation for more details.
Breakpoints and stepping through
Place breakpoints next to the line number. Navigate forward with the Debug widget.
Data inspection
Inspect variables in the Run panels and in the console.
Logpoints
Logpoints act much like breakpoints but instead of halting the debugger when they are hit, they log a message to the console. Logpoints are especially useful for injecting logging while debugging production servers that cannot be modified or paused.
Add a logpoint with the Add Logpoint command in the left editor gutter and it will be displayed as a «diamond» shaped icon. Log messages are plain text but can include expressions to be evaluated within curly braces (‘<>‘).
Task runner
Auto detect tasks
Select Terminal from the top-level menu, run the command Configure Tasks, then select the type of task you’d like to run. This will generate a tasks.json file with content like the following. See the Tasks documentation for more details.
There are occasionally issues with auto generation. Check out the documentation for getting things to work properly.
Run tasks from the Terminal menu
Select Terminal from the top-level menu, run the command Run Task, and select the task you want to run. Terminate the running task by running the command Terminate Task
Define keyboard shortcuts for tasks
For example, to bind Ctrl+H to the Run tests task, add the following:
Run npm scripts as tasks from the Explorer
Portable mode
VS Code has a Portable mode which lets you keep settings and data in the same location as your installation, for example, on a USB drive.
Insiders builds
The Visual Studio Code team uses the Insiders version to test the latest features and bug fixes of VS Code. You can also use the Insiders version by downloading it here.
Why did we build Visual Studio Code?
Visual Studio Code combines the simplicity of a source code editor with powerful developer tooling, like IntelliSense code completion and debugging.
First and foremost, it is an editor that gets out of your way. The delightfully frictionless edit-build-debug cycle means less time fiddling with your environment, and more time executing on your ideas.
Available for macOS, Linux, and Windows
Edit, build, and debug with ease
At its heart, Visual Studio Code features a lightning fast source code editor, perfect for day-to-day use. With support for hundreds of languages, VS Code helps you be instantly productive with syntax highlighting, bracket-matching, auto-indentation, box-selection, snippets, and more. Intuitive keyboard shortcuts, easy customization and community-contributed keyboard shortcut mappings let you navigate your code with ease.
For serious coding, you’ll often benefit from tools with more code understanding than just blocks of text. Visual Studio Code includes built-in support for IntelliSense code completion, rich semantic code understanding and navigation, and code refactoring.
And when the coding gets tough, the tough get debugging. Debugging is often the one feature that developers miss most in a leaner coding experience, so we made it happen. Visual Studio Code includes an interactive debugger, so you can step through source code, inspect variables, view call stacks, and execute commands in the console.
VS Code also integrates with build and scripting tools to perform common tasks making everyday workflows faster. VS Code has support for Git so you can work with source control without leaving the editor including viewing pending changes diffs.
Make it your own
Customize every feature to your liking and install any number of third-party extensions. While most scenarios work «out of the box» with no configuration, VS Code also grows with you, and we encourage you to optimize your experience to suit your unique needs. VS Code is an open-source project so you can also contribute to the growing and vibrant community on GitHub.
Built with love for the Web
VS Code includes enriched built-in support for Node.js development with JavaScript and TypeScript, powered by the same underlying technologies that drive Visual Studio. VS Code also includes great tooling for web technologies such as JSX/React, HTML, CSS, SCSS, Less, and JSON.
Robust and extensible architecture
Visual Studio Code includes a public extensibility model that lets developers build and use extensions, and richly customize their edit-build-debug experience.
Ready, set, code!
If you prefer a code editor-centric development tool or are building cross-platform web and cloud applications, we invite you to try out Visual Studio Code and let us know what you think!
Next steps
Read on to find out about:
Visual Studio Code Server
The Visual Studio Code Server is a service you can run on a remote development machine, like your desktop PC or a virtual machine (VM). It allows you to securely connect to that remote machine from anywhere through a vscode.dev URL, without the requirement of SSH.
What is the VS Code Server?
In VS Code, we want users to seamlessly leverage the environments that make them the most productive. The VS Code Remote Development extensions allow you to work in the Windows Subsystem for Linux (WSL), remote machines via SSH, and dev containers directly from VS Code. These extensions install a server on the remote environment, allowing local VS Code to smoothly interact with remote source code and runtimes.
We are now providing a standalone «VS Code Server,» which is a service built off the same underlying server used by the remote extensions, plus some additional functionality, like an interactive CLI and facilitating secure connections to vscode.dev.
A preview of a larger journey
This is just the first step along the path towards a fully unified code CLI that lets you manage both the desktop and the server.
Architecture
The VS Code Server’s CLI establishes a tunnel between a VS Code client (vscode.dev) and your remote machine. Tunneling, also known as port forwarding, securely transmits data from one network to another.
The VS Code Server experience includes a few components:
Scenarios
The VS Code Server allows you to use VS Code in new ways, such as:
Continue reading to learn how to get started with the VS Code Server.
Quick Start
As the service that you use to securely connect to the VS Code Server is in private preview, you’ll need to request access through a signup form. You’ll receive an email, hopefully only within a few weeks, once you can start using the service.
At that point, here are step-by-step instructions to quickly get up and running:
Install the VS Code Server on your remote machine. You can install and host it in a machine on-premises or in the cloud, as long as it meets the necessary system requirements.
There are different install commands for different architectures:
Linux or macOS:
Windows (x64):
Run the following commands in a non-elevated PowerShell. You may need to restart your terminal for the PATH changes to apply.
Windows (ARM):
Run the following commands in a non-elevated PowerShell. You may need to restart your terminal for the PATH changes to apply.
Start the VS Code Server by running the following in a remote terminal:
Your remote machine will communicate with vscode.dev through a secure tunnel, which allows you to connect to your computer from vscode.dev, no matter what network you’re on.
You’ll be provided a device code and URL to authenticate your GitHub account into the VS Code Server’s secure tunneling service.
Authenticate into the tunneling service by entering the device code at the provided auth URL.
If this is your first time launching the VS Code Server on this remote machine, you’ll be prompted to enter a machine name. The CLI will suggest a fun default «adjective-noun» name (examples shown below), which you can choose to accept too.
After authenticating and providing a machine name, the CLI spins up a server instance and generates a vscode.dev URL. To connect to your remote machine, you can open this URL on any device.
Note: You can also connect to your remote machine directly from vscode.dev: Open the Command Palette ( F1 ) in vscode.dev and run the command Remote Server: Connect to Remote.
Congratulations, you’ve successfully installed and run the VS Code Server! The connection is fully established once you visit the generated vscode.dev link. Your remote machine’s files should be present in the VS Code Explorer, and you can start coding against it from vscode.dev.
Things to try
Licensing and other commands
Upon first run of the VS Code Server, you’ll be prompted to accept the terms of the license. You can view the license for the VS Code Server here.
Extension commands
As with the VS Code Server’s CLI, the Remote-Server extension in VS Code has additional commands you can explore by opening the Command Palette ( F1 ) in VS Code and typing Remote Server. Like the other Remote Development Extensions, the name of your remote machine will be listed in the lower left green remote indicator. Clicking on this indicator is another way to explore server commands, along with options to close your remote connection or install desktop VS Code.
Remote Server: Connect to Remote. allows you to connect to existing remote machines right from your local VS Code instance, rather than grabbing the vscode.dev link in the remote terminal. You can connect to a remote machine as long as the server is still running on it.
You can also view your existing remote machines in the Remote Explorer view (which you can display with the command View: Show Remote Explorer).
Telemetry
If telemetry is not disabled via the CLI, the VS Code Server will begin respecting the client telemetry settings (your telemetry setting in vscode.dev) upon successful connection.
Common Questions
How can I get access to the VS Code Server?
The VS Code Server is a private preview, so you’ll need to request access through its signup form. It may take a few weeks to get access, and you’ll receive an email once you have access and can start using it.
Is the VS Code Server designed for multiple users to access the same remote instance?
No, an instance of the server is designed to be accessed by a single user.
Can I host VS Code / the VS Code Server myself?
This will allow you to host VS Code’s web bits yourself. It will install the VS Code web UI on your remote machine and generate a localhost URL.
Can I host the VS Code Server as a service?
No, hosting it as a service is not allowed, as specified in the VS Code Server license.
Is there a list of endpoints the VS Code Server uses?
If you’re working in a restricted environment, you may need to ensure the VS Code Server has access to the following endpoints:
Can I use the Remote Development Extensions or a dev container with the VS Code Server?
Are there any other extension limitations?
Pure UI extensions are not supported when using a web-based instance of VS Code, which you can learn more about in the extension authors Remote Development guide.
Are there browser limitations?
While working in the browser, there are certain limitations and configuration steps to consider. You can read more about this in the VS Code for the Web documentation.
Is there a limit to the number of remote machines I can connect to?
Right now, you can only have 10 remote machines actively running the VS Code Server. If you’d like to connect to a new remote machine, and already have 10 others running, you’ll need to stop the server on one of your other machines.
How can I keep the VS Code Server up-to-date?
You will get a notification in vscode.dev when you connect to your remote machine if an update is available, and you’ll be able to update directly through this notification.
Will my app’s ports be forwarded automatically?
Beyond the automatic tunnel creation from your remote machine to vscode.dev, there is not additional port forwarding at this time.
I see an error about keyring storage. What should I do?
Settings Sync requires authentication against a Settings Sync server. The corresponding secret is persisted on the server. This requires to set up a keyring on the server. When the keyring is not set up, the VS Code Server falls back to an in-memory secret stored on the server. In this case, secrets are only persisted during the lifetime of the server.
If you’re using serve-local mode, you can run the following:
How do I uninstall the VS Code Server?
Where can I provide feedback or report an issue?
Introductory Videos
Start your journey using Visual Studio Code with this set of introductory videos! These videos are designed to give you an overview of VS Code’s various features and quickly get you familiar with them.
Linux users: Make sure you have the correct multimedia codecs installed for your Linux distribution. For example, on Ubuntu, you may need to install ubuntu-restricted-extras to get the necessary codecs to play the videos.
Getting Started
Set up and learn the basics of Visual Studio Code.
Duration 5 min minutes
Code Editing
Learn how to edit and run code in VS Code.
Duration 3 min minutes
Productivity Tips
Become a VS Code power user with these productivity tips.
Duration 4 min minutes
Personalize
Personalize VS Code to make it yours with themes.
Duration 2 min minutes
Extensions
Add features, themes, and more to VS Code with extensions!
Duration 4 min minutes
Debugging
Get started with debugging in VS Code.
Duration 6 min minutes
Version Control
Learn how to use Git version control in VS Code.
Duration 3 min minutes
Customize
Learn how to customize your settings and keyboard shortcuts in VS Code.
Duration 6 min minutes
Troubleshooting
Videos won’t play on Linux
You may not have the correct multimedia codecs installed for your Linux distribution. For example, on Ubuntu, you may need to install ubuntu-restricted-extras to get the necessary codecs to play the videos.
November 2021 (version 1.63)
Update 1.63.1: The update addresses these security issues.
Update 1.63.2: The update addresses these issues.
Welcome to the November 2021 release of Visual Studio Code. There are many updates in this version that we hope you will like, some of the key highlights include:
If you’d like to read these release notes online, go to Updates on code.visualstudio.com.
Watch a highlight of the new features in this version at the VS Code team’s release party. You can find the recording of the event on our YouTube channel.
Insiders: Want to try new features as soon as possible? You can download the nightly Insiders build and try the latest updates as soon as they are available.
Workbench
Preview themes before installing
You can now preview themes available on the Marketplace before installing them. From the Color Themes dropdown ( ⌘K ⌘T (Windows, Linux Ctrl+K Ctrl+T ) ), select Browse Additional Color Themes to list the Marketplace themes. The VS Code UI will preview the Color Theme as you navigate the dropdown.
Press Enter on a theme entry to install the extension.
Configure Problems navigation order
Multiple language specific editor settings
You can now configure language specific editor settings for multiple languages at once. The following example shows how you can customize settings for javascript and typescript languages together in your settings.json file:
Automatic 2×2 editor grid
A true 2×2 grid editor layout was only possible using the View: Grid Editor Layout (2×2) command. Now you can get the same layout by manually splitting editors until you reach a 2×2 grid, and the grid will automatically lock into a true 2×2 layout.
Better Escape handling in lists
Pressing Escape on lists and trees will now shrink the selection to a single element before clearing it.
Find enabled on web
The Find control is now supported inside webviews when VS Code is running in a browser (github.dev in the example below):
Due to limitations with current browser APIs, find behaves a bit differently than it does on desktop. For example, on web, VS Code can only highlight the current find result. On desktop, all results are highlighted in the current file.
Screencast mode shows command names
You can now choose to show command names as you trigger them via keyboard shortcuts in screencast mode. Use the Screencast Mode: Keyboard Shortcuts Format ( screencastMode.keyboardShortcutsFormat ) setting to configure this behavior.
Pre release extensions
VS Code now supports pre-release versions of extensions so you can opt in to install them and try out the latest cutting edge features from extensions. VS Code shows an additional Install Pre-Release Version option in the extension Install drop-down menu for installing the pre-release version.
Once installed, an indicator makes it clear if you are using the pre-release version of an extension:
If there is a pre-release version of an extension that you have already installed, you can easily switch to it:
Updated Find actions
The Find actions in the Search view now use the same style as Find actions in the editor:
Source Control
Ignore trim whitespace in quick diff
You can now configure the SCM quick diff feature displayed in the left gutter to ignore trim whitespace, using the scm.diffDecorationsIgnoreTrimWhitespace setting.
Notebooks
Adjust the font size in notebooks
The new notebook.markup.fontSize setting lets you control the font size of notebook Markdown content. The default for this setting is 120% of the current editor font size.
Syntax highlighting in Markdown cells
VS Code now supports syntax highlighting of fenced codeblocks inside Markdown cells:
File links in notebooks
Markdown inside notebooks can now link to other files in the current workspace:
Bare http(s) links notebooks
In addition, Markdown text that includes http or https is now automatically turned into a link:
This matches the behavior of other notebook renderers, such as JupyterLab.
Dynamic visibility of notebook toolbar labels
Editor
Unicode highlighting
All uncommon invisible characters in source code are now highlighted by default:
In addition, characters that can be confused with ASCII characters are also highlighted:
You can read «The Invisible JavaScript Backdoor» blog post or this University of Cambridge article for how invisible or confusable Unicode characters can be used in Unicode spoofing attacks.
Note that this feature does not detect all possible Unicode spoofing attacks, as this depends on your font and locale settings. Also, the detection of ambiguous characters is done heuristically. To be on the safe side, VS Code’s Workspace Trust Restricted Mode should be used to review source code, as all non-ASCII characters are highlighted in untrusted workspaces.
Individual characters can be excluded from being highlighted and characters in comments or text with the following settings:
In addition, Markdown documents are not highlighted by default.
Multiple hover providers
When having multiple hover providers for a document, the hover will now display as soon as one of the providers has returned a result and it will update with the rest of the providers results, as they come in:
Before | After |
---|---|
Tasks
automationProfile setting
The old settings terminal.integrated.automationShell.* have been deprecated and new terminal.integrated.automationProfile.* settings have been added. This allows for greater freedom in specifying properties of terminals used for tasks, including shell, icon, color, and shell argument.
gulpfile.ts support
The built-in gulp extension now supports detecting tasks from gulpfile.ts files.
NPM Scripts view improvements
The NPM scripts view shows more details about the scripts.
Languages
TypeScript 4.5
VS Code now ships with TypeScript 4.5. This update brings a number of new language features, along with tooling improvements and bug fixes.
You can read more about TypeScript 4.5 on the TypeScript blog.
Method signature completions
Method signature completions let you quickly override methods and implement interface methods. With this feature, when you are inside a class body, suggestions for methods—such as those from a super class—insert the entire signature of the method when accepted:
If you’re writing TypeScript, accepting the suggestion also adds all the necessary imports for types referenced in the signature.
JSX attribute completions
When completing JSX attributes in JavaScript and TypeScript, VS Code will now automatically insert the attribute value:
Possible settings values are:
Removing of semantic highlighting for older TS versions
This update removes support for semantic highlighting when using TypeScript 4.1 or older in your workspace.
TypeScript 4.2 added native support for semantic highlighting. On older versions, semantic highlighting was implemented as a TypeScript language plugin provided by VS Code. Removing the plugin reduces the amount of code to maintain and ship.
Markdown Preview custom editor
You can now use the Reopen With command to make a Markdown file be shown as a Markdown preview instead of text:
Unlike the Markdown: Open Preview command, Reopen With does not open a new editor tab, instead it changes how an already opened editor tab is displayed. Use Reopen With again to switch the file back to the default text view.
Additionally, you can now configure VS Code to automatically open any Markdown file as a preview using the workbench.editorAssociations setting:
Markdown Preview incremental updating
The built-in Markdown preview now more intelligently updates itself as you type. Instead of replacing the entire Markdown preview document for every update, the preview now uses DOM diffing to only replace the elements in the preview document that have changed. This reduces the jittering that would sometime occur while typing.
JSON language indicator
When editing in a JSON file, there’s now a language indicator <> that shows whether the content was validated against one or more JSON schemas. Hovering over the indicator shows the validation state and a link to open the schema.
JSON schema caching
JSON schemas from the schema store (json.schemastore.org) are now cached locally. This saves network bandwidth and helps when working off-line.
Emmet Remove Tag command improvement
The Emmet: Remove Tag command now removes the line with the tag, along with excess empty lines as applicable, when the tag is on its own line before the removal. It also re-indents the remaining lines properly now, when there are empty lines in between the tags to be removed.
VS Code for the Web
Azure Repos
We have also added a new entry point to your Azure Repos repository. You can now use the new Open Repository from Azure Repos. menu item under the Open Remote Repositories. menu item in the remote picker to connect to your Azure Repos repository from within https://vscode.dev.
Improved Remote menu
Three additional commands now appear in the Remote menu:
Contributions to extensions
The Extension Pack for Java now has an in-product welcome experience to help you configure and learn about Java in VS Code. The walkthroughs cover installing the Java runtime and useful frameworks, opening and debugging your project, and running tests directly inside VS Code.
You can also check out the Java tutorials and user guides at https://code.visualstudio.com/docs/java to help get you started.
Jupyter
Performance improvements
For more details on the changes made to improve the performance, you can review the following issues:
Improvements in handling kernel failures
Several improvements have been made to provide better and more meaningful error messages when kernels fail to start or stop during execution. Errors are now displayed in the cells outputs along with instructions on how to fix the issue. This ensures that users are aware of the issue and can fix it, in case they miss the error displayed on the bottom right of VS Code.
Python
Limited support for untrusted and virtual workspaces
The Python extension now has limited support for untrusted workspaces (see Workspace Trust) or is on a virtual file system (for example, if a remote GitHub repository is opened). Only partial IntelliSense is provided in such cases and other features of the extension are not available:
The language item in Status bar is updated to indicate these situations:
Module rename refactoring
You can now more easily rename modules with the Python and Pylance extensions. Once you rename a Python module, you’ll be prompted to choose whether you’d like to change all imports and references throughout your code. If you’re not sure, you can first preview what the changes will look like before you make the decision. Once you’re confident, you can select Apply Refactoring or Discard Refactoring to not have the proposed changes applied.
Remote Development
Work continues on the Remote Development extensions, which allow you to use a container, remote machine, or the Windows Subsystem for Linux (WSL) as a full-featured development environment.
Feature highlights in 1.63 include:
You can learn about new extension features and bug fixes in the Remote Development release notes.
GitHub Pull Requests and Issues
Work continues on the GitHub Pull Requests and Issues extension, which allows you to work on, create, and manage pull requests and issues. Check out the changelog for the 0.34.0 release of the extension to see the highlights.
Extension authoring
Updated API proposal structure
The updated flow for API proposals should be like this:
A detailed migration guide and sample migrations can be found in issue #136964. Also note that the restrictions around proposed API usages haven’t changed. Extensions using a proposed API cannot be published and cannot be used as-is.
Quick Pick API improvements
This iteration, we are finalizing a couple of APIs for the QuickPick in VS Code.
QuickPickItem inline buttons
Being able to provide rich input experiences is a goal of our extension API and using the familiarity of VS Code’s Quick Pick allows for powerful yet simple UI flows. One addition is that extensions can now add buttons to individual QuickPickItem s.
Clicking on a button triggers the onDidTriggerItemButton event that exists on a QuickPick object. We look forward to seeing how you use these buttons in your extensions.
Ability to keep scroll position when updating items
Along with the ability to add buttons to QuickPickItem s, you may also want to keep the scroll position when updating the items. This is a common use case for extensions who want to:
The keepScrollPosition property on the QuickPick object that comes back from window.createQuickPick() allows you to control whether or not the scroll position ( cursorTop ) in the Quick Pick moves back to the top of the list.
Authentication API improvements
This iteration, we are finalizing several APIs related to authentication in VS Code.
Force the creation of a new session
An example is GitHub Single Sign On’s Security Assertion Markup Language (SAML) support. By default, a token generated for you with repo scope will have the ability to access your own personal repositories. However, if you are in an organization with GitHub’s Single Sign On turned on, you will have to explicitly grant a session the ability to access repositories in that organization.
In this example, the GitHub Authentication provider won’t know the difference between a token that is properly SAML’d for what you’re trying to access or not and so to rectify that behavior, you can now force the creation of a new session.
You can also specify an object with a detail string, if you want to show a more descriptive message to the user.
Silently retrieve a session if an extension has one
A common pattern we’ve seen is that some extensions, when they activate, will check to see if they have an authentication session available. If so, they will use it to pre-load data and do other tasks ahead of time to speed up performance later on. The downside of this was that if a user hasn’t given that extension access to an authentication session, a badge would be displayed on the account menu and an item in the menu will be added asking the user to sign in.
Note: This API will only return an authenticated session if the extension has already been granted access to the session in the past (in other words, it’s a «trusted extension»). An extension will never be given a session that the user didn’t consent to.
Settings editor improvements
Ordered settings
Individual settings can now be ordered with the order field. Ordered settings always come before unordered ones within the same category, and the ordering is relative.
Ungrouped category support
Settings can also be grouped under the main extension header instead of a specific category. To do that, set the category title of one of the categories to be the same as the extension display name.
Notice in the example below that the Conf > Language: Show Size setting is directly under the Configuration Sample header.
Support for number and integer objects
Objects with non-nullable number/integer values are now supported in the Settings editor.
New type signature for executeCommand
In previous versions of VS Code, vscode.commands.executeCommand was typed to always return a promise of a potentially undefined value:
To fix this, we’ve updated the typings for executeCommand to be more explicit:
This change only effects the typings of executeCommand and does not change the behavior of this function.
Updating vscode.d.ts for exactOptionalPropertyTypes
We’ve updated the typings in vscode.d.ts to better support TypeScript’s exactOptionalPropertyTypes strictness option. This work included:
If you are using exactOptionalPropertyTypes with your extension, please let us know if you run into any issues with the vscode.d.ts typings.
HTML custom data from URIs
Custom data allows users and extensions to extend the HTML language support with new HTML tags and attributes.
In this release, the HTML custom data contribution also accepts document URIs. You can use this to provide the custom data at runtime through a document from a TextDocumentContentProvider.
Configuration defaults overrides
Note: Configurations with application or machine scopes cannot be overridden.
Replace content in Output channel
In this milestone, a new replace API on the OutputChannel object can replace the content in the output channel.
Timeout of workspaceContains
When using a workspaceContains: activation event with a glob pattern, VS Code starts a file name search in the workspace, looking for a file name that matches the provided glob pattern. As soon as a matching file name is found, the extension is activated. If no matching file names are found within 7 seconds, VS Code will now cancel the search and the extension will not be activated.
Publishing pre-release extensions
The VS Code Marketplace only supports major.minor.patch for extension versions and does not yet support semver pre-release tags. We therefore recommend that extensions use major.EVEN_NUMBER.patch for release versions and major.ODD_NUMBER.patch for pre-release versions. For example: 0.2.* for release and 0.3.* for pre-release. VS Code will auto update extensions to the highest version available, so even if a user opted into a pre-release version, once there is an extension released with a higher version, that user will be updated to the released version.
More information about pre-release extensions can be found in the Pre-release Extensions topic.
Language Server Protocol
A new next version of the Language Server Protocol, together with the corresponding npm modules, has been published. Besides various minor improvements, the new version contains a proposed implementation for inline values.
Debug Adapter Protocol
New important category for the Output event
The Output event of the Debug Adapter Protocol is used to send the stdout and stderr streams of the debuggee as well as informational messages from the debugger to the Debug Console. This stream of messages can be a lot for a user to process and critical things can go unnoticed. For this reason, a new category important was added to the Output event, which can be used by a debug adapter to display critical messages that need to stand out and not get overlooked by the user. The important category is a hint for the client to show important information in a highly visible UI, for example as a popup notification. Since this category is a hint, clients might ignore the hint and assume the default category ( console ).
Clarifications and improvements for the execution control requests
In addition, some debug adapters have a need for an «alternative semantic» where step or continue operate only on the current thread but keep all other threads in the suspended state. For this «alternative behavior», a new optional singleThread property has been added to all execution control requests. A corresponding new capability supportsSingleThreadExecutionRequests must be used by a debug adapter to indicate to the client that the execution control requests support the singleThread property.
Proposed extension APIs
Every milestone comes with new proposed APIs and extension authors can try them out. As always, we want your feedback. Here are the steps to try out a proposed API:
You cannot publish an extension that uses a proposed API. There may be breaking changes in the next release and we never want to break existing extensions.
QuickPickItem separators
This iteration we are introducing the ability for extensions to add separators (also known as «categories») to a Quick Pick via a proposed API ( vscode.proposed.quickPickSeparators.d.ts ). This is useful for grouping items or just having a bit of space between items:
In the example above, you would add the following object to your list of items:
You can provide feedback about this API in issue #74967.
Notable fixes
Thank you
Last but certainly not least, a big Thank You to the contributors of VS Code.
Web extensions
Extension authors for enabling extensions that run code as web extensions (the list below is between November 2 and December 6):
Issue tracking
Contributions to our issue tracking:
Pull requests
Contributions to vscode :
Contributions to vscode-codicons :
Contributions to vscode-css-languageservice :
Contributions to vscode-eslint :
Contributions to vscode-extension-samples :
Contributions to vscode-html-languageservice :
Contributions to vscode-json-languageservice :
Contributions to vscode-languageserver-node :
Contributions to vscode-pull-request-github :
Contributions to vscode-vsce :
Contributions to language-server-protocol :
Extension API
Visual Studio Code is built with extensibility in mind. From the UI to the editing experience, almost every part of VS Code can be customized and enhanced through the Extension API. In fact, many core features of VS Code are built as extensions and use the same Extension API.
This documentation describes:
If you are looking for published extensions, head to the VS Code Extension Marketplace.
What can extensions do?
Here are some examples of what you can achieve with the Extension API:
If you’d like to have a more comprehensive overview of the Extension API, refer to the Extension Capabilities Overview page. Extension Guides Overview also includes a list of code samples and guides that illustrate various Extension API usage.
How to build extensions?
Building a good extension can take a lot of time and effort. Here is what each section of the API docs can help you with:
What’s new?
VS Code updates on a monthly cadence, and that applies to the Extension API as well. New features and APIs become available every month to increase the power and scope of VS Code extensions.
To stay current with the Extension API, you can review the monthly release notes, which have dedicated sections covering:
Looking for help
If you have questions for extension development, try asking on:
To provide feedback on the documentation, create new issues at Microsoft/vscode-docs. If you have extension questions that you cannot find an answer for, or issues with the VS Code Extension API, please open new issues at Microsoft/vscode.
Code Navigation
Visual Studio Code has a high productivity code editor which, when combined with programming language services, gives you the power of an IDE and the speed of a text editor. In this topic, we’ll first describe VS Code’s language intelligence features (suggestions, parameter hints, smart code navigation) and then show the power of the core text editor.
Quick file navigation
Tip: You can open any file by its name when you type ⌘P (Windows, Linux Ctrl+P ) (Quick Open).
The Explorer is great for navigating between files when you are exploring a project. However, when you are working on a task, you will find yourself quickly jumping between the same set of files. VS Code provides two powerful commands to navigate in and across files with easy-to-use key bindings.
Hold Ctrl and press Tab to view a list of all files open in an editor group. To open one of these files, use Tab again to pick the file you want to navigate to, then release Ctrl to open it.
Breadcrumbs
The editor has a navigation bar above its contents called Breadcrumbs. It shows the current location and allows you to quickly navigate between folders, files, and symbols.
Breadcrumbs always show the file path and, with the help of language extensions, the symbol path up to the cursor position. The symbols shown are the same as in Outline view and Go to Symbol.
Selecting a breadcrumb in the path displays a dropdown with that level’s siblings so you can quickly navigate to other folders and files.
If the current file type has language support for symbols, you will see the current symbol path and a dropdown of other symbols at the same level and below.
You can turn off breadcrumbs with the View > Show Breadcrumbs toggle or with the breadcrumbs.enabled setting.
Breadcrumb customization
Symbol order in Breadcrumbs
You can control how symbols are ordered in the Breadcrumbs dropdown with the breadcrumbs.symbolSortOrder settings.
Allowed values are:
Breadcrumb keyboard navigation
You can also interact with breadcrumbs without the dropdown. Press ⇧⌘; (Windows, Linux Ctrl+Shift+; ) to focus the last element, use ← (Windows, Linux Left ) and → (Windows, Linux Right ) to navigate, and use Space to reveal the element in the editor.
Go to Definition
If you press Ctrl and hover over a symbol, a preview of the declaration will appear:
Go to Type Definition
Some languages also support jumping to the type definition of a symbol by running the Go to Type Definition command from either the editor context menu or the Command Palette. This will take you to the definition of the type of a symbol. The command editor.action.goToTypeDefinition is not bound to a keyboard shortcut by default but you can add your own custom keybinding.
Go to Implementation
Go to Symbol
Open symbol by name
You can navigate between different references in the peeked editor and make quick edits right there. Clicking on the peeked editor filename or double-clicking in the result list will open the reference in the outer editor.
Tip: Additionally, the peek window is closed if you press Escape or double-click in the peek editor region. You can disable this behavior with the editor.stablePeek setting.
Bracket matching
Matching brackets will be highlighted as soon as the cursor is near one of them.
Tip: You can jump to the matching bracket with ⇧⌘\ (Windows, Linux Ctrl+Shift+\ )
Bracket Pair Colorization
All colors are themeable and up to six colors can be configured.
You can use workbench.colorCustomizations to override these theme-contributed colors in your settings:
Reference information
Some languages like C# support inline reference information, that is updated live. This allows you to quickly analyze the impact of your edit or the popularity of your specific method or property throughout your project:
Tip: Directly invoke the Peek References action by clicking on these annotations.
Tip: Reference information shown in CodeLens can be turned on or off through the editor.codeLens setting.
Rename symbol
Errors & warnings
Warnings or Errors can be generated either via configured tasks, by rich language services, or by linters, that constantly analyze your code in the background. Since we love bug-free code, warnings and errors show up in multiple places:
Tip: To loop through errors or warnings in the current file, you can press F8 or ⇧F8 (Windows, Linux Shift+F8 ) which will show an inline zone detailing the problem and possible Code Actions (if available):
Code Action
Warnings and Errors can provide Code Actions (also known as Quick Fixes) to help fix issues. These will be displayed in the editor in the left margin as a lightbulb. Clicking on the lightbulb will either display the Code Action options or perform the action.
Inlay Hints
Some languages provide inlay hints: that is additional information about source code that is rendered inline. This is usually used to show infered types. The sample below shows inlay hints that display the inferred types of JavaScript variables and function return types.
Inlay hints can be enabled/disabled with the editor.inlayHints.enabled setting, the default is enabled. Extensions, like TypeScript or Rust, are needed to provide the actual inlay hint information.
Outgoing link protection
For your protection, VS Code displays a prompt before opening an outgoing website link from the editor.
You can proceed to the external website in your browser or have the options to copy the link or cancel the request. If you choose Configure Trusted Domains, a dropdown lets you trust the exact URL, trust the URL domain and subdomains, or trust all domains to disable outgoing link protection.
The option to Manage Trusted Domains, also available at any time from the Command Palette, brings up the Trusted Domains JSON file, where you can add, remove, or modify trusted domains.
Next steps
Now that you know how the editor works, time to try a few other things.
Common questions
How can I automatically select the second entry in Quick Open instead of the first?
How can I configure Ctrl+Tab to navigate across all editors of all groups
By default, Ctrl+Tab navigates between editors of the same editor group. If you want to navigate across all opened editors in all groups, you can create keyboard shortcuts for the workbench.action.quickOpenPreviousRecentlyUsedEditor and workbench.action.quickOpenLeastRecentlyUsedEditor commands:
How can I navigate between recently used editors without a picker
Here is a list of commands you can use to navigate in editors without opening a picker:
Basic Editing
Visual Studio Code is an editor first and foremost, and includes the features you need for highly productive source code editing. This topic takes you through the basics of the editor and helps you get moving with your code.
Keyboard shortcuts
Being able to keep your hands on the keyboard when writing code is crucial for high productivity. VS Code has a rich set of default keyboard shortcuts as well as allowing you to customize them.
Multiple selections (multi-cursor)
Note: Your graphics card driver (for example NVIDIA) might overwrite these default shortcuts.
⌘D (Windows, Linux Ctrl+D ) selects the word at the cursor, or the next occurrence of the current selection.
Multi-cursor modifier
If you’d like to change the modifier key for applying multiple cursors to Cmd+Click on macOS and Ctrl+Click on Windows and Linux, you can do so with the editor.multiCursorModifier setting. This lets users coming from other editors such as Sublime Text or Atom continue to use the keyboard modifier they are familiar with.
The setting can be set to:
There’s also a menu item Use Ctrl+Click for Multi-Cursor in the Selection menu to quickly toggle this setting.
Shrink/expand selection
Here’s an example of expanding the selection with ⌃⇧⌘→ (Windows, Linux Shift+Alt+Right ) :
Column (box) selection
Place the cursor in one corner and then hold Shift+Alt while dragging to the opposite corner:
Note: This changes to Shift+Ctrl/Cmd when using Ctrl/Cmd as multi-cursor modifier.
There are also default key bindings for column selection on macOS and Windows, but not on Linux.
You can edit your keybindings.json to bind them to something more familiar if you want.
Column Selection mode
The user setting Editor: Column Selection controls this feature. Once this mode is entered, as indicated in the Status bar, the mouse gestures and the arrow keys will create a column selection by default. This global toggle is also accessible via the Selection > Column Selection Mode menu item. In addition, one can also disable Column Selection mode from the Status bar.
Save / Auto Save
Hot Exit
VS Code will remember unsaved changes to files when you exit by default. Hot exit is triggered when the application is closed via File > Exit (Code > Quit on macOS) or when the last window is closed.
You can configure hot exit by setting files.hotExit to the following values:
If something happens to go wrong with hot exit, all backups are stored in the following folders for standard install locations:
Find and Replace
VS Code allows you to quickly find text and replace in the currently opened file. Press ⌘F (Windows, Linux Ctrl+F ) to open the Find Widget in the editor, search results will be highlighted in the editor, overview ruler and minimap.
If there are more than one matched result in the current opened file, you can press Enter and ⇧Enter (Windows, Linux Shift+Enter ) to navigate to next or previous result when the find input box is focused.
Seed Search String From Selection
When the Find Widget is opened, it will automatically populate the selected text in the editor into the find input box. If the selection is empty, the word under the cursor will be inserted into the input box instead.
Find In Selection
By default, the find operations are run on the entire file in the editor. It can also be run on selected text. You can turn this feature on by clicking the hamburger icon on the Find Widget.
Advanced find and replace options
In addition to find and replace with plain text, the Find Widget also has three advanced search options:
The replace input box support case preserving, you can turn it on by clicking the Preserve Case (AB) button.
Multiline support and Find Widget resizing
You can search multiple line text by pasting the text into the Find input box and Replace input box. Pressing Ctrl+Enter inserts a new line in the input box.
While searching long text, the default size of Find Widget might be too small. You can drag the left sash to enlarge the Find Widget or double click the left sash to maximize it or shrink it to its default size.
Search across files
VS Code allows you to quickly search over all files in the currently opened folder. Press ⇧⌘F (Windows, Linux Ctrl+Shift+F ) and enter your search term. Search results are grouped into files containing the search term, with an indication of the hits in each file and its location. Expand a file to see a preview of all of the hits within that file. Then single-click on one of the hits to view it in the editor.
Tip: We support regular expression searching in the search box, too.
You can configure advanced search options by clicking the ellipsis (Toggle Search Details) below the search box on the right (or press ⇧⌘J (Windows, Linux Ctrl+Shift+J ) ). This will show additional fields to configure the search.
Advanced search options
VS Code excludes some folders by default to reduce the number of search results that you are not interested in (for example: node_modules ). Open settings to change these rules under the files.exclude and search.exclude section.
Tip: From the Explorer, you can right-click on a folder and select Find in Folder to search inside a folder only.
Search and replace
You can also Search and Replace across files. Expand the Search widget to display the Replace text box.
When you type text into the Replace text box, you will see a diff display of the pending changes. You can replace across all files from the Replace text box, replace all in one file or replace a single change.
Tip: You can quickly reuse a previous search term by using ↓ (Windows, Linux Down ) and ↑ (Windows, Linux Up ) to navigate through your search term history.
Case changing in regex replace
Search Editor
Search Editors let you view workspace search results in a full-sized editor, complete with syntax highlighting and optional lines of surrounding context.
Below is a search for the word ‘SearchEditor’ with two lines of text before and after the match for context:
The Open Search Editor command opens an existing Search Editor if one exists, or to otherwise create a new one. The New Search Editor command will always create a new Search Editor.
In the Search Editor, results can be navigated to using Go to Definition actions, such as F12 to open the source location in the current editor group, or ⌘K F12 (Windows, Linux Ctrl+K F12 ) to open the location in an editor to the side. Additionally, double-clicking can optionally open the source location, configurable with the search.searchEditor.doubleClickBehaviour setting.
You can also use the Open New Search Editor button at the top of the Search view, and can copy your existing results from a Search view over to a Search Editor with the Open in editor link at the top of the results tree, or the Search Editor: Open Results in Editor command.
The Search Editor above was opened by selecting the Open New Search Editor button (third button) on the top of the Search view.
Search Editor commands and arguments
For example, the following keybinding runs the search when the Search Editor is opened but leaves the focus in the search query control.
Search Editor context default
The search.searchEditor.defaultNumberOfContextLines setting has a default value of 1, meaning one context line will be shown before and after each result line in the Search Editor.
Reuse last Search Editor configuration
The search.searchEditor.reusePriorSearchConfiguration setting (default is false ) lets you reuse the last active Search Editor’s configuration when creating a new Search Editor.
IntelliSense
Tip: The suggestions filtering supports CamelCase so you can type the letters which are upper cased in a method name to limit the suggestions. For example, «cra» will quickly bring up «createApplication».
Tip: IntelliSense suggestions can be configured via the editor.quickSuggestions and editor.suggestOnTriggerCharacters settings.
JavaScript and TypeScript developers can take advantage of the npmjs type declaration (typings) file repository to get IntelliSense for common JavaScript libraries (Node.js, React, Angular). You can find a good explanation on using type declaration files in the JavaScript language topic and the Node.js tutorial.
Formatting
VS Code has great support for source code formatting. The editor has two explicit format actions:
You can invoke these from the Command Palette ( ⇧⌘P (Windows, Linux Ctrl+Shift+P ) ) or the editor context menu.
VS Code has default formatters for JavaScript, TypeScript, JSON, and HTML. Each language has specific formatting options (for example, html.format.indentInnerHtml ) which you can tune to your preference in your user or workspace settings. You can also disable the default language formatter if you have another extension installed that provides formatting for the same language.
Along with manually invoking code formatting, you can also trigger formatting based on user gestures such as typing, saving or pasting. These are off by default but you can enable these behaviors through the following settings:
Note: Not all formatters support format on paste as to do so they must support formatting a selection or range of text.
In addition to the default formatters, you can find extensions on the Marketplace to support other languages or formatting tools. There is a Formatters category so you can easily search and find formatting extensions. In the Extensions view search box, type ‘formatters’ or ‘category:formatters’ to see a filtered list of extensions within VS Code.
Folding
You can fold regions of source code using the folding icons on the gutter between line numbers and line start. Move the mouse over the gutter and click to fold and unfold regions. Use Shift + Click on the folding icon to fold or unfold the region and all regions inside.
You can also use the following actions:
Folding regions are by default evaluated based on the indentation of lines. A folding region starts when a line has a smaller indent than one or more following lines, and ends when there is a line with the same or smaller indent.
Folding regions can also be computed based on syntax tokens of the editor’s configured language. The following languages already provide syntax aware folding: Markdown, HTML, CSS, LESS, SCSS, and JSON.
If you prefer to switch back to indentation-based folding for one (or all) of the languages above, use:
Regions can also be defined by markers defined by each language. The following languages currently have markers defined:
Language | Start region | End region |
---|---|---|
Bat | ::#region or REM #region | ::#endregion or REM #endregion |
C# | #region | #endregion |
C/C++ | #pragma region | #pragma endregion |
CSS/Less/SCSS | /*#region*/ | /*#endregion*/ |
Coffeescript | #region | #endregion |
F# | //#region or (#_region) | //#endregion or (#_endregion) |
Java | //#region or // | // #endregion or // |
Markdown | ||
Perl5 | #region or =pod | #endregion or =cut |
PHP | #region | #endregion |
PowerShell | #region | #endregion |
Python | #region or # region | #endregion or # endregion |
TypeScript/JavaScript | //#region | //#endregion |
Visual Basic | #Region | #End Region |
To fold and unfold only the regions defined by markers use:
Fold selection
The command Create Manual Folding Ranges from Selection ( ⌘K ⌘, (Windows, Linux Ctrl+K Ctrl+, ) ) creates a folding range from the currently selected lines and collapses it. That range is called a manual folding range that goes on top of the ranges computed by folding providers.
Manual folding ranges can be removed with the command Remove Manual Folding Ranges ( ⌘K ⌘. (Windows, Linux Ctrl+K Ctrl+. ) ).
Manual folding ranges are especially useful for cases when there isn’t programming language support for folding.
Indentation
VS Code lets you control text indentation and whether you’d like to use spaces or tab stops. By default, VS Code inserts spaces and uses 4 spaces per Tab key. If you’d like to use another default, you can modify the editor.insertSpaces and editor.tabSize settings.
Auto-detection
VS Code analyzes your open file and determines the indentation used in the document. The auto-detected indentation overrides your default indentation settings. The detected setting is displayed on the right side of the Status Bar:
You can click on the Status Bar indentation display to bring up a dropdown with indentation commands allowing you to change the default settings for the open file or convert between tab stops and spaces.
Note: VS Code auto-detection checks for indentations of 2, 4, 6 or 8 spaces. If your file uses a different number of spaces, the indentation may not be correctly detected. For example, if your convention is to indent with 3 spaces, you may want to turn off editor.detectIndentation and explicitly set the tab size to 3.
File encoding support
Set the file encoding globally or per workspace by using the files.encoding setting in User Settings or Workspace Settings.
You can view the file encoding in the status bar.
Click on the encoding button in the status bar to reopen or save the active file with a different encoding.
Then choose an encoding.
Next steps
Common questions
Is it possible to globally search and replace?
Yes, expand the Search view text box to include a replace text field. You can search and replace across all the files in your workspace. Note that if you did not open VS Code on a folder, the search will only run on the currently open files.
How do I turn on word wrap?
User Interface
At its heart, Visual Studio Code is a code editor. Like many other code editors, VS Code adopts a common user interface and layout of an explorer on the left, showing all of the files and folders you have access to, and an editor on the right, showing the content of the files you have opened.
Basic Layout
VS Code comes with a simple and intuitive layout that maximizes the space provided for the editor while leaving ample room to browse and access the full context of your folder or project. The UI is divided into five areas:
Each time you start VS Code, it opens up in the same state it was in when you last closed it. The folder, layout, and opened files are preserved.
Open files in each editor are displayed with tabbed headers (Tabs) at the top of the editor region. To learn more about tabbed headers, see the Tabs section below.
Tip: You can move the Side Bar to the right hand side (View > Move Side Bar Right) or toggle its visibility ( ⌘B (Windows, Linux Ctrl+B ) ).
Side by side editing
You can open as many editors as you like side by side vertically and horizontally. If you already have one editor open, there are multiple ways of opening another editor to the side of the existing one:
Whenever you open another file, the editor that is active will display the content of that file. So if you have two editors side by side and you want to open file ‘foo.cs’ into the right-hand editor, make sure that editor is active (by clicking inside it) before opening file ‘foo.cs’.
By default editors will open to the right-hand side of the active one. You can change this behavior through the setting workbench.editor.openSideBySideDirection and configure to open new editors to the bottom of the active one instead.
Tip: You can resize editors and reorder them. Drag and drop the editor title area to reposition or resize the editor.
Minimap
A Minimap (code outline) gives you a high-level overview of your source code, which is useful for quick navigation and code understanding. A file’s minimap is shown on the right side of the editor. You can click or drag the shaded area to quickly jump to different sections of your file.
Tip: You can move the minimap to the left hand side or disable it completely by respectively setting «editor.minimap.side»: «left» or «editor.minimap.enabled»: false in your user or workspace settings.
Indent Guides
The image above also shows indentation guides (vertical lines) which help you quickly see matching indent levels. If you would like to disable indent guides, you can set «editor.guides.indentation»: false in your user or workspace settings.
Breadcrumbs
The editor has a navigation bar above its contents called Breadcrumbs. It shows the current location and allows you to quickly navigate between folders, files, and symbols.
Breadcrumbs always show the file path and if the current file type has language support for symbols, the symbol path up to the cursor position. You can disable breadcrumbs with the View > Show Breadcrumbs toggle command. For more information about the breadcrumbs feature, such as how to customize their appearance, see the Breadcrumbs section of the Code Navigation article.
Explorer
After opening a folder in VS Code, the contents of the folder are shown in the Explorer. You can do many things from here:
Tip: You can drag and drop files into the Explorer from outside VS Code to copy them (if the explorer is empty VS Code will open them instead)
VS Code works very well with other tools that you might use, especially command-line tools. If you want to run a command-line tool in the context of the folder you currently have open in VS Code, right-click the folder and select Open in Command Prompt (or Open in Terminal on macOS or Linux).
You can also navigate to the location of a file or folder in the native Explorer by right-clicking on a file or folder and selecting Reveal in Explorer (or Reveal in Finder on macOS or Open Containing Folder on Linux).
Tip: Type ⌘P (Windows, Linux Ctrl+P ) (Quick Open) to quickly search and open a file by its name.
Multi-selection
You can select multiple files in the File Explorer and OPEN EDITORS view to run actions (Delete, Drag and Drop, Open to the Side) on multiple items. Use the Ctrl/Cmd key with click to select individual files and Shift + click to select a range. If you select two items, you can now use the context menu Compare Selected command to quickly diff two files.
Note: In earlier VS Code releases, clicking with the Ctrl/Cmd key pressed would open a file in a new Editor Group to the side. If you would still like this behavior, you can use the workbench.list.multiSelectModifier setting to change multi-selection to use the Alt key.
Advanced tree navigation
You can filter the currently visible files in the File Explorer. With the focus on the File Explorer, press Ctrl/Cmd+F to open the tree Find control and type part of the file name you want to match. You will see a Find control in the top-right of the File Explorer showing what you have typed and matching file names will be highlighted. Pressing the Filter button will toggle between the two modes: highlighting and filtering. Pressing DownArrow will let you focus the first matched element and jump between matching elements.
This navigation feature is available for all tree views in VS Code, so feel free to try it out in other areas of the product.
Outline view
The Outline view is a separate section in the bottom of the File Explorer. When expanded, it will show the symbol tree of the currently active editor.
The Outline view has different Sort By modes, optional cursor tracking, and supports the usual open gestures. It also includes an input box which finds or filters symbols as you type. Errors and warnings are also shown in the Outline view, letting you see at a glance a problem’s location.
For symbols, the view relies on information computed by your installed extensions for different file types. For example, the built-in Markdown support returns the Markdown header hierarchy for a Markdown file’s symbols.
There are several Outline view settings which allow you to enable/disable icons and control the errors and warnings display (all enabled by default):
Open Editors
At the top of the Explorer is a view labeled OPEN EDITORS. This is a list of active files or previews. These are files you previously opened in VS Code that you were working on. For example, a file will be listed in the OPEN EDITORS view if you:
Just click an item in the OPEN EDITORS view, and it becomes active in VS Code.
Once you are done with your task, you can remove files individually from the OPEN EDITORS view, or you can remove all files by using the View: Close All Editors or View: Close All Editors in Group actions.
Views
The File Explorer is just one of the Views available in VS Code. There are also Views for:
Tip: You can open any view using the View: Open View command.
You can show or hide views from within the main view and also reorder them by drag and drop.
Activity Bar
The Activity Bar on the left lets you quickly switch between Views. You can also reorder Views by dragging and dropping them on the Activity Bar or remove a View entirely (right click Hide from Activity Bar).
Command Palette
The Command Palette provides access to many commands. You can execute editor commands, open files, search for symbols, and see a quick outline of a file, all using the same interactive window. Here are a few tips:
Configuring the editor
VS Code gives you many options to configure the editor. From the View menu, you can hide or toggle various parts of the user interface, such as the Side Bar, Status Bar, and Activity Bar.
Hide the Menu Bar (Windows, Linux)
Settings
Most editor configurations are kept in settings which can be modified directly. You can set options globally through user settings or per project/folder through workspace settings. Settings values are kept in a settings.json file.
Note for macOS users: The Preferences menu is under Code not File. For example, Code > Preferences > Settings.
You will see the VS Code Default Settings in the left window and your editable settings.json on the right. You can easily filter settings in the Default Settings using the search box at the top. Copy a setting over to the editable settings.json on the right by clicking on the edit icon to the left of the setting. Settings with a fixed set of values allow you to pick a value as part of their edit icon menu.
After editing your settings, type ⌘S (Windows, Linux Ctrl+S ) to save your changes. The changes will take effect immediately.
Note: Workspace settings will override User settings and are useful for sharing project specific settings across a team.
Zen Mode
Centered editor layout
Centered editor layout allows you to center align the editor area. This is particularly useful when working with a single editor on a large monitor. You can use the sashes on the side to resize the view (hold down the Alt key to independently move the sashes).
Visual Studio Code shows open items with Tabs (tabbed headings) in the title area above the editor.
When you open a file, a new Tab is added for that file.
Tabs let you quickly navigate between items and you can Drag and Drop Tabs to reorder them.
If you don’t want to use Tabs, you can disable the feature by setting the workbench.editor.showTabs setting to false:
See the section below to optimize VS Code when working without Tabs.
Tab ordering
By default, new Tabs are added to the right of the existing Tabs but you can control where you’d like new Tabs to appear with the workbench.editor.openPositioning setting.
For example, you might like new tabbed items to appear on the left:
Preview mode
When you single-click or select a file in the Explorer, it is shown in a preview mode and reuses an existing Tab. This is useful if you are quickly browsing files and don’t want every visited file to have its own Tab. When you start editing the file or use double-click to open the file from the Explorer, a new Tab is dedicated to that file.
Preview mode is indicated by italics in the Tab heading:
If you’d prefer to not use preview mode and always create a new Tab, you can control the behavior with these settings:
Editor Groups
When you split an editor (using the Split Editor or Open to the Side commands), a new editor region is created which can hold a group of items. You can open as many editor regions as you like side by side vertically and horizontally.
You can see these clearly in the OPEN EDITORS section at the top of the Explorer view:
You can Drag and Drop editor groups on the workbench, move individual Tabs between groups and quickly close entire groups (Close All).
Note: VS Code uses editor groups whether or not you have enabled Tabs. Without Tabs, editor groups are a stack of your open items with the most recently selected item visible in the editor pane.
Grid editor layout
By default, editor groups are laid out in vertical columns (for example when you split an editor to open it to the side). You can easily arrange editor groups in any layout you like, both vertically and horizontally:
To support flexible layouts, you can create empty editor groups. By default, closing the last editor of an editor group will also close the group itself, but you can change this behavior with the new setting workbench.editor.closeEmptyGroups: false :
There are a predefined set of editor layouts in the new View > Editor Layout menu:
There are many keyboard commands for adjusting the editor layout with the keyboard alone, but if you prefer to use the mouse, drag and drop is a fast way to split the editor into any direction:
Pro Tip: If you press and hold the Alt key while hovering over the toolbar action to split an editor, it will offer to split to the other orientation. This is a fast way to split either to the right or to the bottom.
Keyboard shortcuts
Here are some handy keyboard shortcuts to quickly navigate between editors and editor groups.
If you’d like to modify the default keyboard shortcuts, see Key Bindings for details.
Working without Tabs
If you prefer not to use Tabs (tabbed headings), you can disable Tabs (tabbed headings) entirely by setting workbench.editor.showTabs to false.
Disable Preview mode
Without Tabs, the OPEN EDITORS section of the File Explorer is a quick way to do file navigation. With preview editor mode, files are not added to the OPEN EDITOR list nor editor group on single-click open. You can disable this feature through the workbench.editor.enablePreview and workbench.editor.enablePreviewFromQuickOpen settings.
Ctrl+Tab to navigate in entire editor history
You can change keybindings for Ctrl+Tab to show you a list of all opened editors from the history independent from the active editor group.
Edit your keybindings and add the following:
Close an entire group instead of a single editor
If you liked the behavior of VS Code closing an entire group when closing one editor, you can bind the following in your keybindings.
Window management
VS Code has some options to control how windows (instances) should be opened or restored between sessions.
The window.restoreWindows setting tells VS Code how to restore the opened windows of your previous session. By default, VS Code will restore all windows you worked on during your previous session (setting: all ). Change this setting to none to never reopen any windows and always start with an empty VS Code instance. Change it to one to reopen the last opened window you worked on or folders to only restore windows that had folders opened.
Next steps
Now that you know the overall layout of VS Code, start to customize the editor to how you like to work by looking at the following topics:
Это способ создания программного обеспечения
В Visual Studio есть такие возможности.
Познакомьтесь с семейством продуктов Visual Studio
Visual Studio
Visual Studio для Mac
Дополнительные сведения о активация лицензии
Visual Studio Code
Автономный редактор исходного кода, работающий в Windows, macOS и Linux. Лучший выбор для JavaScript и веб-разработчиков, с расширениями, поддерживающими любые языки программирования.
Используя Visual Studio Code, вы соглашаетесь с лицензия & заявлении о конфиденциальности
Все еще не знаете, какой инструмент лучше всего вам подходит? Мы можем помочь
Visual Studio для Windows
Полный массив функций и средств разработки в едином центре для расширения и улучшения каждого этапа разработки программного обеспечения.
Установка в автономном режимеСравнить выпуски
Встроенные функции Visual Studio совершенствуют полный цикл разработки.
Visual Studio для Mac
Полный массив функций и средств разработки в собственном интерфейсе macOS для каждого этапа разработки программного обеспечения.
Visual Studio Code для Linux
Сотни поддерживаемых языков программирования
Visual Studio Code для Windows
Простой, но многофункциональный редактор исходного кода с множеством расширений для самых разных языков и сред выполнения.
Сотни поддерживаемых языков программирования
Visual Studio Code для Mac
Сотни поддерживаемых языков программирования
ОБЩЕДОСТУПНАЯ ПРЕДВАРИТЕЛЬНАЯ ВЕРСИЯ
Анонс Пространства для разработки Microsoft
Пространство для разработки Microsoft предоставляет разработчикам самостоятельный доступ к высокопроизводительным облачным рабочим станциям, предварительно настроенным под ваши проекты.
Пространство для разработки Microsoft предоставляет разработчикам самостоятельный доступ к высокопроизводительным облачным рабочим станциям, предварительно настроенным под ваши проекты.
25-летие Visual Studio
Отпразднуйте вместе с нами 25-летие Visual Studio. Посмотрите видео и возьмите сувениры на память!
Присоединяйтесь к нам, чтобы отпраздновать 25-летие Visual Studio. Посмотрите видео и возьмите сувениры на память!
Visual Studio 2022
Visual Studio 2022 для Mac RC
Подписки Visual Studio
Получите максимум от Visual Studio с подпиской! Получите доступ к таким платформам, как Azure, обучению и многому другому для команды.
microsoft/vscode
Use Git or checkout with SVN using the web URL.
Work fast with our official CLI. Learn more.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
README.md
Visual Studio Code
Visual Studio Code combines the simplicity of a code editor with what developers need for their core edit-build-debug cycle. It provides comprehensive code editing, navigation, and understanding support along with lightweight debugging, a rich extensibility model, and lightweight integration with existing tools.
Visual Studio Code is updated monthly with new features and bug fixes. You can download it for Windows, macOS, and Linux on Visual Studio Code’s website. To get the latest releases every day, install the Insiders build.
There are many ways in which you can participate in this project, for example:
If you are interested in fixing issues and contributing directly to the code base, please see the document How to Contribute, which covers the following:
See our wiki for a description of each of these channels and information on some other available community-driven channels.
Many of the core components and extensions to VS Code live in their own repositories on GitHub. For example, the node debug adapter and the mono debug adapter repositories are separate from each other. For a complete list, please visit the Related Projects page on our wiki.
Docker / the Codespace should have at least 4 Cores and 6 GB of RAM (8 GB recommended) to run full build. See the development container README for more information.
This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact opencode@microsoft.com with any additional questions or comments.
Copyright (c) Microsoft Corporation. All rights reserved.
June 2021 (version 1.58)
Update 1.58.1: The update addresses these security issues.
Update 1.58.2: The update addresses these issues.
Welcome to the June 2021 release of Visual Studio Code. There are a number of updates in this version that we hope you will like, some of the key highlights include:
If you’d like to read these release notes online, go to Updates on code.visualstudio.com.
Join us live at the VS Code team’s livestream on Tuesday, July 13 at 8am Pacific (4pm London) to see a demo of what’s new in this release, and ask us questions live.
Insiders: Want to try new features as soon as possible? You can download the nightly Insiders build and try the latest updates as soon as they are available.
Workbench
Workspace Trust
The Workspace Trust feature was a big change that came in the 1.57 release and we believe it is important that developers can safely browse code, even when they are unfamiliar with the source. This milestone we’ve been absorbing customer feedback and have focused on fixing issues and following up on suggestions.
You can learn more about the rationale and development of Workspace Trust in the recent Workspace Trust blog post. The post explains how Restricted Mode helps protect you from unintended, and potentially malicious, code execution and has tips to set up your development machines so you can work both quickly and safely.
Settings editor
This iteration adds support to the Settings editor for settings objects with a fixed number of Boolean properties, by rendering the properties as a list of checkboxes.
This iteration also adds additional support for arrays of enumerations, by using dropdowns in editing mode instead of plain textboxes.
Transient workspaces
There is now a new flavor of workspace, called a «transient» workspace, that behaves differently than usual workspaces, specifically:
Settings Sync
There is now a Troubleshoot view for Settings Sync that contains all logs and the last sync states. You can access this view by running the command Settings Sync: Show Synced Data and enabling it by opening the Views submenu and checking Troubleshoot:
Search max results setting
Integrated Terminal
Terminals in the editor area
Terminals can now be created in or moved to the editor area, enabling a multi-dimensional grid layout that persists and remains visible regardless of panel state.
To use terminals in the editor area, there are several options:
The new terminal.integrated.defaultLocation setting can be set to editor to direct newly created terminals to the editor area by default.
Explicitly setting canvas renderer
Hide link hovers
The new terminal.integrated.showLinkHover setting lets you disable link hovers in the terminal. This can be useful if you find hovers on terminal links distracting.
Editor
Editor scroll bar customization
There are new settings to customize the editor’s scroll bars:
Below the editor’s vertical scroll bar width is set to 30 pixels.
Languages
Math formula rendering in the Markdown preview
VS Code’s built-in Markdown preview can now render math equations using KaTeX.
Inline math equations are wrapped in single dollar signs:
You can create a math equation block with double dollar signs:
You can set «markdown.math.enabled»: false to disable this feature.
Markdown math formula syntax highlighting
VS Code also now supports highlighting of math equations in Markdown source:
This works both in normal Markdown files and in Markdown cells inside notebooks.
TypeScript 4.3.5
We now bundle TS 4.3.5. This minor update fixes a few important bugs, including auto imports not working in JSX.
Debugging
Remember chosen environment per file
When debugging is started without a launch.json file, VS Code looks at the active editor and based on the language mode of the editor decides what debug extension to use. However, for some languages, multiple debug extensions are possible, and in that case, VS Code prompts you to choose one of them. To make debugging smoother, VS Code now remembers the chosen debugger per file, so that the next time you start debugging, the session starts without any prompts.
In the short video below, the user selects the Node.js debug environment for debugging a single JavaScript file and that choice is remembered when a new debug session starts for that file.
Debug console suggestions no longer accepted on Enter
In order to make the Tab key more discoverable as a way to accept suggestions, VS Code now has a hint Status bar («Insert (Tab)») in the Debug Console input.
Contributions to extensions
Jupyter Interactive window
Jupyter notebook debugging
Remote Repositories
In this iteration, we largely focused on bug fixes and some performance improvements for the Remote Repositories extension, as well as better integration with the GitHub Pull Requests and Issues extension. Additionally, you can now remove a remote repository from the Remote Repositories view in the Remote Explorer, and there is better support for opening \blob URLs with line ranges.
GitHub Pull Requests and Issues
The focus this iteration for the GitHub Pull Requests and Issues extension was on fixing bugs. Check out the changelog to see the highlights.
Remote Development
Work continues on the Remote Development extensions, which allow you to use a container, remote machine, or the Windows Subsystem for Linux (WSL) as a full-featured development environment.
Feature highlights in 1.58 include:
You can learn about new extension features and bug fixes in the Remote Development release notes.
Live Preview
We have developed a Live Preview extension, which hosts a local server for web development previewing! 🎉
It features an in-editor browser preview, live preview refreshing (on file change or on save), multi-root support, and more!
The extension also has a Live Preview task, which runs a persistent server and allows you to view server traffic and its associated files.
To learn more about what it can do, you can find details in the Marketplace or check out its repo.
Preview Features
TypeScript 4.4 support
This release includes initial support for the upcoming TypeScript 4.4 release. You can read more about the new language features and improvements in TypeScript 4.4 on the TypeScript blog.
To start using the TypeScript 4.4 nightly builds, install the TypeScript Nightly extension.
Please share your feedback and let us know if you run into any bugs with TypeScript 4.4.
Move terminals between windows
It’s now possible to move terminals between windows by detaching via Terminal: Detach Session in one window and attaching to another with Terminal: Attach to Session. In the future, this should help enable cross-window drag and drop!
Extension authoring
Detailed completion item labels
We have added new API for more detailed and structured completion item labels. You can now use the vscode.CompletionItemLabel type for item’s labels and it allows you to specify label, details, and description.
These new properties allow language extensions to show signatures or qualifiers but also other completion provider can utilize this. For instance, the GitHub Pull Request and Issues extension now shows full names alongside aliases.
Details for modal messages
The API for showing modal information, warning, and error messages now supports providing details. Detail text is rendered below and less prominently than the actual message.
The dialog above is produced with the following code snippet. Note that detail text is only supported for modal messages ( modal: true ).
Contribute terminal profiles
Terminal profiles can now be contributed by extensions and they will be displayed in the profile picker:
To contribute terminal profiles, you will need to do three things:
First, add the contribution to your package.json :
Next, add the activation event so the extension is activated when the user requests the profile:
Finally, register the terminal profile provider that will return the set of options used to create the terminal. The options can be either the standard process-based TerminalOptions or the custom ExtensionTerminalOptions :
Change ExtensionTerminalOptions-based terminal names
Set the icon for terminals created via the extension API
Enumerate saved Memento keys
There is a new Memento.keys() API to enumerate the set of saved Memento keys. This API can make it easier to deal with previously saved data and be helpful if you need to migrate saved data.
Language Server Protocol
A new version of the language server protocol, together with the corresponding npm modules, has been published. The version contains the final proposal for the diagnostic pull model specification.
Debug Adapter Protocol
Progress on «Memory write» request and «Memory changed» event
We are planning to integrate a memory viewer in a future version of VS Code’s debug experience. For this support, a ReadMemory request has existed in the Debug Adapter Protocol for some time. We are now working on a corresponding WriteMemory request and a Memory event. The WriteMemory request has a final proposal that will be added to DAP in the next milestone. The Memory event proposal is still under discussion. If you are a debug extension author and interested in these DAP protocol additions, we’d appreciate your feedback.
Proposed extension APIs
Every milestone comes with new proposed APIs and extension authors can try them out. As always, we want your feedback. This is what you have to do to try out a proposed API:
You cannot publish an extension that uses a proposed API. There may be breaking changes in the next release and we never want to break existing extensions.
Rich Status bar hover
Testing
The march to finalize the testing APIs continues. This iteration, we refactored some of the testing APIs to better match the style of other APIs in the extension host. To track the finalization process and hear about changes to the APIs, follow issue #122208.
The primary changes we foresee are to how «run configurations» are provided. To track or weigh in on the progress of these runner APIs, follow issue #127096.
Finally, we began investigation and the initial implementation of test coverage, which will receive surface area in the UI in the coming weeks.
Inline Suggestions
The inline suggestions API allows extensions to provide inline suggestions that are decoupled from the suggestion widget. An inline suggestion is rendered as if it was already accepted, but with a gray color. Users can cycle through suggestions and accept them with the Tab key.
Engineering
ES2020
Progress for Electron sandbox support
This milestone we continued to make the VS Code window ready for enabling Electron’s sandbox and context isolation features.
Documentation
Data Science tutorials and topics
The Data Science tutorials and topics are now under their own section in the https://code.visualstudio.com table of contents. You can find tutorials on using Jupyter Notebooks, the Python Interactive window, and even a Data Science tutorial analyzing passenger data from the Titanic.
Notable fixes
Thank you
Last but certainly not least, a big Thank You to the following people who contributed this month to VS Code:
Contributions to our issue tracking:
Contributions to vscode :
Contributions to vscode-extension-samples :
Contributions to vscode-html-languageservice :
Contributions to vscode-js-debug :
Contributions to vscode-languageserver-node :
Contributions to language-server-protocol :
Contributions to monaco-editor :
Contributions to monaco-languages :
February 2022 (version 1.65)
Update 1.65.1: The update addresses these security issues.
Update 1.65.2: The update addresses these issues.
Welcome to the February 2022 release of Visual Studio Code.
If you’d like to read these release notes online, go to Updates on code.visualstudio.com.
Workbench
New editor history navigation
The editor history navigation feature in VS Code drives some popular commands, such as Go Back and Go Forward. Numerous feature requests accumulated over time to improve this feature and also add more capabilities. This milestone editor history navigation was rewritten from scratch to address most of these requests.
Editor group aware navigation
Editor groups are now taken into account when navigating in the editor history. Navigating back and forward in editor history will activate and focus editors in exactly those editor groups as they were. When an editor group is removed, all associated history entries are discarded.
In the short video below, the first Go Back places the cursor in the new editor group and then the second Go Back navigation returns to the original editor group.
New setting to scope navigation to editor group or editor
A new setting workbench.editor.navigationScope makes it possible to scope editor history navigation to just the active editor group or even editor. Supported values are:
Notebook support
You can now navigate between cells you have selected in any notebook. Navigation works across editors, in the same way as you can navigate between cursor locations in a text editor.
New commands to navigate edit or navigation locations
By default, editor navigation locations are added whenever you navigate across editors but also when navigating within editors (for example, when switching notebook cells or changing selection in text editors). If you feel that too many locations are being recorded, new commands have been added that reduce locations to either:
You can assign your favorite keybinding to these commands to change your navigation accordingly.
Commands for edit locations:
Commands for navigation locations:
Associated context keys have been added to make assigning keybindings more powerful.
Context keys for edit locations:
Context keys for navigation locations:
New layout control options
The image below shows layoutControl.type set to both to display the three toggle buttons along with the menu dropdown.
Light High Contrast theme
A new Light High Contrast theme has been added to improve legibility and readability of the editor.
Audio cues
New audio cues have been added with this release, including audio cues for warnings, inline suggestions, and debugger breakpoint hits. The sounds have been tuned and the general setting audioCues.enabled has been deprecated in favor of the individual audioCues.* settings:
All audio cues except lineHasWarning are enabled by default for screen reader users (setting value auto ).
A new audio cue command Help: List Audio Cues lists all available audio cues, lets you hear each audio cue as you move through the list, and review which cues are currently enabled.
Drag and drop Problems and Search results
You can now drag and drop a Problem, Search, or Reference result into the editor, opening the file and revealing the result position. This can be useful if you want to start a new editor group or drop a result into an existing editor group.
Settings editor split view
The Settings editor now uses an adjustable split view to separate the table of contents from the settings list.
Improved automatic language detection
When the new setting workbench.editor.historyBasedLanguageDetection is enabled, untitled editors will use an improved automatic language detection algorithm that factors in your editor history and the contents of the current workspace. The new algorithm requires much less text input than before to provide detection results.
Below is an example of using this across JavaScript, TypeScript, Markdown, Python, PHP, and C++ (many more languages are supported):
Improved language extension recommendations
Language feature extension recommendations now take into consideration other prominent language extensions in the Marketplace while recommending. For example, VS Code does not recommend the Java Extension Pack if you have the Apache NetBeans Java extension installed.
Keyboard shortcut for extension tree hovers
Editor
Surround With Snippet
There is a new command to surround the current selection with a snippet. Select some text, invoke the Surround With Snippet command from the Command Palette ( ⇧⌘P (Windows, Linux Ctrl+Shift+P ) ), and select a snippet from the dropdown.
In the short video below, a selected method is surrounded by a try/catch snippet.
Any applicable snippet that uses the TM_SELECTED_TEXT or SELECTION variables will be available in the Surround With Snippet Quick Pick dropdown. Custom user or project snippets are also included.
Accessible inlay hints
Inlay hints show additional information within source code, like the inferred type of a variable. For screen reader users, there is a new command to help with this feature. Select Read Line With Inlay Hints from the Command Palette and the editor will read the current line interleaved with its hints.
Contextual Unicode highlighting
To report fewer false positives, ambiguous and invisible Unicode characters are no longer highlighted if the surrounding characters visually indicate a non-ASCII script. Thus, in trusted workspaces, only characters that are invisible or can be confused with ASCII characters are highlighted. The exception to this is those characters that are contained in a word of non-ASCII characters, where at least one character cannot be confused with an ASCII character.
Before you can see multiple false positives in the const string:
After only the confusing character is highlighted:
Terminal
Multi-line paste warning
A dialog now shows by default when pasting multiple lines in terminals when the shell does not support multi-line. This warning is displayed for bracketed paste mode and for PowerShell when we hand off Ctrl+V directly to the shell. There is a Do not ask me again checkbox on the dialog to easily disable the feature.
Terminal link improvements
The implementation for terminal links had a large refactor this release. This simplified and improved maintainability of the feature but also brought:
Open file link command improvements
The Open Last File Link and Open Detected Link. commands introduced last version now exclude folders, which should make them more useful.
Source Control
Diff editor management
This milestone we have made changes that should help with managing diff editors. There is a new command Git: Close All Diff Editors in the Command Palette that can be used to close all open diff editors. There is also a new setting, git.closeDiffOnOperation to automatically close diff editors when changes are stashed, committed, discarded, staged, or unstaged.
Git command output logging
Debugging
Lazy variables
Accessing the value of a variable may have side-effects or be expensive. VS Code’s generic debugger can now show a button for the user to fetch the variable value on demand. This is available for debug extensions that support the new «lazy» variable feature. Currently this has only been implemented by the built-in JavaScript debugger for property getters, but we expect that other debugger extensions will follow soon.
Tasks
There’s a new platform independent userHome variable that you can use in tasks.
Notebooks
Built-in output renderers update
We moved the text, image, HTML and code renderers from the VS Code core to a built-in output renderer extension. With this change, VS Code can now search text on these output types.
In the short video below, searching for item initially has 3 results for the code cell, but can be filtered to also include the cell output.
Sticky scrolling notebook cell buttons
The Run button and cell toolbar will now stick to the top of the screen when scrolling down a code cell. This makes them more accessible when working in a long code cell.
Languages
TypeScript 4.6
VS Code now ships with TypeScript 4.6. This update brings a number of new language features, along with tooling improvements and bug fixes. You can read more about TypeScript 4.6 on the TypeScript blog.
Syntax error reporting in JavaScript files
Thanks to TypeScript 4.6, VS Code now reports some common syntax errors in JavaScript files. This includes parsing errors, as well as invalid redeclarations of block scoped variables:
Previously these errors were only reported when you enable semantic checking in your JavaScript.
You can disable this error reporting by setting:
More JS/TS settings can be configured per language
New language-specific enabled settings include:
New Lua syntax highlighting grammar
VS Code has a new, better-maintained, Lua grammar for syntax highlighting of Lua files. The new grammar is actively maintained, fixes issues that existed in the old grammar, and supports newer Lua tokens.
VS Code for the Web
Reopen local files and folders
The list of recently opened local files and folders is now available when you access vscode.dev or insiders.vscode.dev with a browser that supports the web file system access API. Selecting a local file will open it in an editor and selecting a local folder will update the File Explorer to show its contents. You may be asked by the browser to confirm local file access before the contents are revealed.
Remote Repositories
GitHub Repositories
This milestone, merge conflict resolution was improved when editing GitHub repositories on vscode.dev and github.dev. There are now merge conflict decorations in your editor, with options to Accept Current Change, Accept Incoming Change or Accept Both Changes.
There is also a Stage Changes action in the Source Control view for files containing merge conflicts.
Additionally, you can now easily stage and unstage all changes under a specific folder in a GitHub repository on vscode.dev and github.dev. To do so, right-click on the Source Control view and select View as Tree.
Workspace search and Find All References will now download and index a full copy of the repository by default, rather than defaulting to providing partial results as before.
There are several settings to configure this indexing feature:
Azure Repos
In this milestone, we switched Azure Repos support from using a specific Azure DevOps authentication provider to using the generic Microsoft authentication provider (used by Settings Sync). You will be prompted to log in again when you visit an Azure Repo but all of your saved changes will be persisted.
Contributions to extensions
Hex Editor data inspector improvements
Previously, the Hex Editor extension always displayed its Data Inspector in the Side bar, and revealed it whenever a hex editor was revealed. However, some users found this annoying, and it led to a particularly disruptive experience with its integration of a memory inspector for debuggers. Now, the Data Inspector will appear to the right side of the inspected bytes. If the editor is too narrow, the Data Inspector will be displayed inside a hover widget instead.
This can be configured via the hexeditor.inspectorType setting, which can take one of three values:
GitHub Pull Requests and Issues
Work continues on the GitHub Pull Requests and Issues extension, which allows you to work on, create, and manage pull requests and issues. Check out the changelog for the 0.38.0 release of the extension to see the highlights.
Preview features
Terminal shell integration
Shell integration in the terminal was initially introduced in the last release and has seen many improvements this month. As a refresher, this feature allows VS Code to gain additional insights into what’s happening within the terminal, which was previously largely unknown. The feature is still considered experimental and you can opt-in via the terminal.integrated.shellIntegration.enabled setting.
The biggest change this release is that commands detected by shell integration now feature decorations in the «gutter» to the left. A command decoration visually breaks up the buffer and provides access to information and actions that use shell integration capabilities. There are three types of command decorations: error, success, and default, as determined by the command’s exit code.
Clicking on a decoration displays actions specific to that command in a menu, that currently include Re-run Command and Copy Output.
Hovering over the decoration displays information about the command, such as the time since it was run and the associated exit code.
Here are the other main changes:
ESLint
The ESLint extension has preliminary support for notebook documents containing cells that can be validated with ESLint. This support is only available in the Pre-Release version of the extension.
Extension authoring
Language status items
We have finalized the API for language status items. This API shows language specific information for the active editor. This can be general information about the project or toolset version but can also display errors and warnings.
Inlay Hints
The Inlay Hint provider API is now finalized. It allows to inlay additional information with source code. The image below shows how TypeScript added an inlay hint for an inferred type.
Status bar focus borders
We made it easier and more accessible to navigate the Status bar by adding focus borders to the Status bar and Status bar items.
Theme authors can customize the border colors by configuring the two new theme colors:
Testing refresh action and sortText
We’ve finalized our proposal to add a standard refresh handler to the TestController interface. If extensions assign a method to this property, VS Code will show a «refresh» icon in the Test Explorer view.
Additionally, the TestItem can now have a sortText attribute that controls the sort order for items which do not have a specific location in a file.
Comment timestamp
vscode-test package renamed to @vscode/test-electron
Updated codicons
The following new icons were added to our codicon library:
Icon contribution point is now final
Product icon themes can redefine the icon (if they know about the icon ID).
File icon themes: Support for folder names in file associations
Running remotely installed web extensions in VS Code for the Web with Codespaces
VS Code for the Web with Codespaces now supports running a remotely installed web extension in the web extension host. For example, if you have the Vim extension installed in a GitHub Codespace (via configuration in a devcontainer.json file) then Vim will be loaded in the web extension host when you open the codespace in the browser. Please read our Extension Host documentation for more information.
Note: There are currently known limitations regarding loading a web worker by such an extension. See issue for more details.
Debugger extension authoring
Support for «important» Output events
Recently, the Debug Adapter Protocol added an important category for the Output event. This category marks events that should stand out and not go overlooked by the user. VS Code will now show a notification popup for messages with the important category. They will also still be logged to the Debug Console.
Support for ‘lazy’ variables
Some variables are dynamic and require executing code to get the value. A debug adapter may not want to retrieve their full values automatically, since doing so could have side-effects or be expensive.
Some debug adapters have addressed this problem by representing the «expensive variable» as a placeholder object that the user needs to «expand» explicitly in order to fetch the value. VS Code’s built-in js-debug uses this approach for JS/TS getters:
The following screencast shows that the intermediate object makes it difficult to understand the effective data structure:
In this release, we have improved VS Code to render the intermediate object in a compact form with a (. ) button for requesting the full value.
A debug adapter can request this new presentation style for a variable by adding a VariablePresentationHint with a lazy property (see DAP additions). If the client does not support the lazy flag, the variable will be shown as before.
Language Server Protocol
Another next version of the Language Server Protocol, together with the corresponding npm modules, has been published. The new version contains the following changes:
Debug Adapter Protocol
There are several new properties added to the Debug Adapter Protocol.
Proposed extension APIs
Every milestone comes with new proposed APIs and extension authors can try them out. As always, we want your feedback. Here are the steps to try out a proposed API:
You cannot publish an extension that uses a proposed API. There may be breaking changes in the next release and we never want to break existing extensions.
Markdown hovers in Timeline items
Items provided by a TimelineProvider can now support Markdown in the detail property, which is used to provide content for their tooltip.
Notebook aware document selectors
Output channel with custom language ID
There are some extensions that are able to define token or syntax coloring and CodeLens features in their output channels, given that they are text documents (read-only) by themselves. Since all output channels share the same language ID, these customizations can be wrongly applied to other output channels. There was a feature request to create output channels with custom language IDs so that extension authors can define customizations by language. Hence in this milestone, we have introduced the proposal to create an output channel with a custom language ID. Please try it out and give us feedback.
MarkdownString.baseUri
The proposed baseUri property on MarkdownString lets you specify a base URI that relative links and images in Markdown are resolved relative to. This property behaves much like the element in HTML.
If the baseUri is a file, relative paths in Markdown are resolved relative to the parent directory of that file:
New documentation
Java GUI applications
The new Java GUI Applications topic explains how to use the Extension Pack for Java to develop JavaFX, AWT, and Swing application in VS Code.
Notable fixes
Thank you
Last but certainly not least, a big Thank You to the contributors of VS Code.
Web extensions
Extension authors for enabling extensions that run code as web extensions (the list below is between February 1 2022 and February 28 2022):
Issue tracking
Contributions to our issue tracking:
Pull requests
Contributions to vscode :
Contributions to vscode-css-languageservice :
Contributions to vscode-languageserver-node :
Contributions to debug-adapter-protocol :
Contributions to language-server-protocol :
Setting up Visual Studio Code
Getting up and running with Visual Studio Code is quick and easy. It is a small download so you can install in a matter of minutes and give VS Code a try.
Cross platform
VS Code is a free code editor, which runs on the macOS, Linux, and Windows operating systems.
Follow the platform-specific guides below:
VS Code is lightweight and should run on most available hardware and platform versions. You can review the System Requirements to check if your computer configuration is supported.
Update cadence
VS Code releases a new version each month with new features and important bug fixes. Most platforms support auto updating and you will be prompted to install the new release when it becomes available. You can also manually check for updates by running Help > Check for Updates on Linux and Windows or running Code > Check for Updates on macOS.
Note: You can disable auto-update if you prefer to update VS Code on your own schedule.
Insiders nightly build
If you’d like to try our nightly builds to see new features early or verify bug fixes, you can install our Insiders build. The Insiders build installs side-by-side with the monthly Stable build and you can freely work with either on the same machine. The Insiders build is the same one the VS Code development team uses on a daily basis and we really appreciate people trying out new features and providing feedback.
Portable mode
Visual Studio Code supports Portable mode installation. This mode enables all data created and maintained by VS Code to live near itself, so it can be moved around across environments, for example, on a USB drive. See the VS Code Portable Mode documentation for details.
Additional components
VS Code is an editor, first and foremost, and prides itself on a small footprint. Unlike traditional IDEs that tend to include everything but the kitchen sink, you can tune your installation to the development technologies you care about. Be sure to read the Additional Components topic after reading the platform guides to learn about customizing your VS Code installation.
Extensions
VS Code extensions let third parties add support for additional:
Extensions integrate into VS Code’s UI, commands, and task running systems so you’ll find it easy to work with different technologies through VS Code’s shared interface. Check out the VS Code extension Marketplace to see what’s available.
Next steps
Once you have installed and set up VS Code, these topics will help you learn more about VS Code:
If you’d like to get something running quickly, try the Node.js tutorial walkthrough that will have you debugging a Node.js web application with VS Code in minutes.
Common questions
What are the system requirements for VS Code?
How big is VS Code?
VS Code is a small download ( New Project dialog or pre-installed project templates. You’ll need to add additional components and scaffolders depending on your development interests. With scaffolding tools like Yeoman and the multitude of modules available through the npm package manager, you’re sure to find appropriate templates and tools to create your projects.
How do I know which version I’m running?
On Linux and Windows, choose Help > About. On macOS, use Code > About Visual Studio Code.
Why is VS Code saying my installation is Unsupported?
VS Code has detected that some installation files have been modified, perhaps by an extension. Reinstalling VS Code will replace the affected files. See our FAQ topic for more details.
How can I do a ‘clean’ uninstall of VS Code?
The folder locations will vary depending on your platform:
vscode.dev(!)
October 20, 2021 by Chris Dias, @chrisdias
Bringing VS Code to the browser
Fast forward to today. Now when you go to https://vscode.dev, you’ll be presented with a lightweight version of VS Code running fully in the browser. Open a folder on your local machine and start coding.
No install required.
With the availability of vscode.dev, we begin to finally realize our original vision of building a development tool that can run fully serverless in the browser. For a full history lesson, check out Erich Gamma’s VS Code Day talk «VS Code An Overnight Success…10 Years in the Making».
So, what can you do on VS Code for the Web? Quite a bit actually…
Local development with cloud tools
Modern browsers that support the File System Access API (Edge and Chrome today) allow web pages to access the local file system (with your permission). This simple gateway to the local machine quickly opens some interesting scenarios for using VS Code for the Web as a zero-installation local development tool, such as:
And, if your browser doesn’t support local file system APIs, you’ll still be able to open individual files by uploading and downloading them via the browser.
A Light(er)weight Experience
Since VS Code for the Web is running completely within the browser, some experiences will naturally be more constrained, when compared to what you can do in the desktop app. For example, the terminal and debugger are not available, which makes sense since you can’t compile, run, and debug a Rust or Go application within the browser sandbox (although emerging technologies like Pyodide and web containers may someday change this).
A bit more nuanced are the code editing, navigation, and browsing experiences, which, on the desktop, are generally powered by language services and compilers that expect a file system, runtime, and compute environment. In the browser, these experiences are powered by language services running fully in the browser (no file system, no runtimes) that provide source code tokenization and syntax colorization, completions, and many single-file operations.
As a result, when in the browser, experiences generally fall into the following categories:
Good: For most programming languages, vscode.dev gives you code syntax colorization, text-based completions, and bracket pair colorization. Using a Tree-sitter syntax tree, we’re able to provide additional experiences such as Outline/Go to Symbol and Symbol Search for popular languages such as C/C++, C#, Java, PHP, Rust, and Go.
Better: The TypeScript, JavaScript, and Python experiences are all powered by language services that run natively in the browser. With these programming languages, you’ll get the «Good» experience plus rich single file completions, semantic highlighting, syntax errors, and more.
Best: For many «webby» languages, such as JSON, HTML, CSS, and LESS, the coding experience in vscode.dev is nearly identical to the desktop (including Markdown preview!).
Extensions
Most UI customization extensions such as themes, key maps, and snippets all work in vscode.dev and you can even enable roaming between the browser, the desktop, and GitHub Codespaces through Settings Sync.
Extensions that run Node.js code that use OS-specific modules, or shell out to local executables, still show in search results, but are clearly marked as unavailable.
That said, there are a growing number of extensions that have been updated to work in the browser, with more coming every day.
Note: If you are an extension author and want to have your extension available in the browser (we do!), check out our Web Extensions authoring guide.
The GitHub Issue Notebooks extension brings the Notebook experience to GitHub Issues. With that you can interleave queries, results, and even Markdown describing the purpose of the queries, together into a single editor.
GitHub
Many extensions for VS Code work with source code that is stored in GitHub. For example, the CodeTour extension lets you create guided walkthroughs of a code base and the WikiLens extension turns VS Code and your repository into a powerful note taking tool (with bi-directional linking). To make it easy to access your code in GitHub, VS Code for the Web comes with the GitHub Repositories, Codespaces, and Pull Request extensions built in. You can make quick edits, review PRs, and Continue on to a local clone or even better, to a GitHub Codespace, if you want more powerful language experiences or need to build, run, and test the changes prior to merging the commits.
Whoa, sounds a lot like github.dev doesn’t it? Are they different? The same? Why two.
For example, change https://github.com/microsoft/vscode to ‘https://vscode.dev/github.com/Microsoft/vscode’.
For Azure Repos, do the same. Change https://dev.azure.com/… to ‘https://vscode.dev/dev.azure.com /…’.
Today, support for Azure Repos is in preview mode for reading repositories, but we’re working hard to bring full read/write capabilities as soon as we can.
If you are not on GitHub or Azure DevOps, support for additional repository hosting services can be provided through extensions, just like on the desktop. Those extensions, as noted above, will need to support running fully in the browser.
Speaking of URLs…
Like in the desktop, you can customize VS Code for the Web through a rich ecosystem of extensions that support just about every back end, language, and service. Unlike in the desktop, it’s easy for us to deliver customized experiences with pre-installed extensions through unique vscode.dev URLs (like vscode.dev/github and vscode.dev/azurerepos as mentioned above).
Here you can experience the popular Night Owl color theme by @sarah_edo «live», without having to go through the download and install process, just to see if you like it. No install necessary! If you are a theme author, you can even create a badge in your README.md to let users test drive your theme directly from the Marketplace (learn more in the VS Code for the Web user guide).
Feel free to use this URL to share your favorite themes with friends. Personally, I’m a big fan of @wesbos’ Cobalt2 theme, check out https://vscode.dev/theme/wesbos.theme-cobalt2. Note, the theme URL only works with themes that are fully declarative (no code).
As you can see, vscode.dev URLs are a powerful way for us to deliver new, lightweight experiences. Another example is that Live Share guest sessions will also be available in the browser through the https://vscode.dev/liveshare URL. The sessionId will be passed to the extension to make joining a seamless experience.
The possibilities with vscode.dev URLs are endless, and we’ve got a lot of ideas that we’re excited to share with you in the coming months.
Where to next?
Bringing VS Code to the browser is the realization of the original vision for the product. It is also the start of a completely new one. An ephemeral editor that is available to anyone with a browser and an internet connection is the foundation for a future where we can truly edit anything from anywhere.
HTML in Visual Studio Code
Visual Studio Code provides basic support for HTML programming out of the box. There is syntax highlighting, smart completions with IntelliSense, and customizable formatting. VS Code also includes great Emmet support.
IntelliSense
As you type in HTML, we offer suggestions via HTML IntelliSense. In the image below, you can see a suggested HTML element closure
Document symbols are also available for HTML, allowing you to quickly navigate to DOM nodes by id and class name.
You can also work with embedded CSS and JavaScript. However, note that script and style includes from other files are not followed, the language support only looks at the content of the HTML file.
You can also control which built-in code completion providers are active. Override these in your user or workspace settings if you prefer not to see the corresponding suggestions.
Close tags
Tag elements are automatically closed when > of the opening tag is typed.
The matching closing tag is inserted when / of the closing tag is entered.
You can turn off autoclosing tags with the following setting:
Auto update tags
When modifying a tag, the linked editing feature automatically updates the matching closing tag. The feature is optional and can be enabled by setting:
Color picker
The VS Code color picker UI is now available in HTML style sections.
It supports configuration of hue, saturation and opacity for the color that is picked up from the editor. It also provides the ability to trigger between different color modes by clicking on the color string at the top of the picker. The picker appears on a hover when you are over a color definition.
Hover
Move the mouse over HTML tags or embedded styles and JavaScript to get more information on the symbol under the cursor.
Validation
The HTML language support performs validation on all embedded JavaScript and CSS.
You can turn that validation off with the following settings:
Folding
You can fold regions of source code using the folding icons on the gutter between line numbers and line start. Folding regions are available for all HTML elements for multiline comments in the source code.
Additionally you can use the following region markers to define a folding region: and
If you prefer to switch to indentation based folding for HTML use:
Formatting
The HTML formatter is based on js-beautify. The formatting options offered by that library are surfaced in the VS Code settings:
Tip: The formatter doesn’t format the tags listed in the html.format.unformatted and html.format.contentUnformatted settings. Embedded JavaScript is formatted unless ‘script’ tags are excluded.
The Marketplace has several alternative formatters to choose from. If you want to use a different formatter, define «html.format.enable»: false in your settings to turn off the built-in formatter.
Emmet snippets
VS Code supports Emmet snippet expansion. Emmet abbreviations are listed along with other suggestions and snippets in the editor auto-completion list.
Tip: See the HTML section of the Emmet cheat sheet for valid abbreviations.
For example, to use Emmet HTML abbreviations inside JavaScript:
HTML custom data
You can extend VS Code’s HTML support through a declarative custom data format. By setting html.customData to a list of JSON files following the custom data format, you can enhance VS Code’s understanding of new HTML tags, attributes and attribute values. VS Code will then offer language support such as completion & hover information for the provided tags, attributes and attribute values.
You can read more about using custom data in the vscode-custom-data repository.
HTML extensions
Install an extension to add more functionality. Go to the Extensions view ( ⇧⌘X (Windows, Linux Ctrl+Shift+X ) ) and type ‘html’ to see a list of relevant extensions to help with creating and editing HTML.
Tip: Click on an extension tile above to read the description and reviews to decide which extension is best for you. See more in the Marketplace.
Next steps
Read on to find out about:
Common questions
Does VS Code have HTML preview?
No, VS Code doesn’t have built-in support for HTML preview but there are extensions available in the VS Code Marketplace. Open the Extensions view ( ⇧⌘X (Windows, Linux Ctrl+Shift+X ) ) and search on ‘live preview’ or ‘html preview’ to see a list of available HTML preview extensions.