Sublime Text 3, convert spaces to tabs
TabsSublimetextSublimetext3SpacesAuto IndentTabs Problem Overview
I know there are a lot of posts about this, but I couldn´t get it to work.
I use tabs for coding. Is there a way, to convert always spaces to tabs? I.e. on open and on Save files? Anyone got an idea?
// edit:
My desire is to do this automatically! -> open, save or on the fly
Does anyone know how to do?
I tried this:
import sublime, sublime_plugin, os
class ExpandTabsOnSave(sublime_plugin.EventListener):
# Run ST's 'expand_tabs' command when saving a file
def on_pre_save(self, view):
if view.settings().get('expand_tabs_on_save') == 1:
view.window().run_command('expand_tabs')
And here are my user Settings:
{
"auto_complete_selector": "source - comment, meta.tag - punctuation.definition.tag.begin",
"auto_indent": true,
"detect_indentation": true,
"draw_white_space": "all",
"ensure_newline_at_eof_on_save": true,
"expand_tabs_on_save": true,
"font_face": "SourceCodePro-Regular",
"font_size": 10,
"format_on_save": true,
"ignored_packages":
[
"Vintage"
],
"indent_to_bracket": true,
"open_files_in_new_window": false,
"smart_indent": true,
"tab_size": 4,
"translate_tabs_to_spaces": false,
"trim_automatic_white_space": true,
"trim_trailing_white_space_on_save": true,
"use_tab_stops": false,
"word_wrap": false
}
Tabs Solutions
Solution 1 - Tabs
On the bottom right-hand corner of your Sublime Text window, you'll see an indentation indicator that looks a lot like this:
Clicking it will open a menu with options to adjust your indentation preferences, and more importantly, Convert Indentation to Tabs/Spaces
.
The same menu is listed under View -> Indentation
.
Solution 2 - Tabs
At the bottom of the Sublime window, you'll see something representing your tab/space setting.
You'll then get a dropdown with a bunch of options. The options you care about are:
- Convert Indentation to Spaces
- Convert Indentation to Tabs
Apply your desired setting to the entire document.
Hope this helps.
Solution 3 - Tabs
As you might already know, you can customize your indention settings in Preferences.sublime-settings
, for example:
"detect_indentation": true,
"tab_size": 4,
"translate_tabs_to_spaces": false
This will set your editor to use tabs that are 4 spaces wide and will override the default behavior that causes Sublime to match the indention of whatever file you're editing. With these settings, re-indenting the file will cause any spaces to be replaced with tabs.
As far as automatically re-indenting when opening a file, that's not quite as easy (but probably isn't a great idea since whitespace changes wreak havoc on file diffs). What might be a better course of action: you can map a shortcut for re-indention and just trigger that when you open a new file that needs fixing.
Solution 4 - Tabs
You can use the command palette to solve this issue.
Step 1: Ctrl + Shift + P
(to activate the command palette)
Step 2: Type "Indentation", Choose "Indentation: Convert to Tabs"
Solution 5 - Tabs
In my case, this line solved the problem:
"translate_tabs_to_spaces": false
Solution 6 - Tabs
Here is a solution that will automatically convert to tabs whenever you open a file.
Create this file: .../Packages/User/on_file_load.py
:
import sublime
import sublime_plugin
class OnFileLoadEventListener(sublime_plugin.EventListener):
def on_load_async(self, view):
view.run_command("unexpand_tabs")
NOTE. It causes the file to be in an unsaved state after opening it, even if no actual space-to-tab conversion took place... maybe some can help with a fix for that...
Solution 7 - Tabs
To automatically convert spaces to tabs on save, add the following Python script to a newly created subfolder called "UnexpandTabsOnSave" within "$SUBLIME_HOME$\Packages":
import sublime, sublime_plugin, os
class ConvertSpacesToTabsOnSave( sublime_plugin.EventListener ):
# Run Sublime's 'unexpand_tabs' command when saving any file
def on_pre_save( self, view ):
view.window().run_command( 'unexpand_tabs' )
Thank you for the initial resource.
Solution 8 - Tabs
You can do replace tabs with spaces in all project files by:
-
Doing a Replace all
Ctrl+Shif+F
-
Set regex search
^\A(.*)$
-
Set directory to
Your dir
-
Replace by
\1
-
This will cause all project files to be opened, with their buffer marked as dirty. With this, you can now optionally enable these next Sublime Text settings, to trim all files trailing white space and ensure a new line at the end of every file.
You can enabled these settings by going on the menu
Preferences -> Settings
and adding these contents to your settings file:"ensure_newline_at_eof_on_save": true,
"trim_trailing_white_space_on_save": true,
-
Open the Sublime Text console, by going on the menu
View -> Show Console (Ctrl+`)
and run the command:import threading; threading.Thread( args=(set(),), target=lambda counterset: [ (view.run_command( "expand_tabs", {"set_translate_tabs": True} ), print( "Processing {:>5} view of {:>5}, view id {} {}".format( len( counterset ) + 1, len( window.views() ), view.id(), ( "Finished converting!" if len( counterset ) > len( window.views() ) - 2 else "" ) ) ), counterset.add( len( counterset ) ) ) for view in window.views() ] ).start()
-
Now, save all changed files by going to the menu
File -> Save All
Solution 9 - Tabs
if you have Mac just use help option (usually the last option on Mac's menu bar) then type: "tab indentation" and choose a tab indentation width
but generally, you can follow this path: view -> indentation
Solution 10 - Tabs
Here is how you to do it automatically on save: https://coderwall.com/p/zvyg7a/convert-tabs-to-spaces-on-file-save
Unfortunately the package is not working when you install it from the Package Manager.
Solution 11 - Tabs
Use the following command to get it solved :
autopep8 -i <filename>.py