Intellij reformat on file save
Asked Answered
T

14

432

I remember seeing in either IntelliJ or Eclipse the setting to reformat (cleanup) files whenever they are saved. How do I find it (didn't find it in the settings)

Tailored answered 3/6, 2009 at 20:22 Comment(0)
B
333

I suggest the save actions plugin. It also supports optimize imports and rearrange code.

Works well in combination with the eclipse formatter plugin.

Search and activate the plugin:

enter image description here

Configure it:

enter image description here

Edit: it seems like it the recent version of Intellij the save action plugin is triggered by the automatic Intellij save. This can be quite annoying when it hits while still editing.

This github issue of the plugin gives a hint to some possible solutions:

https://github.com/dubreuia/intellij-plugin-save-actions/issues/63

I actually tried to assign reformat to Ctrl+S and it worked fine - saving is done automatically now.

Bait answered 26/2, 2015 at 17:10 Comment(9)
I used this but after updating to Android Studio 1.5.1, I can't find it anymore.Otte
The Plugin was (as of now) last updated 10.02.2016 and says Compatibility This plugin works with Java 6+ and Intellij IDEA Community Edition after 131 (around version 13). I don't know which Version of IntelliJ Android Studio is based on. Can you check this?Bait
Almost worked for me. Unfortunately, the "reformat code" would do only a subset of the things that "Code > Reformat code" does (at least for Scala code). Why is that?Solfeggio
Tried this but IntelliJ saves far to often. Organizing imports pops up ever 2-3 keystrokes.Indescribable
Confirming Ash, in my case it launches reformatting every 2 seconds.. :O OMGKimmel
There seem to be hints on how to solve this issue in this github thread of the plugin github.com/dubreuia/intellij-plugin-save-actions/issues/63Bait
The plugin will only trigger (and reformat) when you switch windows. If it happens more often then that, it is because another plugin interfere with the save mechanism (Eclipse formatter for example). Open an issue on github.com/dubreuia/intellij-plugin-save-actions/issues with installed plugins and I'll try to correct the problem by filtering save event (I'm the plugin dev).Trunnel
I'm slowly adding new products (Android Studio, PyCharm, etc.), you can use a beta version and follow advancement here github.com/dubreuia/intellij-plugin-save-actions/issues/18 (I'm the plugin dev)Trunnel
Unfortunately, this plugin does not perform a complete "cleanup" action, so not sufficient for anything except including inspections auto-fix and simple re-formatting.Dade
P
473

This solution worked better for me:

  1. Make a macro (I used Organize Imports, Format Code, Save All)
  2. Assign it a keystroke (I overrode Ctrl+S)

Note: You will have to check the box "Do not show this message again" the first time for the organized imports, but it works as expected after that.

Step-by-step for IntelliJ 10.0:

  1. Code -> "Optimize Imports...", if a dialogue box appears, check the box that says "Do not show this message again.", then click "Run".
  2. Tools -> "Start Macro Recording"
  3. Code -> "Optimize Imports..."
  4. Code -> "Reformat Code..."
  5. File -> "Save all"
  6. Tools -> "Stop Macro Recording"
  7. Name the macro (something like "formatted save")
  8. In File -> Settings -> Keymap, select your macro located at "Main Menu -> Tools -> "formatted save"
  9. Click "Add Keyboard Shortcut", then perform the keystroke you want. If you choose Ctrl+S like me, it will ask you what to do with the previous Ctrl+S shortcut. Remove it. You can always reassign it later if you want.
  10. Enjoy!

For IntelliJ 11, replace

step 2. with: Edit -> Macros -> "Start Macro Recording"
step 6. with: Edit -> Macros -> "Stop Macro Recording"

Everything else remains the same.

IntelliJ 12

8. The Preferences contain the Keymap settings. Use the input field to filter the content, as shown in the screenshot.

Intellij / Preferences / Keymap / Macros

