Como o destaque da sintaxe funciona em breve:
Na syntax/<filetype>.vim
sintaxe, as regras são definidas com o :syntax
comando Este comando define, bem, sintaxe. Ele diz "se o texto corresponde a essa expressão regular, é uma string" e assim por diante. Para isso, atribui um grupo de destaque . Ele não disse nada sobre cores como tal.
:highlight
diz "destaque esse grupo com essas cores". Isso é feito no esquema de cores , não no arquivo de sintaxe. Há um monte de grupos Destaque padrão ( String
, Function
, Special
e assim por diante), que todos os esquemas de cores deve definir.
Entretanto, você não está restrito a esses grupos padrão e pode criar quantos grupos desejar (mas os arquivos de sintaxe padrão normalmente não o fazem).
O indent/<filetype>.vim
arquivo controla o recuo automático. Por exemplo, para Ruby, ele diz "a linha após def
deve aumentar o nível de indentação" e "a linha após end
deve diminuir a indentação em um nível". Não faz nada com cores ou realce de sintaxe.
Por que diferentes linguagens de programação são destacadas de maneira diferente? Em parte por causa da estética pessoal e das opiniões de quem a escreveu. Por exemplo, no Ruby, o Type
grupo de destaque é usado para nomes de classes. Mas também poderia ter sido Function
ou algo mais. Por que é isso Type
? Provavelmente porque o autor pensou que ficaria melhor em seu esquema de cores.
Mais importante, porém, as línguas têm diferentes semânticas e sensibilidades. Em Ruby, self
é uma palavra-chave especial. Você não pode fazer self = "foo"
ou def self()
. Estes são erros. Mas este não é o caso em Python. É apenas outra variável sem propriedades especiais. Fazendo:
x = Object()
x.foo()
é realmente "traduzido" pelo Python para:
Object.foo(x)
O nome self
é apenas convenção (quase universalmente adotado), mas você pode nomear o que quiser; def x(this):
ou def x(xxx):
são igualmente válidos. Você também pode usar o nome em self
qualquer lugar que desejar; self = 'foo'
e def self():
estão perfeitamente bem.
Eu diria que isso self
não deve ser destacado, pois não é uma palavra-chave especial nem uma variável predefinida (como str
). Não há vestígios da palavra self
no arquivo de sintaxe; portanto, parece que o autor dela raciocinou da mesma maneira :-)
Se você deseja self
destacar, precisará criar uma regra de sintaxe para isso:
:syn keyword pythonBuiltin self
O pythonBuiltin
nome do grupo já está definido no arquivo de sintaxe padrão e vinculado ao Function
grupo de destaque. Para usar um novo grupo de destaque, use algo como:
:syn keyword pythonSelf self
:highlight def link pythonSelf Special
Para fazer essas alterações, você não pode simplesmente colocá-las no seu arquivo vimrc. O arquivo de sintaxe o substituirá. Em vez disso, você precisará executá-lo após o carregamento do arquivo de sintaxe, o que pode ser feito de duas maneiras:
Use um FileType
autocmd:
augroup python
autocmd!
autocmd FileType python
\ syn keyword pythonSelf self
\ | highlight def link pythonSelf Special
augroup end
Use o after-directory
, ~/.vim/after/syntax/python.vim
:
syn keyword pythonSelf self
highlight def link pythonSelf Special
Ambos os métodos são efetivamente os mesmos. Use o que você preferir.