J. Abrahamson
J. Abrahamson

Reputation: 74344

How can I customize the tab-to-space conversion factor in VS Code?

How do I customize the tab-to-space conversion factor when using Visual Studio Code?

For instance, right now in HTML it appears to produce two spaces per press of TAB, but in TypeScript it produces 4.

Upvotes: 1417

Views: 1332111

Answers (24)

Jim Doyle
Jim Doyle

Reputation: 2648

By default, Visual Studio Code auto-detects the indentation of the current open file. If you want to switch this feature off and make all indentation, for example, two spaces, you'd do the following in your User Settings or Workspace settings.

{
   "editor.tabSize": 2,
   "editor.detectIndentation": false
}

Upvotes: 136

slowpoke123
slowpoke123

Reputation: 385

If you use the prettier extension in Visual Studio Code, try adding this to the settings.json file:

"editor.insertSpaces": false,
"editor.tabSize": 4,
"editor.detectIndentation": false,

"prettier.tabWidth": 4,
"prettier.useTabs": true  // This made it finally work for me

Upvotes: 30

Md. Jamal Uddin
Md. Jamal Uddin

Reputation: 792

There are already lots of good answers provided by our beloved community members. I actually wanted to add the C# code tabSize and found this thread. There are many solutions I found and official VS Code docs is awesome. I just want to share my C# setting:

"[csharp]": {
    "editor.insertSpaces": true,
    "editor.tabSize": 4
},

Just copy and paste above code to your settings.json file and save. thanks

Upvotes: 16

Xin
Xin

Reputation: 36490

Note

If you are talking about prettier for tabSize, go to the Method 2 of this answer.

Method 1 (VS Code Way)

Well, if you like the developer way, Visual Studio Code allows you to specify the different file types for the tabSize. Here is the example of my settings.json with default four spaces and JavaScript/JSON two spaces:

PS: Well, if you do not know how to open this file (specially in a new version of Visual Studio Code), you can:

  1. Left-bottom gear →
  2. Settings → top right Open Settings

Enter image description here

{
  // I want my default to be 4, but JavaScript/JSON to be 2
  "editor.tabSize": 4,
  "[javascript]": {
    "editor.tabSize": 2
  },
  "[json]": {
    "editor.tabSize": 2
  },

  // This one forces the tab to be **space**
  "editor.insertSpaces": true
}

Method 2 (If using prettier)

If you are using prettier, things may be different again, prettier has 2 level of setting for this:

  1. User level, which you can click the extension and click setting find the keyword tabWidth
  2. Project level, which you can add/update from the root project level in file .prettierrc

Upvotes: 291

rustyx
rustyx

Reputation: 85256

Since 2023 there is a new setting editor.indentSize to set the indentation size separately from tab stop size.

This is particularly useful for editing legacy code which relies on 8-space tabs but uses fewer spaces for indentation.

Here's an example configuration for a 4-space indentation, while aligning actual TABs on 8 spaces:

  "editor.insertSpaces": true,
  "editor.indentSize": 4,
  "editor.tabSize": 8,

tabStopWidth

Upvotes: 13

Alex Dima
Alex Dima

Reputation: 23009

By default, Visual Studio Code will try to guess your indentation options depending on the file you open.

You can turn off indentation guessing via "editor.detectIndentation": false.

You can customize this easily via these three settings for Windows in menu FilePreferencesSettings or Ctrl+, and for Mac in menu CodePreferencesSettings or +,:

// The number of spaces a tab is equal to. This setting is overridden
// based on the file contents when `editor.detectIndentation` is true.
"editor.tabSize": 4,

// Insert spaces when pressing Tab. This setting is overriden
// based on the file contents when `editor.detectIndentation` is true.
"editor.insertSpaces": true,

// When opening a file, `editor.tabSize` and `editor.insertSpaces`
// will be detected based on the file contents. Set to false to keep
// the values you've explicitly set, above.
"editor.detectIndentation": false

Upvotes: 2119

VonC
VonC

Reputation: 1323025

From the comments:

Is there a way to change tabSize per language? e.g. when editing multiple files with different languages in the same Workspace (e.g. Ruby, JavaScript, CSS, etc.) - Ruby would be 2 spaces, but CSS would be 4... usually