Pfaff answered 7/4, 2011 at 13:36 Comment(4)
In IntelliJ 11: 1: Start macro recording: Edit -> Macros -> Start macro recording. 2: Follow instructions above. 3: Stop macro recording: Edit -> Macros -> Stop macro recording. In the Keymap the macro is saved to the Macros folder instead of the Main Menu -> Tools folder.Madai
If you're happy with how code is reformatted then this approach works much better if you choose to reformat all code in the project and save all. Otherwise when you make multi-file edits only the active one is reformatted before all modified are saved.Reassure
i am using intellij 11. The macro formates only the file which is open and not the whole project. What can i do?Lalonde
in V 2021.2.2 this has become a built in feature in File | Settings | Tools | Actions on SaveIdalla
B
333

I suggest the save actions plugin. It also supports optimize imports and rearrange code.

Works well in combination with the eclipse formatter plugin.

Search and activate the plugin:

enter image description here

Configure it:

enter image description here

Edit: it seems like it the recent version of Intellij the save action plugin is triggered by the automatic Intellij save. This can be quite annoying when it hits while still editing.

This github issue of the plugin gives a hint to some possible solutions:

https://github.com/dubreuia/intellij-plugin-save-actions/issues/63

I actually tried to assign reformat to Ctrl+S and it worked fine - saving is done automatically now.

Bait answered 26/2, 2015 at 17:10 Comment(9)
I used this but after updating to Android Studio 1.5.1, I can't find it anymore.Otte
The Plugin was (as of now) last updated 10.02.2016 and says Compatibility This plugin works with Java 6+ and Intellij IDEA Community Edition after 131 (around version 13). I don't know which Version of IntelliJ Android Studio is based on. Can you check this?Bait
Almost worked for me. Unfortunately, the "reformat code" would do only a subset of the things that "Code > Reformat code" does (at least for Scala code). Why is that?Solfeggio
Tried this but IntelliJ saves far to often. Organizing imports pops up ever 2-3 keystrokes.Indescribable
Confirming Ash, in my case it launches reformatting every 2 seconds.. :O OMGKimmel
There seem to be hints on how to solve this issue in this github thread of the plugin github.com/dubreuia/intellij-plugin-save-actions/issues/63Bait
The plugin will only trigger (and reformat) when you switch windows. If it happens more often then that, it is because another plugin interfere with the save mechanism (Eclipse formatter for example). Open an issue on github.com/dubreuia/intellij-plugin-save-actions/issues with installed plugins and I'll try to correct the problem by filtering save event (I'm the plugin dev).Trunnel
I'm slowly adding new products (Android Studio, PyCharm, etc.), you can use a beta version and follow advancement here github.com/dubreuia/intellij-plugin-save-actions/issues/18 (I'm the plugin dev)Trunnel
Unfortunately, this plugin does not perform a complete "cleanup" action, so not sufficient for anything except including inspections auto-fix and simple re-formatting.Dade
T
95

Below is Neil's answer updated.

IntelliJ 13 Steps:

  1. Code -> Reformat Code enter image description here
  2. Edit -> Macros -> Start Macro Recording
  3. Code -> Reformat Code
  4. File -> Save all
  5. Edit -> Macros -> Stop Macro Recording
  6. Name the macro (something like "formatted save")
  7. File -> Settings -> Keymap
  8. Right click on the macro. Add Keyboard Shortcut. Set the keyboard shortcut to Control + S. enter image description here
  9. IntelliJ will inform you of a hotkey conflict. Select "remove" to remove other assignments.
Trochlear answered 20/7, 2014 at 17:11 Comment(3)
But this removes the "Save" action. What the poster has seen is that in Eclipse we have the option to format code and organize import automatically when a file is saved. This option is (I assume) absent in IntelliJ idea. This is a work around which involves binding the save key to the reformat key.Minter
I disagree, @GaneshKrishnan. This workaround does not bind the "save key" to the "reformat key". It binds it to a macro that "reformats and saves", which is exactly what was asked for by OP and what is implemented in Eclipse, but triggered with a check box.Romanticism
I think maybe for step 1 you mean "Code -> Show Reformat File Dialog" to set the defaults for Reformat File Dialog (so that they are set correctly for step 3 - Reformat Code)?Grassgreen
N
60

