12

I have a some .py files that use spaces for indentation, and I'd like to convert them to tabs.

I could easily hack together something using regexes, but I can think of several edge cases where this approach could fail. Is there a tool that does this by parsing the file and determining the indentation level the same way the python interpreter does?

Corey
  • 14,101
  • 7
  • 38
  • 35

5 Answers5

17

If there are not many files to convert, you can open them in vim, and use the :retab command.

See the vim documentation for more information.

wimh
  • 15,072
  • 6
  • 47
  • 98
16

Python includes a script for the opposite (tabs to spaces). It's C:\Python24\Tools\Scripts\reindent.py for me

Greg
  • 45,306
  • 89
  • 231
  • 297
12

:retab will swap tab with spaces, and :retab! will swap spaces with tab. 1 tab = 4 spaces, 4 spaces = 1 tab, depending on your tab setting.

Orjanp
  • 10,641
  • 12
  • 36
  • 39
4

If you use Linux, you might also play around with unexpand:

Convert blanks in each FILE to tabs, writing to standard output. With no FILE, or when FILE is -, read standard input.

mzuther
  • 1,158
  • 1
  • 13
  • 24
3

In emacs, M-x tabify will convert spaces to tabs where possible. You'll probably want to set the tab-width variable appropriately.

I don't know if this addresses your concern that spaces be interpreted in the same way as the python interpreter, but you could always load up python-mode and use M-x indent-region.

Alastair
  • 4,475
  • 1
  • 26
  • 23