Reputation: 4867
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
}
Upvotes: 227
Views: 219485
Reputation: 1754
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:
Apply your desired setting to the entire document.
Upvotes: 134
Reputation: 306
Use the following command to get it solved :
autopep8 -i <filename>.py
Upvotes: -1
Reputation: 7402
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
.
Upvotes: 479
Reputation: 141
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
Upvotes: 0
Reputation: 9475
You can do replace tabs with spaces in all project files by:
Ctrl+Shif+F
^\A(.*)$
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,
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()
File -> Save All
Upvotes: 0
Reputation: 1030
In my case, this line solved the problem:
"translate_tabs_to_spaces": false
Upvotes: 8
Reputation: 191
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"
Upvotes: 15
Reputation: 5460
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.
Upvotes: 4
Reputation: 3640
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...
Upvotes: 5
Reputation: 795
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.
Upvotes: -1
Reputation: 1548
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.
Upvotes: 92