I tried to avoid jumping in, because this often turns into a religious debate, but I thought I'd make just one point ...

My biggest complaint about changing tabstops (eg, by doing "set ts=2" in vi/vim) is that if, for some reason, I decide I really need to print the code, it doesn't look the same, because the only tabstops printers understand (at least, printers I've ever used) is hard tabstops every 8 spaces.  Hence, the code ends up spread way over to the right. You have the same issue in a pager like more/less.

Vi/vim has a nice, clean solution to this.  Rather than pressing the TAB key, you can use Ctrl-T to indent one more 
"shift width" and Ctrl-D de-indents one shift width.  So, if you leave your tabstops at 8, but set shift-width to something else (eg, "set sw=2") you get the indentation you want to see in the editor, in more/less and on the printer.  The shift-width is also what vi/vim uses when you say indent/de-indent this chunk of text, so most people set it, anyway.

As to whether you expand tabs to spaces, I don't think it really matters, so long as you use Ctrl-T/Ctrl-D.  It's then just a question of disk space (ie, having some of those spaces turned into TABs may potentially save a few bytes, but it's probably not worth worrying about).

I'll shut up now :-).

Harry O.