www.jwz.org/doc/tabs-vs-spaces.html
I think a big part of these interminable arguments about tabs is based on people using the same words to mean different things. In the following, Im trying to avoid espousing my personal religion here, I just thought it would be good to try and explain the various sects. People care vehemently about a few different things: When reading code, and when theyre done writing new code, they care about how many screen columns by which the code tends to indent when a new scope or sexpr, or whatever opens. When there is some random file on disk that contains ASCII byte 9, the TAB character, they care about how their software reacts to that byte, display-wise. When writing code, they care about what happens when they press the TAB key on their keyboard. Note that I make a distinction between the TAB character which is a byte which can occur in a disk file and the TAB key which is that plastic bump on your keyboard, which when hit causes your computer to do something. As to point 1: A lot of people like that distance to be two columns, and a lot of people like that distance to be four columns, and a smaller number of people like to have somewhat more complicated and context- dependent rules than that. On defaultly-configured Unix systems, and on ancient dumb terminals and teletypes, the tradition has been for the TAB character to mean move to the right until the current column is a multiple of 8. As it happens, this is how Netscape interprets TAB inside <PRE> as well. This is also the default in the two most popular Unix editors, Emacs and vi. In many Windows and Mac editors, the default interpretation is the same, except that multiples of 4 are used instead of multiples of 8. However, some people configure vi to make TAB be mod-2 instead of mod-4 see below. With these three interpretations, the ASCII TAB character is essentially being used as a compression mechanism, to make sequences of SPACE-characters take up less room in the file. Both Emacs and vi are customizable about the number of columns used. Unix terminals and shell-windows are usually customizable away from their default of 8, but sometimes not, and often its difficult. A third interpretation is for the ASCII TAB character to mean indent to the next tab stop, where the tab stops are set arbitrarily: they might not necessarily be equally distanced from each other. On the Mac, BBedit defaults to 4-column tabs, but the tabstops can be set anywhere. It also has entab and detab commands, for converting from spaces to tabs and vice versa just like Emacss M-x tabify and M-x untabify . As to point 3, the tab key: this is an editor user interface issue. Some editors like vi treat TAB as being exactly like X, Y, and Z: when you type it, it gets inserted into the file, end of story. With editors like this, the interpretation of point 2 is what really matters: since TAB is just a self-inserting character, the way that one changes the semantics of hitting the TAB key on the keyboard is by changing the semantics of the display of the TAB character. Some editors like Emacs treat TAB as being a command which means indent this line. And by indent, it means, cause the first non-whitespace character on this line to occur at column N . To editors like this, it doesnt matter much what kind of interpretation is assigned to point 2: the TAB character in a file could be interpreted as being mod-2 columns, mod-4 columns, or mod-8 columns. The only thing that matters is that the editor realize which interpretation of the TAB character is being used, so that it knows how to properly put the file characters on the screen. The decisions of how many characters by which an expression should be indented point 1 and of how those columns should be encoded in the file using the TAB character point 2 are completely orthogonal. My opinion is that the best way to solve the technical issues is to mandate that the ASCII 9 TAB character never appear in disk files: program your editor to expand TABs to an appropriate number of spaces before writing the lines to disk. That simplifies matters greatly, by separating the technical issues of 2 and 3 from the religious issue of 1. As a data point, my personal setup is the same as the default Emacs configuration: the TAB character is interpreted as mod-8 indentation;
|