That is why, with VSCode 1.63 (Nov. 2021), you have:

Multiple language specific editor settings

You can now configure language specific editor settings for multiple languages at once.
Following example shows how you can customise settings for javascript and typescript languages together:

"[javascript][typescript]": {
  "editor.maxTokenizationLineLength": 2500
}

In your case:

"[ruby][html]": {
    "editor.insertSpaces": true,
    "editor.tabSize": 2
},
"[csharp][typescript]": {
    "editor.insertSpaces": true,
    "editor.tabSize": 4
},

You can also change the tab size in terminals, with VSCode 1.75 (Jan. 2023).

Upvotes: 5

bishop
bishop

Reputation: 149

A much simpler approach is to use the in-built wildcard filter @lang: provided by Visual Studio Code.

Steps

  1. Click the settings icon (bottom left)
  2. Select Settings
  3. In the Search Settings input box type in @lang:javascript tabsize

This will filter all the settings and leave you with the options for javascript's tabSize only. Enter the tab factor you want and it will be applied to that language.

Easy to follow steps

Please note

  • To have these settings applied to your user profile make sure the User tab is selected. If the Workspace tab is selected, VSCode will create a .vscode folder in your project folder with a settings.json file; this means whatever changes you will do only apply to the current workspace (project folder)
  • You can use this for any other language eg @lang:php tabsize

Upvotes: 5

Nayeem Bin Ahsan
Nayeem Bin Ahsan

Reputation: 471

In Visual Studio Code version 1.14.1

  • Select File > Preferences > Settings / press [Ctrl + ,]

Go to settings

  • Select User > Commonly Used
  • Set Tab Size to 4

Change tab size

Upvotes: 7

Tricky
Tricky

Reputation: 11444

I'm running version 1.21, but I think this may apply to other versions as well.

Take a look at the bottom right-hand side of the screen. You should see something that says Spaces or Tab-Size.

Mine shows spaces, →

Enter image description here

  1. Click on the Spaces (or Tab-Size)
  2. Choose Indent Using Spaces or Indent using Tabs
  3. Select the amount of spaces or tabs you like.

This only works per document, not project-wide. If you want to apply it project-wide, you need to also add "editor.detectIndentation": false to your user settings.

Upvotes: 1058

Joshua Galit
Joshua Galit

Reputation: 1446

  1. CTRL + comma
  2. Search for indent using tabs
  3. Go and change Editor: Tab Size

enter image description here

That's aLL

Upvotes: 11

Shaun Luttin
Shaun Luttin

Reputation: 141414

We can control tab size by file type with EditorConfig and its EditorConfig for VS Code extension. We then can make Alt + Shift + F specific to each file type.

Installation

Open the VS Code command palette with CTRL + P and paste this:

ext install EditorConfig

Example Configuration

.editorconfig

[*]
indent_style = space

[*.{js,ts,json}]
indent_size = 2

[*.java]
indent_size = 4

[*.go]
indent_style = tab

settings.json

EditorConfig overrides whatever settings.json configures for the editor. There is no need to change editor.detectIndentation.

Upvotes: 95

user742102
user742102

Reputation: 1365

I had to do a lot of settings edits like the previous answers, so I don't know which made it work after a lot of modifications.

Nothing worked until I closed and openen my IDE, but the last three things I did was disable the lonefy.vscode-js-css-html-formatter, "html.format.enable": true, and restart Visual Studio.

{
    "editor.suggestSelection": "first",
    "vsintellicode.modify.editor.suggestSelection": "automaticallyOverrodeDefaultValue",
    "workbench.colorTheme": "Default Light+",
    "[html]": {
        "editor.defaultFormatter": "vscode.html-language-features",
        "editor.tabSize": 2,
        "editor.detectIndentation": false,
        "editor.insertSpaces": true
    },
    "typescript.format.insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces": true,
    "editor.tabSize": 2,
    "typescript.format.insertSpaceAfterConstructor": true,
    "files.autoSave": "afterDelay",
    "html.format.indentHandlebars": true,
    "html.format.indentInnerHtml": true,
    "html.format.enable": true,
    "editor.detectIndentation": false,
    "editor.insertSpaces": true,
}

