How syntax highlighting works in brief:
syntax/<filetype>.vim the syntax rules are defined with the
:syntax command. This command defines, well, syntax. It says "if text matches this regular expression, it's a string", and so forth. To do so, it assigns a highlight group. It does not say anything about colours as such.
:highlight says "highlight this group with these colours". This is done in the colour scheme, not the syntax file. There are a bunch of default Highlight groups (
Special, and so forth) which all colour schemes should define.
You're by no means restricted to these default groups though, and you can create as many groups as you want (but default syntax files typically don't).
indent/<filetype>.vim file controls automatic indentation. For example for Ruby it says "the line after
def should increase the indentation level" and "the line after
end should decrease the indentation one level". It doesn't do anything with colours or syntax highlighting.
Why do different programming languages get highlighted different? In part because of the of personal aesthetics and opinions of whoever wrote it. For example in Ruby the
Type highlight group is used for class names. But it could also have been
Function or something else. Why is it
Type? Probably because the author thought that it looked better in his or her colour scheme.
But more importantly, the languages have different semantics and sensibilities. In Ruby,
self is a special keyword. You can't do
self = "foo" or
def self(). These are errors. But this is not the case in Python. It's just another variable without any special properties. Doing:
x = Object()
is really "translated" by Python to:
self is just convention (almost universally adopted) but you can name it anything you like;
def x(this): or
def x(xxx): are equally valid. You can also use the name
self anywhere you like;
self = 'foo' and
def self(): are perfectly fine.
I would argue that
self shouldn't be highlighted, as it's neither a special keyword, nor a pre-defined variable (like
str). There is no trace of the word
self in the syntax file, so it looks like the author of it reasoned the same :-)
If you want
self highlighted you'll have to create a syntax rule for it:
:syn keyword pythonBuiltin self
pythonBuiltin group name is already defined in the default syntax file and linked to the
Function highlight group. To use a new highlight group, use something like:
:syn keyword pythonSelf self
:highlight def link pythonSelf Special
To make these changes you can't just stick 'em in your vimrc file. The syntax file will override it. Instead you'll need to run it after the syntax file loads, which you can do in two ways:
autocmd FileType python
\ syn keyword pythonSelf self
\ | highlight def link pythonSelf Special
syn keyword pythonSelf self
highlight def link pythonSelf Special
Both methods are effectively the same. Use whichever you prefer.