Estou tentando corrigir o destaque de sintaxe para python; minhas cores são diferentes daquelas nas capturas de tela do que "deveria" parecer em diferentes esquemas de cores do vim. E você pode ver a diferença na comparação de .rb (que é exibida corretamente) com .py, que parece estar desativada:
Por exemplo, observe como self
não está destacado. (Isso está na base16, mas a comparação seria semelhante em outros esquemas de cores). Geralmente, parece que o realce da sintaxe do objeto está errado.
Algumas coisas que eu tentei:
- Observando os scripts de sintaxe, o vim carrega; a única diferença entre .py e .rb no exemplo abaixo é que, obviamente, o ruby obtém indent / ruby.vim e sintaxe / ruby.vim enquanto python obtém indent / python.vim e sintaxe / python.vim. Estes são os arquivos que acompanham o homebrew vim.
- Carregando os mesmos arquivos no macvim ao invés do terminal (iterm2) vim; mesmo problema, os arquivos são exatamente iguais aos da imagem.
- Adicionando o novo arquivo python.vim . Não resolve o problema, mesmo se usado como um
.vim/after
script.
Todas as sugestões são bem-vindas; Eu tenho batido minha cabeça nisso por horas, e não consigo descobrir por que o destaque não está funcionando como o esperado.
syntax-highlighting
filetype-python
sl8r000
fonte
fonte
Respostas:
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ósdef
deve aumentar o nível de indentação" e "a linha apósend
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 sidoFunction
ou algo mais. Por que é issoType
? 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 fazerself = "foo"
oudef self()
. Estes são erros. Mas este não é o caso em Python. É apenas outra variável sem propriedades especiais. Fazendo:é realmente "traduzido" pelo Python para:
O nome
self
é apenas convenção (quase universalmente adotado), mas você pode nomear o que quiser;def x(this):
oudef x(xxx):
são igualmente válidos. Você também pode usar o nome emself
qualquer lugar que desejar;self = 'foo'
edef 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 (comostr
). Não há vestígios da palavraself
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:O
pythonBuiltin
nome do grupo já está definido no arquivo de sintaxe padrão e vinculado aoFunction
grupo de destaque. Para usar um novo grupo de destaque, use algo como: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:Use o
after-directory
,~/.vim/after/syntax/python.vim
:Ambos os métodos são efetivamente os mesmos. Use o que você preferir.
fonte