Upvotes: 2

Andrey Patseiko
Andrey Patseiko

Reputation: 4495

In Visual Studio Code version 1.31.1 or later (I think): Like sed Alex Dima, you can customize this easily via these settings for

  • Windows in menu FilePreferencesUser Settings or use short keys Ctrl + Shift + P
  • Mac in menu CodePreferencesSettings or ,

Enter image description here

Enter image description here

Upvotes: 21

Kevin Peter
Kevin Peter

Reputation: 316

@alex-dima's solution from 2015 will change tab sizes and spaces for all files and @Tricky's solution from 2016 appears to only change the settings for the current file.

As of 2017, I found another solution that works on a per-language basis. Visual Studio Code was not using the proper tab sizes or space settings for Elixir, so I found that I could change the settings for all Elixir files.

I clicked on the language in the status bar ("Elixir" in my case), chose "Configure 'Elixir' language based settings...", and edited the Elixir-specific language settings. I just copied the "editor.tabSize" and "editor.insertSpaces" settings from the default settings on the left (I'm so glad those are shown) and then modified them on the right.

It worked great, and now all Elixir language files use the proper tab size and space settings.

Upvotes: 4

Dacomis
Dacomis

Reputation: 368

In your bottom-right corner, you have Spaces: Spaces: 2

There you can change the indentation according to your needs: Indentation Options

Upvotes: 9

dhruvpatel
dhruvpatel

Reputation: 1269

If the accepted answer on this post doesn't work, give this a try:

I had EditorConfig for Visual Studio Code installed in my editor, and it kept overriding my user settings which were set to indent files using spaces. Every time I switched between editor tabs, my file would automatically get indented with tabs even if I had converted indentation to spaces!!!

Right after I uninstalled this extension, indentation no longer changes between switching editor tabs, and I can work more comfortably rather than having to manually convert tabs to spaces every time I switch files - that is painful.

Upvotes: 6

Steve Hanov
Steve Hanov

Reputation: 11574

When using TypeScript, the default tab width is always two regardless of what it says in the toolbar. You have to set "prettier.tabWidth" in your user settings to change it.

Ctrl + P, Type → user settings, add:

"prettier.tabWidth": 4

Upvotes: 4

Gh111
Gh111

Reputation: 1452

I tried to change editor.tabSize to 4, but .editorConfig overrides whatever settings I had specified, so there is no need to change any configuration in user settings. You just need to edit .editorConfig file:

set indent_size = 4

Upvotes: 1

Gmoney Mozart
Gmoney Mozart

Reputation: 97

Menu FilePreferencesSettings

Add to user settings:

"editor.tabSize": 2,
"editor.detectIndentation": false

then right click your document if you have one opened already and click Format Document to have your existing document follow these new settings.

Upvotes: 4

Ben Taliadoros
Ben Taliadoros

Reputation: 9331

If this is for Angular 2, and the CLI is generating files which you would like differently formatted, you can edit these files to change what is generated:

npm_modules/@angular/cli/blueprints/component/files/__path__/*

Not massively recommended as an npm update will delete your work, but it has saved me a lot of time.

Upvotes: 0

DRL
DRL

Reputation: 19

User3550138 is correct. lonefy.vscode-js-css-html-formatter overrides all the settings mentioned in other answers. However, you don't have to disable or uninstall it as it can be configured.

Full instructions can be found by opening the extensions sidebar and clicking on this extension and it will display configuration instructions in the editor workspace. At least it does for me in Visual Studio Code version 1.14.1.

Upvotes: -1

user3550138
user3550138

Reputation: 131

That is lonefy.vscode-js-css-html-formatter to blame. Disable it, and install HookyQR.beautify.

Now on save your tabs wouldn't be converted.

Upvotes: 8

Travis Brown
Travis Brown

Reputation: 111

You want to make sure your editorconfig is not conflicting with your user or workspace settings configuration, as I just had a bit of annoyance thinking the settings files settings were not being applied when it was my editor configuration undoing those changes.

Upvotes: 7

Related Questions