Richard Jones' Log: So how about "-tt" on by default?
I've just hit my first-ever logic bug in a Python program that is directly attributable to tabs-vs-spaces.
I had code that looked like:
def tasty(): spam = some_complex_code_resulting_in_True eggs = some_complex_code_resulting_in_False if eggs: print 'yum, eggs!' if spam: print 'mmm, spam!'
I was observing that I was never seeing "mmm, spam!" when I really ought to have been. That the code was also a Django site - which I have a rather unhappy relationship with to start with - meant that I was looking all over the damn place to try to figure what was going on.
Of course the real problem was that I was coding on a remote system in vim and I didn't realise that I'd not yet configured it to use "expandtabs", though the tab stop was set to 4 spaces. So the indentation of the "if spam" block was actually tabbed in, thus forming part of the "if eggs" block.
Questions: anyone know why "-tt" is not turned on by default? Is there any way to turn it on for something like mod_python?
Update: hey, look, the .vimrc does have expandtabs set on... it's just not working for some reason. Hrm.
"reindent -r" is your friend ;-)
(but seriously, shouldn't you do development on a local instance using your favourite tools, and deploy by doing "svn up" on the server?)
@Paul: all the editing was done with expandtabs set - but through a "filetype" config line that apparently wasn't being used. I've now hard-coded expandtabs to always be on, and verified that it works :)
@Fredrik: yeah, in an ideal world I'd have a local dev instance :)
-tt ... I didn't know that option existed. I would support turning it on by default.
Are you using the "official" Python vimrc file? It is set so that any .py file that has a leading tab shows up in red (on top of having expandtab set).
I find setting �list� and �listchars� in Vim helpful for anything but files where tabs are actually used, like Makefiles: set list listchars=tab:��,trail:�,extends:>,precedes:<
One way to make sure -tt is used is to include it in the shebang: #!/usr/bin/python -tt
Unfortunately that doesn�t work when using: #!/usr/bin/env python
At the least, I think -t should be the default.
On the other hand, I find not using vi(m) very helpful.
G'day Richard,
I believe that 'expandtabs' will expand NEW tabs that you insert. To convert existing tabs you'll want to 'retab' after setting expandtabs on.
:set et
:retab
Cheerio,
Paul