261

Currently in VSCode settings you can configure format on save as following:

"editor.formatOnSave": true

I want to exclude some file extensions, for example only format JavaScript but not HTML files.

Jeroen
  • 60,696
  • 40
  • 206
  • 339
gabrielAnzaldo
  • 3,014
  • 4
  • 19
  • 19
  • 1
    On Mac, use `Ctrl + K Shift + S` On Linux, use `Ctrl + K S` – Joost van der Laan Jan 25 '20 at 10:36
  • **TIP**: If you have the [JS-CSS-HTML Formatter](https://marketplace.visualstudio.com/items?itemName=lonefy.vscode-JS-CSS-HTML-formatter) extension installed, that will autosave [independently](https://github.com/microsoft/vscode/issues/30839) of `editor.formatOnSave` – KyleMit Dec 09 '20 at 01:18

9 Answers9

401

You can use language specific settings to enable it for a specific language only, e.g. JavaScript:

"[javascript]": {
    "editor.formatOnSave": true
}

To disable it for a specific language, you could switch the global default to true and combine it with a language-specific false:

"editor.formatOnSave": true
"[javascript]": {
    "editor.formatOnSave": false
}

Note that language specific settings are based on language identifiers rather than directly on file extensions. There's an open feature request to allow for file extension specific settings as well.

In cases where the language ID isn't specific enough, "files.associations" could be used to remap files with a specific extension and/or in a specific directory to another ID, but this will affect syntax highlighting, code completion, etc. as well. For instance, this would work to disable formatting for JavaScript files in out directories, but they will be treated as plaintext:

"[javascript]": {
    "editor.formatOnSave": true
},
"files.associations": {
    "**/out/**/*.js": "plaintext"
}
Gama11
  • 31,714
  • 9
  • 78
  • 100
  • 1
    very good answer. however is it possible to apply format on save on specific python module or folder??... the workaround I opened this module in its own vscode windows. – kerbrose Oct 28 '19 at 06:41
  • 3
    One downside to setting, say, `*.in` files as plaintext (`"files.associations": { "*.in": "plaintext" }` is that it disables code highlighting. Is there any way to disable formatting for `*.in` files, but tell it to highlight as a certain language? – Cole Tobin Jul 05 '20 at 22:00
  • 1
    Note that from v1.63 on you can list multiple languages for a group of settings like `"[json][jsonc]":{your json settings here}`. See [release notes](https://code.visualstudio.com/updates/v1_63#_multiple-language-specific-editor-settings). You can btw overwrite previous settings where the last one counts. So you can do "complex" stuff with intersecting sets. – BlameTheBits Mar 24 '22 at 08:18
97

If you came across this question as I did because you were redirected because of this question VSCode : disable formatting of a specific file (or extension) which says, this is a duplicate (I don't feel so, because I wanted it for a specific file) and you're looking for a "one-time" solution:

VS Code has a shortcut "now" (I don't know since when) for saving a file without formatting listed under the command workbench.action.files.saveWithoutFormatting - Default keybinding should be

CTRL + K CTRL + SHIFT + S 

(simply keep CTRL pressed and then type K + SHIFT + S).

On OS X the default keybinding is

CMD + k then press s

upe
  • 1,862
  • 1
  • 19
  • 33
  • 2
    Didn't know about this. Thanks! So, I can have 'FormatOnSave' enabled, but if I still want to save a file without it getting formatted, I keep Ctrl pressed, and then press K + Shift + S Just tried it. Awesome! – abhijit Sep 27 '19 at 05:36
  • 8
    on linux in jan 2020 it's `Ctrl + k` and then just `s` – ryanrain Jan 24 '20 at 20:34
  • Great, but the next time you do a normal save, it will anyway format the file. – Janos Jan 25 '21 at 21:05
  • 3
    Or use `Cmd Shift P` to get to the quick commands and type `save` .. then it will show the command 'Save without formatting'. – Esger Feb 25 '21 at 10:29
  • It's weird, because Ctrl+K is delete current line, so just before saving you'll delete a line... – TrySpace Oct 10 '21 at 11:19
  • `workbench.action.files.saveWithoutFormatting` is not recognized in recent VSCode – metablaster Dec 09 '22 at 16:27
24

I messed up my keyboard keys with VSCode. One alternative could be utilizing the VSCode commands to save without formating by doing CTRL+SHIFT+P and executing the enter image description here command. :)

Ravi Anand
  • 5,106
  • 9
  • 47
  • 77
14

On Mac, use + K, S

On Linux, use Ctrl + K S

On Windows, use Ctrl + K Ctrl + Shift + S

To check the VS Code keyboard shortcuts: Ctrl + K, Ctrl + S (yes, almost the same as the above) and search for "save without formatting"

KABA
  • 313
  • 3
  • 8
Joost van der Laan
  • 2,536
  • 1
  • 18
  • 10
7

If anyone could have faced auto-format or format on saving for .env or other setting or environment file and it has a long string that caused an error and you are looking for a solution,

HERE IS IT (ADD THE BELOW IN YOUR VS CODE SETTINGS.JSON)

 "files.associations": {
    ".env": "plaintext"
},
"[plaintext]": {
    "editor.formatOnSave": false
},
krish111
  • 91
  • 1
  • 4
4

You can use the below settings in Vscode and use "python.formatting.autopep8Args" to specify files or some pattern to ignore files you want. Of course, assuming that you are using autopep8 to format you python files other code formatters might have other ways to configure this.

{
  "editor.formatOnSave": true,
  "editor.defaultFormatter": "esbenp.prettier-vscode",
  "python.formatting.autopep8Args": ["--exclude settings.py"],
  "[python]": {
    "editor.defaultFormatter": "ms-python.python",
    "editor.formatOnSave": true
  }
}
Iftakhar
  • 41
  • 1
  • 4
    This answer is _very_ specific to Python _and_ autopep8, whereas the question was about generally excluding files from a certain language ("*for example only format JavaScript but not HTML files.*"). – Gino Mempin Aug 28 '21 at 04:30
2

Using language specific setting can fix the issue but you will lose the code highlighting

"editor.formatOnSave": true
"[javascript]": {
    "editor.formatOnSave": false
}

My solution was to create the file called ".prettierignore" in the root and

type the file name you want to skip the auto formating. Learn more about in https://prettier.io/docs/en/ignore.html

This way, the auto-formatting will be disabled for the specific file and also you won't lose the code-highlighting.

Jinu Kurian
  • 9,128
  • 3
  • 27
  • 35
2

Another way to exclude a file extension is to set the default formatter for the language to Prettier, and then ignore that file extension using .prettierignore. This has the added advantage that you can run the prettier --write . cli command to format your whole project (or just the files in a commit with lint-staged) and ignore the same file as in vscode.

// settings.json

{
  "editor.formatOnSave": true,
  "[html]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  },

  // OR if you want to format ALL types of documents with prettier by default

  "editor.formatOnSave": true,
  "editor.defaultFormatter": "esbenp.prettier-vscode"
}
// .prettierignore

*.html
Zikoat
  • 373
  • 3
  • 9
0

As a workaround, this extension allow to easily toggle formatting by clicking a button on the status bar.

Welgriv
  • 714
  • 9
  • 24