I set it to automatically clean up on check-in, which is usually good enough for me. If something is too ugly, I'll just hit the shortcut (Ctrl-Alt-L, Return). And I see they have an option for auto-formatting pasted code, although I've never used that.

Nitrile answered 16/6, 2009 at 0:12 Comment(6)
You can also use Ctrl-Shift-F to format. That works way better for me, since Ctrl-Alt-L is the lock screen command on Ubuntu.Damales
Ctrl+Shift+F is Find in Path.Koala
How do you set up something to happen on check-in?Denouement
Does that work if you are not checking in using intelliJ i.e I think it won't work if you checking in using command line tool.Lighten
How does that answer the question?Caterer
@Caterer it doesn't, but it was enough for OPs problem problem, even tho he asked about a specific way f solving it - which was not answered.Aurignacian
C
36

Rejoice! In IDEA 2021.2 there is finally "File->Settings->Tools->Actions on Save" where you can select Reformat code, Optimize imports, Rearrange code, Run code cleanup, Run eslint --fix etc.

Candlestick answered 3/8, 2021 at 2:43 Comment(1)
This should be the accepted answer at this stage. The macros approach works fine but this is the best option with the latest IntelliJ feature set.Occidentalize
C
30

If you have InteliJ Idea Community 2018.2 and above the steps are as fallows:

  1. In the top menu you click: Edit > Macros > Start Macro Recordings (you'll see a window lower right corner of your screen confirming that macros are being recorded)
  2. In the top menu you click: Code > Reformat Code (you'll see the option being selected in the lower right corner)
  3. In the top menu you click: Code > Optimize Imports (you'll see the option being selected in the lower right corner)
  4. In the top menu you click: File > Save All
  5. In the top menu you click: Edit > Macros > Stop Macro Recording
  6. You name the macro: "Format Code, Organize Imports, Save"
  7. In the top menu you clock: File > Settings. In the settings windows you click Keymap
  8. In the search box on the right you search "save". You'll find Save All (Ctrl+S). Right click on it and select "Remove Ctrl+S"
  9. Remove your search text from the box, press on the Collapse All button (Second button from the top left)
  10. Go to macros, press on the arrow to expand your macros, find your saved macro and right click on it. Select Add Keyboard Shortcut, and press Ctrl+S and okay.

Restart your IDE and try it.

I know what you're going to say, the guys before me wrote the same thing. But I got confused using the steps above this post, and I wanted to write a dumb down version for people who have the latest version of the IDE.

Casandra answered 19/11, 2018 at 8:39 Comment(1)
Thanks. This works for intellij 2020.3 too!Nancynandor
P
21

Ctrl + Alt + L is format file (includes the two below)

Ctrl + Alt + O is optimize imports

Ctrl + Alt + I will fix indentation on a particular line

I usually run Ctrl + Alt + L a few times before committing my work. I'd rather it do the cleanup/reformatting at my command instead of automatically.

Peoria answered 17/6, 2009 at 2:16 Comment(4)
Replace Ctrl with Cmd for MacCalcicole
Careful on Linux as Ctrl + Alt + L is commonly Lock Session. You'd need to remap one of the functions.Partition
The Ctrl-Alt-L key can be unbound in Ubuntu. https://mcmap.net/q/81936/-ubuntu-do-not-lock-the-screen-when-pressing-super-l-closed/53897Xylophagous
This really doesn't answer the question at all.Occidentalize
B
16

If you're developing in Flutter, there's a new experimental option as of 5/1/2018 that allows you to format code on save. Settings

Batchelder answered 1/5, 2018 at 23:50 Comment(0)
M
10

I wound up rebinding the Reformat code... action to Ctrl-S, replacing the default binding for Save All.

It may sound crazy at first, but IntelliJ seems to save on virtually every action: running tests, building the project, even when closing an editor tab. I have a habit of hitting Ctrl-S pretty often, so this actually works quite well for me. It's certainly easier to type than the default bind for reformatting.

Moureaux answered 14/6, 2014 at 3:10 Comment(0)
P
6

IntellIJ 14 && 15: When you are checking in code in Commit changes dialog, tick the Reformat code checkbox, then IntelliJ will reformatting all the code that you are checking in.

Source: www.udemy.com/intellij-idea-secrets-double-your-coding-speed-in-2-hours

Polythene answered 24/4, 2016 at 15:35 Comment(2)
What did I said hereFlint
Beware that excessive promotion of one resource may be interpreted by the community as spam. You should post good, relevant answers, and if one or two happen to mention this course, that's fine - but if you're posting it in every answer, it's going to get flagged and deleted.Tycho
S
6

For PyCharm/IntelliJ IDEA:

  1. Install black.

$ pip install black

  1. Locate your black installation folder.

On macOS / Linux / BSD:

$ which black
/usr/local/bin/black  # possible location

On Windows:

$ where black
%LocalAppData%\Programs\Python\Python36-32\Scripts\black.exe  # possible location

Note that if you are using a virtual environment detected by PyCharm, this is an unneeded step. In this case the path to black is $PyInterpreterDirectory$/black.

  1. Open External tools in PyCharm/IntelliJ IDEA

On macOS: PyCharm -> Preferences -> Tools -> External Tools

On Windows / Linux / BSD: File -> Settings -> Tools -> External Tools

  1. Click the + icon to add a new external tool with the following values:
Name: Black
Description: Black is the uncompromising Python code formatter.
Program: <install_location_from_step_2>
Arguments: "$FilePath$"
  1. Format the currently opened file by selecting Tools -> External Tools -> black.

Alternatively, you can set a keyboard shortcut by navigating to Preferences or Settings -> Keymap -> External Tools -> External Tools - Black.

  1. Optionally, run Black on every file save:

Make sure you have the File Watchers plugin installed.

Go to Preferences or Settings -> Tools -> File Watchers and click + to add a new watcher:

Name: Black
File type: Python
Scope: Project Files
Program: <install_location_from_step_2>
Arguments: $FilePath$
Output paths to refresh: $FilePath$
Working directory: $ProjectFileDir$

Uncheck “Auto-save edited files to trigger the watcher” in Advanced Options

To format Python files with Black, I followed this guide, which also uses File Watcher: https://black.readthedocs.io/en/stable/editor_integration.html

Skittish answered 5/3, 2021 at 13:23 Comment(0)
W
3

Since version 2020.1, you can activate Run on save for files directly in the Preferences of the Prettier plugin:

Preferences for Prettier plugin

Willson answered 16/6, 2020 at 8:39 Comment(2)
IntelliJ is not only for JavaScript projects so this is not an answerIchabod
@Ichabod IntelliJ does support JavaScript projects though and so this answer is apparently helpful to other people. The question does not ask for a solution that covers all possible cases nor states a specific case/language.Willson
L
2

I thought there was something like that in IntelliJ, but I can't find it. The only clean-up that happens at save is that white space at the ends of lines is removed. I thought I had to specify that behavior at one point, but I don't see anything related at this point.

Lied answered 3/6, 2009 at 20:59 Comment(0)
F
2

If it's about Prettier, just use a File Watcher :

references => Tools => File Watchers => click + to add a new watcher => Prettier

https://prettier.io/docs/en/webstorm.html#running-prettier-on-save-using-file-watcher

Friedcake answered 4/10, 2018 at 8:29 Comment(1)
Prettier is great but it doesn't work for languages/formats outside of the web. It'll format js, ts, css, json, etc. but is useless for C, C#, Java, Python, etc. - with the exception of some early attempts at plugins.Clive

© 2022 - 2024 — McMap. All rights reserved.