The variability in the ways tabs are displayed, which you can not control, make tabs a non-starter.
Spaces always look like spaces. So when you use them, your text looks the same wherever it is displayed, and that requires no additional work.
The one caveat here (if you don't already know) is that the `make` utility has never been updated to allow spaces, even to this day. So, you must use hard tabs in Makefiles.
Also worth knowing is that Python's official style guide, PEP-8, insists on spaces (specifically, 4 spaces), and the officially-provided formatting tool for Go uses tabs (a decision that I was most displeased with). It's physically possible to go against these recommendations, but you're not likely to find any community cooperation for that decision if you're working in those two languages.
You can absolutely control the way tabs are displayed. Using a poorly built tool that doesn't give you that option is the non-starter.
The rest of what you said are just random facts that don't really support your preference.
The word tab derives from the word tabulate, which means "to arrange data in a tabular, or table, form." When a person wanted to type a table (of numbers or text) on a typewriter, there was a lot of time-consuming and repetitive use of the space bar and backspace key. — https://en.m.wikipedia.org/wiki/Tab_keyTo insert 4 consecutive spaces at once.
I used to prefer spaces until I came across an argument which convinced me to convert:
Indentation can be something very subjective, some prefer two spaces, others four and yet again others maybe eight. With spaces everyone is forced to use one particular style. With tabs everybody can configure it exactly the way they want and it will be displayed in one unified style.
To go further, always use a standard formatting tool (gofmt, clang-format...) before committing code.
Tabs can be messy across version control and multiple users with differing OS / editor.
Configuring your favourite text editor to interpret a tab key press as 2, 4 or whatever number of spaces for your project is trivial.
And I go with whatever the current file is. If I didn't make the file I respect the style of whoever did.
For my own files I prefer spaces.
That said, assuming a greenfield the best case has to be to use tabs. This way if somebody has a preference to small indents then they can configure the TAB to render as 2-spaces - it becomes a render issue.
So, use a modern tool and it's a moot point.
P.S. not sure why Silicon Valley's Richard started talking about 8 space tabs. That would be crazy. The only time I've seen that is in a proportional font in a word processor.
[0]:https://en.wikipedia.org/wiki/Whitespace_(programming_langua...
But compatibility trumps awesomeness, so spaces.
Using spaces to force everyone to your preferred indentation is like forcing the font size. I can't read code indented two spaces, but if we use tabs I can set the indent to 4 spaces widths and someone with younger eyes can use 2.
I write a lot of C, and given the choice, I tend to prefer tabs for indentation and spaces for alignment. I use a tab-width of 8, so the code will look fine for anyone using a lower tab-width.
Converting from tabs to spaces is a simple search-and-replace, whereas the other way is more work (there was an article here recently about algorithms to guess indentation width).
If it's empty, spaces.
If people choose a different way, is because they have a reason, or they don't care.
If you're not sure, use whatever the file already uses, or the way I described above, or whatever makes you feel fuzzy inside. In that order!
If you join a project already using tabs / spaces and you wanna switch, don't bother doing that.
...but using the tab key /glares at Silicon Valley/
Tabs means everyone can use whatever preference they want and not be bothered by anyone else's preference.
Go or Python, so I don't spend time on this trivial decision anymore.